changeset 2300:5256cfa521f6

Merge merge request 379 * github/merge-requests/379: 'Stay above' option now works independently of screen for fullscreen window Fix fullscreen - remove all the garbage which breaks things and let Gtk do its job.
author Klaus Ethgen <Klaus@Ethgen.de>
date Thu, 28 Apr 2016 19:41:15 +0100
parents 4d0008b449d6 (current diff) e093199a85de (diff)
children dec8d9db5770
files
diffstat 1 files changed, 27 insertions(+), 46 deletions(-) [+]
line wrap: on
line diff
--- a/src/fullscreen.c	Tue Apr 26 15:52:12 2016 +0100
+++ b/src/fullscreen.c	Thu Apr 28 19:41:15 2016 +0100
@@ -214,7 +214,6 @@
 	gint x, y;
 	gint w, h;
 	GdkGeometry geometry;
-	GdkWindow *gdkwin;
 
 	if (!window || !imd) return NULL;
 
@@ -234,35 +233,30 @@
 
 	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);
-
-	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.
-		 */
-		gtk_window_fullscreen(GTK_WINDOW(fs->window));
-		}
-	else
-		{
-		gtk_window_set_screen(GTK_WINDOW(fs->window), screen);
-		if (options->fullscreen.above)
-			gtk_window_set_keep_above(GTK_WINDOW(fs->window), TRUE);
-		}
-
-	gtk_window_set_resizable(GTK_WINDOW(fs->window), FALSE);
-	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;
+	/* few cosmetic details */
+	gtk_window_set_decorated(GTK_WINDOW(fs->window), FALSE);
+	gtk_container_set_border_width(GTK_CONTAINER(fs->window), 0);
+
+	/* make window fullscreen -- let Gtk do it's job, don't screw it in any way */
+	gtk_window_fullscreen(GTK_WINDOW(fs->window));
+
+	/* move it to requested screen */
+	if (options->fullscreen.screen >= 0) {
+		gtk_window_set_screen(GTK_WINDOW(fs->window), screen);
+	}
+
+	/* keep window above others, if requested */
+	if (options->fullscreen.above) {
+		gtk_window_set_keep_above(GTK_WINDOW(fs->window), TRUE);
+	}
+
+	/* set default size and position, so the window appears where it was before */
+	gtk_window_set_default_size(GTK_WINDOW(fs->window), w, h);
+	gtk_window_move(GTK_WINDOW(fs->window), x, y);
+
 	/* By setting USER_POS and USER_SIZE, most window managers will
 	 * not request positioning of the full screen window (for example twm).
 	 *
@@ -270,18 +264,15 @@
 	 * decorations of twm to not effect the requested window position,
 	 * the decorations will simply be off screen, except in multi monitor setups :-/
 	 */
+	geometry.min_width = 1;
+	geometry.min_height = 1;
+	geometry.base_width = w;
+	geometry.base_height = h;
+	geometry.win_gravity = GDK_GRAVITY_STATIC;
 	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);
+			GDK_HINT_WIN_GRAVITY | GDK_HINT_USER_POS | GDK_HINT_USER_SIZE);
 
 	gtk_widget_realize(fs->window);
-	gdkwin = gtk_widget_get_window(fs->window);
-	if (gdkwin != NULL)
-		gdk_window_set_override_redirect(gdkwin, TRUE);
 
 	fs->imd = image_new(FALSE);
 
@@ -637,7 +628,6 @@
 	GtkWidget *combo;
 	GtkListStore *store;
 	GtkCellRenderer *renderer;
-	GtkWidget *button = NULL;
 	GList *list;
 	GList *work;
 	gint current = 0;
@@ -658,15 +648,6 @@
 	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), renderer,
 				       "text", FS_MENU_COLUMN_NAME, NULL);
 
-	if (above_value)
-		{
-		button = pref_checkbox_new_int(vbox, _("Stay above other windows"),
-					       *above_value, above_value);
-		gtk_widget_set_sensitive(button, *screen_value != -1);
-
-		g_object_set_data(G_OBJECT(combo), BUTTON_ABOVE_KEY, button);
-		}
-
 	fullscreen_prefs_selection_add(store, _("Determined by Window Manager"), -1);
 	fullscreen_prefs_selection_add(store, _("Active screen"), 0);
 	if (*screen_value == 0) current = 1;