changeset 1968:72136ef38f30

Make fullscreen mode actually use the full screen. Use override-redirect to ensure fullscreen windows are drawn over any docks and panels. Bug: http://sourceforge.net/support/tracker.php?aid=2925034 Bug-Ubuntu: https://launchpad.net/bugs/788321
author Daniel van Vugt <vanvugt@gmail.com>
date Thu, 18 Aug 2011 22:43:29 +0200
parents ed02f9ffd7ad
children ad2044405aba
files src/fullscreen.c
diffstat 1 files changed, 10 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/fullscreen.c	Tue Mar 08 20:51:56 2011 +0100
+++ b/src/fullscreen.c	Thu Aug 18 22:43:29 2011 +0200
@@ -227,6 +227,7 @@
 	gint x, y;
 	gint w, h;
 	GdkGeometry geometry;
+	GdkWindow *gdkwin;
 
 	if (!window || !imd) return NULL;
 
@@ -256,15 +257,14 @@
 		 */
 		gtk_window_fullscreen(GTK_WINDOW(fs->window));
 		}
-	else if (options->fullscreen.above)
+	else
 		{
-		/* request to be above other windows */
-		gtk_window_set_keep_above(GTK_WINDOW(fs->window), TRUE);
+		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_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);
@@ -291,6 +291,11 @@
 	gtk_window_set_default_size(GTK_WINDOW(fs->window), w, h);
 	gtk_window_move(GTK_WINDOW(fs->window), x, y);
 
+	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);
 
 	gtk_container_add(GTK_CONTAINER(fs->window), fs->imd->widget);