[gimp] Bug 768966 - Keyboard Shortcut hint disappears from tooltips...



commit 8d902b8df5f6cd58ba7efeed157f72a5e6572fb9
Author: Michael Natterer <mitch gimp org>
Date:   Wed Aug 3 23:44:14 2016 +0200

    Bug 768966 - Keyboard Shortcut hint disappears from tooltips...
    
    ...after entering single window mode
    
    This commit fixes dangling pointers in GimpDockColumns, it doesn't fix
    the bug but it's a prerequisite. Original patch by Massimo.

 app/widgets/gimpdockcolumns.c |   41 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 41 insertions(+), 0 deletions(-)
---
diff --git a/app/widgets/gimpdockcolumns.c b/app/widgets/gimpdockcolumns.c
index e6530ed..13c6f7a 100644
--- a/app/widgets/gimpdockcolumns.c
+++ b/app/widgets/gimpdockcolumns.c
@@ -189,6 +189,27 @@ gimp_dock_columns_dispose (GObject *object)
       g_object_unref (dock);
     }
 
+  if (dock_columns->p->context)
+    {
+      g_object_remove_weak_pointer (G_OBJECT (dock_columns->p->context),
+                                    (gpointer) &dock_columns->p->context);
+      dock_columns->p->context = NULL;
+    }
+
+  if (dock_columns->p->dialog_factory)
+    {
+      g_object_remove_weak_pointer (G_OBJECT (dock_columns->p->dialog_factory),
+                                    (gpointer) &dock_columns->p->dialog_factory);
+      dock_columns->p->dialog_factory = NULL;
+    }
+
+  if (dock_columns->p->ui_manager)
+    {
+      g_object_remove_weak_pointer (G_OBJECT (dock_columns->p->ui_manager),
+                                    (gpointer)&dock_columns->p->ui_manager);
+      dock_columns->p->ui_manager = NULL;
+    }
+
   G_OBJECT_CLASS (parent_class)->dispose (object);
 }
 
@@ -203,13 +224,33 @@ gimp_dock_columns_set_property (GObject      *object,
   switch (property_id)
     {
     case PROP_CONTEXT:
+      if (dock_columns->p->context)
+        g_object_remove_weak_pointer (G_OBJECT (dock_columns->p->context),
+                                      (gpointer) &dock_columns->p->context);
       dock_columns->p->context = g_value_get_object (value);
+      if (dock_columns->p->context)
+        g_object_add_weak_pointer (G_OBJECT (dock_columns->p->context),
+                                   (gpointer) &dock_columns->p->context);
       break;
+
     case PROP_DIALOG_FACTORY:
+      if (dock_columns->p->dialog_factory)
+        g_object_remove_weak_pointer (G_OBJECT (dock_columns->p->dialog_factory),
+                                      (gpointer) &dock_columns->p->dialog_factory);
       dock_columns->p->dialog_factory = g_value_get_object (value);
+      if (dock_columns->p->dialog_factory)
+        g_object_add_weak_pointer (G_OBJECT (dock_columns->p->dialog_factory),
+                                   (gpointer) &dock_columns->p->dialog_factory);
       break;
+
     case PROP_UI_MANAGER:
+      if (dock_columns->p->ui_manager)
+        g_object_remove_weak_pointer (G_OBJECT (dock_columns->p->ui_manager),
+                                      (gpointer) &dock_columns->p->ui_manager);
       dock_columns->p->ui_manager = g_value_get_object (value);
+      if (dock_columns->p->ui_manager)
+        g_object_add_weak_pointer (G_OBJECT (dock_columns->p->ui_manager),
+                                   (gpointer) &dock_columns->p->ui_manager);
       break;
 
     default:


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