From: Ray Strode Date: Wed, 24 Oct 2012 20:12:23 +0000 (-0400) Subject: x11: only create windows when necessary X-Git-Tag: 0.8.8~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9f444e8281edda6d1dc0d18ced49f5957d2e75af;p=thirdparty%2Fplymouth.git 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. --- diff --git a/src/plugins/renderers/x11/plugin.c b/src/plugins/renderers/x11/plugin.c index e68d6af7..9d66a63e 100644 --- a/src/plugins/renderers/x11/plugin.c +++ b/src/plugins/renderers/x11/plugin.c @@ -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); - - 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); - + 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); + } ply_renderer_head_redraw (backend, head); node = next_node; }