[geeqie/f18] Merge a patch to fix fullscreen mode.

Michael Schwendt mschwendt at fedoraproject.org
Thu Nov 22 05:57:40 UTC 2012


commit 5d7a51eb397c071bda0326a0371e69bb3d202f89
Author: Michael Schwendt <mschwendt at fedoraproject.org>
Date:   Thu Nov 22 06:57:34 2012 +0100

    Merge a patch to fix fullscreen mode.

 geeqie-1.0-fix-fullscreen.patch |  143 +++++++++++++++++++++++++++++++++++++++
 geeqie.spec                     |    8 ++-
 2 files changed, 150 insertions(+), 1 deletions(-)
---
diff --git a/geeqie-1.0-fix-fullscreen.patch b/geeqie-1.0-fix-fullscreen.patch
new file mode 100644
index 0000000..0547395
--- /dev/null
+++ b/geeqie-1.0-fix-fullscreen.patch
@@ -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 <vanvugt at gmail.com>
+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);
+
diff --git a/geeqie.spec b/geeqie.spec
index 734e47b..b34ea12 100644
--- a/geeqie.spec
+++ b/geeqie.spec
@@ -3,7 +3,7 @@
 Summary: Image browser and viewer
 Name: geeqie
 Version: 1.0
-Release: 19%{?dist}
+Release: 20%{?dist}
 License: GPLv2+
 Group: User Interface/X
 # svn + autogen
@@ -32,6 +32,8 @@ Patch7: geeqie-1.0-ui_pathsel.patch
 # add -Wl,--as-needed without disturbing %%configure macro
 # this touches both Makefile.in and Makefile.am as autoreconf is used
 Patch8: geeqie-1.0-LDFLAGS.patch
+# in upstream bug tracker
+Patch9: geeqie-1.0-fix-fullscreen.patch
 
 BuildRequires: gtk2-devel
 BuildRequires: lcms-devel
@@ -78,6 +80,7 @@ done
 %patch6 -p1 -b .copy-chown
 %patch7 -p1 -b .ui_pathsel
 %patch8 -p1 -b .LDFLAGS
+%patch9 -p1 -b .fix-fullscreen
 
 
 %build
@@ -127,6 +130,9 @@ update-desktop-database &> /dev/null || :
 
 
 %changelog
+* Thu Nov 22 2012 Michael Schwendt <mschwendt at fedoraproject.org> - 1.0-20
+- Merge a patch to fix fullscreen mode.
+
 * Tue Aug 14 2012 Michael Schwendt <mschwendt at fedoraproject.org> - 1.0-19
 - Fix license tag to GPLv2+ as GPL3 (only in file COPYING) had been
   added only temporarily for 1.0-alpha1.


More information about the scm-commits mailing list