Sisyphus repository
Last update: 15 october 2021 | SRPMs: 17364 | Visits: 22087154
en ru br
ALT Linux repos
S:1.6-alt4
5.0: 1.0-alt0.alpha2

Group :: Graphics
RPM: geeqie

 Main   Changelog   Spec   Patches   Sources   Download   Gear   Bugs and FR  Repocop 

Patch: geeqie-1.0-fix-fullscreen.patch
Download


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@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);
 
design & coding: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
current maintainer: Michael Shigorin