Date: Friday, October 5, 2012 @ 20:59:55
  Author: eric
Revision: 168109

upgpkg: geeqie 1.1-2

Fix fullscreen (close FS#31145)

Added:
  geeqie/trunk/geeqie-fix-fullscreen.patch
Modified:
  geeqie/trunk/PKGBUILD

-----------------------------+
 PKGBUILD                    |    9 +-
 geeqie-fix-fullscreen.patch |  143 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 149 insertions(+), 3 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2012-10-06 00:49:54 UTC (rev 168108)
+++ PKGBUILD    2012-10-06 00:59:55 UTC (rev 168109)
@@ -4,7 +4,7 @@
 
 pkgname=geeqie
 pkgver=1.1
-pkgrel=1
+pkgrel=2
 pkgdesc="A lightweight image browser and viewer"
 arch=('i686' 'x86_64')
 url="http://geeqie.sourceforge.net/";
@@ -13,11 +13,14 @@
 makedepends=('intltool' 'doxygen' 'gnome-doc-utils')
 optdepends=('librsvg: SVG rendering')
 install=geeqie.install
-source=(http://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.gz)
-sha1sums=('77167479e91e03d9512535a146c5d2d77941257f')
+source=(http://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.gz
 
+        geeqie-fix-fullscreen.patch)
+sha1sums=('77167479e91e03d9512535a146c5d2d77941257f'
+          '57c8b058e6ec1fc2f691650b212acc5dafcd5891')
 
 build() {
   cd "${srcdir}/${pkgname}-${pkgver}"
+  patch -p1 -i"${srcdir}/geeqie-fix-fullscreen.patch"
   CPPFLAGS="-D_FILE_OFFSET_BITS=64" ./configure --prefix=/usr
   make
 }

Added: geeqie-fix-fullscreen.patch
===================================================================
--- geeqie-fix-fullscreen.patch                         (rev 0)
+++ geeqie-fix-fullscreen.patch 2012-10-06 00:59:55 UTC (rev 168109)
@@ -0,0 +1,143 @@
+Description: Make fullscreen modes actually use the full screen.
+ The default fullscreen mode now leaves everything up to the window manager,
+ which usually produces the best result.  Custom fullscreen modes now use
+ override-redirect to ensure docks and panels never obscure the image.
+Author: Daniel van Vugt <[email protected]>
+Bug: http://sourceforge.net/support/tracker.php?aid=2925034
+Bug-Ubuntu: https://launchpad.net/bugs/788321
+Forwarded: yes
+
+=== modified file 'src/fullscreen.c'
+--- old/src/fullscreen.c       2010-02-26 10:41:38 +0000
++++ new/src/fullscreen.c       2011-08-16 03:55:04 +0000
+@@ -218,75 +218,65 @@
+                                void (*stop_func)(FullScreenData *, gpointer), 
gpointer stop_data)
+ {
+       FullScreenData *fs;
+-      GdkScreen *screen;
+-      gboolean same;
+-      gint x, y;
+-      gint w, h;
+-      GdkGeometry geometry;
+ 
+       if (!window || !imd) return NULL;
+ 
++      DEBUG_1("full screen requests screen %d", options->fullscreen.screen);
++
+       fs = g_new0(FullScreenData, 1);
+-
+       fs->cursor_state = FULLSCREEN_CURSOR_HIDDEN;
+-
+       fs->normal_window = window;
+       fs->normal_imd = imd;
+-
+       fs->stop_func = stop_func;
+       fs->stop_data = stop_data;
+-
+-      DEBUG_1("full screen requests screen %d", options->fullscreen.screen);
+-      fullscreen_prefs_get_geometry(options->fullscreen.screen, window, &x, 
&y, &w, &h,
+-                                    &screen, &same);
+-
+-      fs->window = window_new(GTK_WINDOW_TOPLEVEL, "fullscreen", NULL, NULL, 
_("Full screen"));
+-
+-      /* this requests no decorations, if you still have them complain to the 
window manager author(s) */
+-      gtk_window_set_decorated(GTK_WINDOW(fs->window), FALSE);
++      fs->window = window_new(GTK_WINDOW_TOPLEVEL, "fullscreen", NULL, NULL,
++              _("Full screen"));
+ 
+       if (options->fullscreen.screen < 0)
+-              {
+-              /* If we want control of the window size and position this is 
not what we want.
+-               * Geeqie needs control of which monitor(s) to use for full 
screen.
+-               */
++              {  /* Fullscreen as determined by the window manager... */
+               gtk_window_fullscreen(GTK_WINDOW(fs->window));
+               }
+-      else if (options->fullscreen.above)
+-              {
+-              /* request to be above other windows */
+-              gtk_window_set_keep_above(GTK_WINDOW(fs->window), TRUE);
++      else
++              {  /* Custom fullscreen modes. Done by hand, the hard way... */
++              GdkScreen *screen;
++              gint x, y, w, h;
++              GdkGeometry geometry;
++              GtkWindow *gtkwin = GTK_WINDOW(fs->window);
++              GdkWindow *gdkwin;
++
++              fullscreen_prefs_get_geometry(options->fullscreen.screen,
++                      window, &x, &y, &w, &h, &screen, NULL);
++
++              if (options->fullscreen.above)
++                      gtk_window_set_keep_above(gtkwin, TRUE);
++      
++              gtk_window_set_screen(gtkwin, screen);
++              gtk_window_set_decorated(gtkwin, FALSE);
++              gtk_window_set_resizable(gtkwin, FALSE);
++              gtk_container_set_border_width(GTK_CONTAINER(fs->window), 0);
++      
++              geometry.min_width = w;
++              geometry.min_height = h;
++              geometry.max_width = w;
++              geometry.max_height = h;
++              geometry.base_width = w;
++              geometry.base_height = h;
++              gtk_window_set_geometry_hints(gtkwin, fs->window, &geometry,
++                      GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE |
++                      GDK_HINT_BASE_SIZE);
++      
++              gtk_window_set_default_size(gtkwin, w, h);
++              gtk_window_move(gtkwin, x, y);
++      
++              gtk_widget_realize(fs->window);
++              gdkwin = gtk_widget_get_window(fs->window);
++              if (gdkwin != NULL)
++                      gdk_window_set_override_redirect(gdkwin, TRUE);
+               }
+ 
+-      gtk_window_set_resizable(GTK_WINDOW(fs->window), FALSE);
+-
+-      gtk_window_set_screen(GTK_WINDOW(fs->window), screen);
+-      gtk_container_set_border_width(GTK_CONTAINER(fs->window), 0);
+       g_signal_connect(G_OBJECT(fs->window), "delete_event",
+                        G_CALLBACK(fullscreen_delete_cb), fs);
+ 
+-      geometry.min_width = w;
+-      geometry.min_height = h;
+-      geometry.max_width = w;
+-      geometry.max_height = h;
+-      geometry.base_width = w;
+-      geometry.base_height = h;
+-      geometry.win_gravity = GDK_GRAVITY_STATIC;
+-      /* By setting USER_POS and USER_SIZE, most window managers will
+-       * not request positioning of the full screen window (for example twm).
+-       *
+-       * In addition, setting gravity to STATIC will result in the
+-       * decorations of twm to not effect the requested window position,
+-       * the decorations will simply be off screen, except in multi monitor 
setups :-/
+-       */
+-      gtk_window_set_geometry_hints(GTK_WINDOW(fs->window), fs->window, 
&geometry,
+-                                    GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE | 
GDK_HINT_BASE_SIZE |
+-                                    GDK_HINT_WIN_GRAVITY |
+-                                    GDK_HINT_USER_POS);
+-
+-      gtk_window_set_default_size(GTK_WINDOW(fs->window), w, h);
+-      gtk_window_move(GTK_WINDOW(fs->window), x, y);
+-
+       fs->imd = image_new(FALSE);
+ 
+       gtk_container_add(GTK_CONTAINER(fs->window), fs->imd->widget);
+@@ -393,7 +383,11 @@
+                       else
+                               {
+                               gdk_screen_get_monitor_geometry(screen, j, 
&rect);
+-                              subname = g_strdup_printf("%s %d", 
_("Monitor"), j + 1);
++                              subname = 
gdk_screen_get_monitor_plug_name(screen, j);
++                              if (subname == NULL)
++                                      {
++                                      subname = g_strdup_printf("%s %d", 
_("Monitor"), j + 1);
++                                      }
+                               }
+ 
+                       sd = g_new0(ScreenData, 1);
+

Reply via email to