Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37556968
en ru br
Репозитории ALT
S:2.0.1-alt1
5.1: 1.0-alt0.beta2
www.altlinux.org/Changes

Группа :: Графика
Пакет: geeqie

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: geeqie-1.0-fix-fullscreen.patch
Скачать


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);
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin