diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2018-02-21 21:48:24 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2018-02-21 21:48:24 (GMT) |
commit | 2a03971cd2b19a6716a0e5e6896dcfcc91031a6a (patch) | |
tree | 53dffdc2e486a53711763d2c57a5137f1937a210 /src | |
parent | a60e1fe19d09eb379c88fdbbe018ca086dc05bcb (diff) |
Skipped the copy of a panel content if the widget is not realized.
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/panels/panel.c | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/src/gui/panels/panel.c b/src/gui/panels/panel.c index 2a2d603..2c89ac7 100644 --- a/src/gui/panels/panel.c +++ b/src/gui/panels/panel.c @@ -725,6 +725,7 @@ static gboolean g_panel_item_draw_mask(GtkWidget *widget, cairo_t *cr, GPanelIte void g_panel_item_switch_to_updating_mask(GPanelItem *item) { GtkWidget *content; /* Composant à faire évoluer */ + GdkWindow *window; /* Fenêtre au contenu à copier */ int width; /* Largeur du composant actuel */ int height; /* Hauteur du composant actuel */ cairo_t *cr; /* Pinceau pour les dessins */ @@ -734,22 +735,28 @@ void g_panel_item_switch_to_updating_mask(GPanelItem *item) /* Copie de l'affichage courant */ + assert(item->surface == NULL); + content = GTK_WIDGET(gtk_builder_get_object(item->builder, "content")); - width = gtk_widget_get_allocated_width(content); - height = gtk_widget_get_allocated_height(content); + window = gtk_widget_get_window(content); - assert(item->surface == NULL); + if (window != NULL) + { + width = gtk_widget_get_allocated_width(content); + height = gtk_widget_get_allocated_height(content); + + item->surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height); - item->surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height); + cr = cairo_create(item->surface); - cr = cairo_create(item->surface); + gdk_cairo_set_source_window(cr, window, 0, 0); - gdk_cairo_set_source_window(cr, gtk_widget_get_window(content), 0, 0); + cairo_paint(cr); - cairo_paint(cr); + cairo_destroy(cr); - cairo_destroy(cr); + } /* Sauvegarde de l'éventuelle position */ @@ -771,7 +778,8 @@ void g_panel_item_switch_to_updating_mask(GPanelItem *item) gtk_spinner_start(GTK_SPINNER(mask)); - g_signal_connect(mask, "draw", G_CALLBACK(g_panel_item_draw_mask), item); + if (item->surface != NULL) + g_signal_connect(mask, "draw", G_CALLBACK(g_panel_item_draw_mask), item); gtk_stack_set_visible_child(stack, mask); @@ -825,7 +833,10 @@ void g_panel_item_switch_to_updated_content(GPanelItem *item) /* Supression de la copie d'affichage */ - cairo_surface_destroy(item->surface); - item->surface = NULL; + if (item->surface != NULL) + { + cairo_surface_destroy(item->surface); + item->surface = NULL; + } } |