From: Ray Strode Date: Wed, 24 Oct 2012 20:26:27 +0000 (-0400) Subject: x11: make window fullscreen by default X-Git-Tag: 0.8.8~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=00946e8204d2c4bcf0e002f180b7ff31722f195f;p=thirdparty%2Fplymouth.git x11: make window fullscreen by default 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. --- diff --git a/src/plugins/renderers/x11/plugin.c b/src/plugins/renderers/x11/plugin.c index 9d66a63e..54980ee5 100644 --- a/src/plugins/renderers/x11/plugin.c +++ b/src/plugins/renderers/x11/plugin.c @@ -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",