From c766cdb2d0b36d065a6f2a56aa1541146592374d Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Mon, 27 Aug 2018 19:07:53 +0200
Subject: Disconnected glance signals on view change.

---
 src/gui/panels/glance.c | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/gui/panels/glance.c b/src/gui/panels/glance.c
index 638adc7..ea16489 100644
--- a/src/gui/panels/glance.c
+++ b/src/gui/panels/glance.c
@@ -295,16 +295,28 @@ GPanelItem *g_glance_panel_new(void)
 
 static void change_glance_panel_current_view(GGlancePanel *panel, GLoadedPanel *old, GLoadedPanel *new)
 {
-    GtkWidget *parent;                      /* Support défilant de la vue  */
     GtkAdjustment *adj;                     /* Gestionnaire du défilement  */
+    GtkWidget *parent;                      /* Support défilant de la vue  */
 
     if (panel->view != NULL)
     {
         g_object_unref(G_OBJECT(panel->view));
         panel->view = NULL;
 
-        g_object_unref(G_OBJECT(panel->support));
-        panel->support = NULL;
+        if (panel->support != NULL)
+        {
+            adj = gtk_scrolled_window_get_hadjustment(panel->support);
+            g_signal_handlers_disconnect_by_func(adj, G_CALLBACK(on_view_scroll_setup), panel);
+            g_signal_handlers_disconnect_by_func(adj, G_CALLBACK(on_view_scrolled), panel);
+
+            adj = gtk_scrolled_window_get_vadjustment(panel->support);
+            g_signal_handlers_disconnect_by_func(adj, G_CALLBACK(on_view_scroll_setup), panel);
+            g_signal_handlers_disconnect_by_func(adj, G_CALLBACK(on_view_scrolled), panel);
+
+            g_object_unref(G_OBJECT(panel->support));
+            panel->support = NULL;
+
+        }
 
         if (panel->cache != NULL)
         {
-- 
cgit v0.11.2-87-g4458