From 2a03971cd2b19a6716a0e5e6896dcfcc91031a6a Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Wed, 21 Feb 2018 22:48:24 +0100
Subject: Skipped the copy of a panel content if the widget is not realized.

---
 ChangeLog              |  5 +++++
 src/gui/panels/panel.c | 33 ++++++++++++++++++++++-----------
 2 files changed, 27 insertions(+), 11 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 30cb3c7..d47d490 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 18-02-21  Cyrille Bagard <nocbos@gmail.com>
 
+	* src/gui/panels/panel.c:
+	Skip the copy of a panel content if the widget is not realized.
+
+18-02-21  Cyrille Bagard <nocbos@gmail.com>
+
 	* src/common/extstr.c:
 	* src/common/extstr.h:
 	Define a custom function to extract tokens from strings.
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;
+    }
 
 }
-- 
cgit v0.11.2-87-g4458