mirror of
https://gitlab.freedesktop.org/plymouth/plymouth.git
synced 2026-05-07 18:58:01 +02:00
x11: only create windows when necessary
right now, if a user does show-splash more than once, the X11 plugin will keep recreating windows. This commit changes it to only create windows when necessary.
This commit is contained in:
parent
7506f8e0a0
commit
9f444e8281
1 changed files with 28 additions and 26 deletions
|
|
@ -238,34 +238,36 @@ map_to_device (ply_renderer_backend_t *backend)
|
|||
head = (ply_renderer_head_t *) ply_list_node_get_data (node);
|
||||
next_node = ply_list_get_next_node (backend->heads, node);
|
||||
|
||||
head->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_resizable (GTK_WINDOW (head->window), FALSE);
|
||||
gtk_widget_set_size_request (head->window,
|
||||
head->area.width,
|
||||
head->area.height);
|
||||
shadow_buffer = ply_pixel_buffer_get_argb32_data (head->pixel_buffer);
|
||||
head->image = cairo_image_surface_create_for_data ((unsigned char *) shadow_buffer,
|
||||
CAIRO_FORMAT_ARGB32,
|
||||
head->area.width, head->area.height,
|
||||
head->area.width * 4);
|
||||
gtk_widget_set_app_paintable (head->window, TRUE);
|
||||
gtk_widget_show_all (head->window);
|
||||
gdk_window_set_back_pixmap (head->window->window, head->pixmap, FALSE);
|
||||
gdk_window_set_decorations (head->window->window, GDK_DECOR_BORDER);
|
||||
gtk_window_move (GTK_WINDOW (head->window), head->area.x, head->area.y);
|
||||
if (head->window == NULL)
|
||||
{
|
||||
head->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_resizable (GTK_WINDOW (head->window), FALSE);
|
||||
gtk_widget_set_size_request (head->window,
|
||||
head->area.width,
|
||||
head->area.height);
|
||||
shadow_buffer = ply_pixel_buffer_get_argb32_data (head->pixel_buffer);
|
||||
head->image = cairo_image_surface_create_for_data ((unsigned char *) shadow_buffer,
|
||||
CAIRO_FORMAT_ARGB32,
|
||||
head->area.width, head->area.height,
|
||||
head->area.width * 4);
|
||||
gtk_widget_set_app_paintable (head->window, TRUE);
|
||||
gtk_widget_show_all (head->window);
|
||||
gdk_window_set_back_pixmap (head->window->window, head->pixmap, FALSE);
|
||||
gdk_window_set_decorations (head->window->window, GDK_DECOR_BORDER);
|
||||
gtk_window_move (GTK_WINDOW (head->window), head->area.x, head->area.y);
|
||||
|
||||
gtk_widget_add_events (head->window, GDK_BUTTON1_MOTION_MASK);
|
||||
|
||||
g_signal_connect (head->window, "motion-notify-event",
|
||||
G_CALLBACK (on_motion_notify_event),
|
||||
head);
|
||||
g_signal_connect (head->window, "key-press-event",
|
||||
G_CALLBACK (on_key_event),
|
||||
&backend->input_source);
|
||||
g_signal_connect (head->window, "delete-event",
|
||||
G_CALLBACK (on_window_destroy),
|
||||
NULL);
|
||||
gtk_widget_add_events (head->window, GDK_BUTTON1_MOTION_MASK);
|
||||
|
||||
g_signal_connect (head->window, "motion-notify-event",
|
||||
G_CALLBACK (on_motion_notify_event),
|
||||
head);
|
||||
g_signal_connect (head->window, "key-press-event",
|
||||
G_CALLBACK (on_key_event),
|
||||
&backend->input_source);
|
||||
g_signal_connect (head->window, "delete-event",
|
||||
G_CALLBACK (on_window_destroy),
|
||||
NULL);
|
||||
}
|
||||
ply_renderer_head_redraw (backend, head);
|
||||
node = next_node;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue