[gimp/gimp-2-10] Issue #2957 - Gimp crashes when I attempt to change the icon size



commit 645d987e07ec1df3594f43a87a5b1674f05cd02c
Author: Michael Natterer <mitch gimp org>
Date:   Sun Jun 2 03:25:49 2019 +0200

    Issue #2957 - Gimp crashes when I attempt to change the icon size
    
    Simplify GimpDockbook's signal connect/disconnect to
    GimpGuiConfig::size-changed a lot, most likely to a point where some
    connection doesn't get leaked, so this bug is probably fixed.

 app/widgets/gimpdockbook.c | 38 +++++++++++++-------------------------
 1 file changed, 13 insertions(+), 25 deletions(-)
---
diff --git a/app/widgets/gimpdockbook.c b/app/widgets/gimpdockbook.c
index 0a100e9d3b..283d660a0f 100644
--- a/app/widgets/gimpdockbook.c
+++ b/app/widgets/gimpdockbook.c
@@ -310,6 +310,10 @@ gimp_dockbook_dispose (GObject *object)
 {
   GimpDockbook *dockbook = GIMP_DOCKBOOK (object);
 
+  g_signal_handlers_disconnect_by_func (dockbook->p->ui_manager->gimp->config,
+                                        gimp_dockbook_config_size_changed,
+                                        dockbook);
+
   gimp_dockbook_remove_tab_timeout (dockbook);
 
   while (dockbook->p->dockables)
@@ -332,14 +336,6 @@ gimp_dockbook_finalize (GObject *object)
 
   g_clear_object (&dockbook->p->ui_manager);
 
-  if (dockbook->p->dock)
-    {
-      g_signal_handlers_disconnect_by_func (gimp_dock_get_context (dockbook->p->dock)->gimp->config,
-                                            gimp_dockbook_config_size_changed,
-                                            dockbook);
-      dockbook->p->dock = NULL;
-    }
-
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
@@ -880,6 +876,11 @@ gimp_dockbook_new (GimpMenuFactory *menu_factory)
                                                            dockbook,
                                                            FALSE);
 
+  g_signal_connect (dockbook->p->ui_manager->gimp->config,
+                    "size-changed",
+                    G_CALLBACK (gimp_dockbook_config_size_changed),
+                    dockbook);
+
   gimp_help_connect (GTK_WIDGET (dockbook), gimp_dockbook_help_func,
                      GIMP_HELP_DOCK, dockbook);
 
@@ -901,16 +902,7 @@ gimp_dockbook_set_dock (GimpDockbook *dockbook,
   g_return_if_fail (GIMP_IS_DOCKBOOK (dockbook));
   g_return_if_fail (dock == NULL || GIMP_IS_DOCK (dock));
 
-  if (dockbook->p->dock && gimp_dock_get_context (dockbook->p->dock))
-    g_signal_handlers_disconnect_by_func (gimp_dock_get_context (dockbook->p->dock)->gimp->config,
-                                          G_CALLBACK (gimp_dockbook_config_size_changed),
-                                          dockbook);
   dockbook->p->dock = dock;
-  if (dock)
-    g_signal_connect (gimp_dock_get_context (dockbook->p->dock)->gimp->config,
-                      "size-changed",
-                      G_CALLBACK (gimp_dockbook_config_size_changed),
-                      dockbook);
 }
 
 GimpUIManager *
@@ -1615,11 +1607,9 @@ gimp_dockable_create_event_box_tab_widget (GimpDockable *dockable,
 static GtkIconSize
 gimp_dockbook_get_tab_icon_size (GimpDockbook *dockbook)
 {
-  Gimp        *gimp;
-  GimpIconSize size;
+  Gimp        *gimp     = dockbook->p->ui_manager->gimp;
   GtkIconSize  tab_size = DEFAULT_TAB_ICON_SIZE;
-
-  gimp = gimp_dock_get_context (dockbook->p->dock)->gimp;
+  GimpIconSize size;
 
   size = gimp_gui_config_detect_icon_size (GIMP_GUI_CONFIG (gimp->config));
   /* Match GimpIconSize with GtkIconSize. */
@@ -1650,11 +1640,9 @@ gimp_dockbook_get_tab_icon_size (GimpDockbook *dockbook)
 static gint
 gimp_dockbook_get_tab_border (GimpDockbook *dockbook)
 {
-  Gimp         *gimp;
-  GimpIconSize  size;
+  Gimp         *gimp       = dockbook->p->ui_manager->gimp;
   gint          tab_border = DEFAULT_TAB_BORDER;
-
-  gimp = gimp_dock_get_context (dockbook->p->dock)->gimp;
+  GimpIconSize  size;
 
   gtk_widget_style_get (GTK_WIDGET (dockbook),
                         "tab-border", &tab_border,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]