mirror of
https://gitlab.freedesktop.org/plymouth/plymouth.git
synced 2026-05-07 21:18:05 +02:00
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.
This commit is contained in:
parent
9f444e8281
commit
00946e8204
1 changed files with 71 additions and 30 deletions
|
|
@ -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",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue