]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
x11: make window fullscreen by default
authorRay Strode <rstrode@redhat.com>
Wed, 24 Oct 2012 20:26:27 +0000 (16:26 -0400)
committerRay Strode <rstrode@redhat.com>
Wed, 24 Oct 2012 20:26:27 +0000 (16:26 -0400)
The x11 plugin currently does multi-head by default, which is
sometimes useful, but often just gets in the way.

This commit makes it use one, fullscreen head by default, and
falls back to the old behavior if the PLY_CREATE_FAKE_MULTI_HEAD_SETUP
environment variable is set.

src/plugins/renderers/x11/plugin.c

index 9d66a63e2ed80530f7cda86f409acdb54c249d0b..54980ee5c7e196a41bb2724cc77ae097cbf9bd60 100644 (file)
@@ -68,6 +68,7 @@ struct _ply_renderer_head
   GtkWidget              *window;
   GdkPixmap              *pixmap;
   cairo_surface_t        *image;
+  uint32_t                is_fullscreen : 1;
 };
 
 struct _ply_renderer_input_source
@@ -172,43 +173,78 @@ close_device (ply_renderer_backend_t *backend)
   return;
 }
 
+static void
+create_fake_multi_head_setup (ply_renderer_backend_t *backend)
+{
+  ply_renderer_head_t *head;
+
+  head = calloc (1, sizeof (ply_renderer_head_t));
+
+  head->backend = backend;
+  head->area.x = 0;
+  head->area.y = 0;
+  head->area.width = 800;         /* FIXME hardcoded */
+  head->area.height = 600;
+  head->pixmap = gdk_pixmap_new (NULL,
+                                 head->area.width,
+                                 head->area.height,
+                                 24);
+  head->pixel_buffer = ply_pixel_buffer_new (head->area.width, head->area.height);
+
+  ply_list_append_data (backend->heads, head);
+
+  head = calloc (1, sizeof (ply_renderer_head_t));
+
+  head->backend = backend;
+  head->area.x = 800;
+  head->area.y = 0;
+  head->area.width = 640;         /* FIXME hardcoded */
+  head->area.height = 480;
+  head->pixmap = gdk_pixmap_new (NULL,
+                                 head->area.width,
+                                 head->area.height,
+                                 24);
+  head->pixel_buffer = ply_pixel_buffer_new (head->area.width, head->area.height);
+
+  ply_list_append_data (backend->heads, head);
+}
+
+static void
+create_fullscreen_single_head_setup (ply_renderer_backend_t *backend)
+{
+  ply_renderer_head_t *head;
+  GdkRectangle         monitor_geometry;
+
+  gdk_screen_get_monitor_geometry (gdk_screen_get_default (), 0, &monitor_geometry);
+
+  head = calloc (1, sizeof (ply_renderer_head_t));
+
+  head->backend = backend;
+  head->area.x = monitor_geometry.x;
+  head->area.y = monitor_geometry.y;
+  head->area.width = monitor_geometry.width;
+  head->area.height = monitor_geometry.height;
+  head->is_fullscreen = true;
+  head->pixmap = gdk_pixmap_new (NULL,
+                                 head->area.width,
+                                 head->area.height,
+                                 24);
+  head->pixel_buffer = ply_pixel_buffer_new (head->area.width, head->area.height);
+
+  ply_list_append_data (backend->heads, head);
+}
+
 static bool
 query_device (ply_renderer_backend_t *backend)
 {
-  ply_renderer_head_t *head;
   assert (backend != NULL);
 
   if (ply_list_get_first_node (backend->heads) == NULL)
     {
-      head = calloc (1, sizeof (ply_renderer_head_t));
-
-      head->backend = backend;
-      head->area.x = 0;
-      head->area.y = 0;
-      head->area.width = 800;         /* FIXME hardcoded */
-      head->area.height = 600;
-      head->pixmap = gdk_pixmap_new (NULL,
-                                     head->area.width,
-                                     head->area.height,
-                                     24);
-      head->pixel_buffer = ply_pixel_buffer_new (head->area.width, head->area.height);
-
-      ply_list_append_data (backend->heads, head);
-
-      head = calloc (1, sizeof (ply_renderer_head_t));
-
-      head->backend = backend;
-      head->area.x = 800;
-      head->area.y = 0;
-      head->area.width = 640;         /* FIXME hardcoded */
-      head->area.height = 480;
-      head->pixmap = gdk_pixmap_new (NULL,
-                                     head->area.width,
-                                     head->area.height,
-                                     24);
-      head->pixel_buffer = ply_pixel_buffer_new (head->area.width, head->area.height);
-
-      ply_list_append_data (backend->heads, head);
+      if (getenv ("PLY_CREATE_FAKE_MULTI_HEAD_SETUP") != NULL)
+        create_fake_multi_head_setup (backend);
+      else
+        create_fullscreen_single_head_setup (backend);
     }
 
   return true;
@@ -256,6 +292,11 @@ map_to_device (ply_renderer_backend_t *backend)
           gdk_window_set_decorations (head->window->window, GDK_DECOR_BORDER);
           gtk_window_move (GTK_WINDOW (head->window), head->area.x, head->area.y);
 
+          gtk_window_set_type_hint (GTK_WINDOW (head->window), GDK_WINDOW_TYPE_HINT_DOCK);
+
+          if (head->is_fullscreen)
+            gtk_window_fullscreen (GTK_WINDOW (head->window));
+
           gtk_widget_add_events (head->window, GDK_BUTTON1_MOTION_MASK);
 
           g_signal_connect (head->window, "motion-notify-event",