From 8d902b8df5f6cd58ba7efeed157f72a5e6572fb9 Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Wed, 3 Aug 2016 23:44:14 +0200 Subject: [PATCH] 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 file changed, 41 insertions(+) diff --git a/app/widgets/gimpdockcolumns.c b/app/widgets/gimpdockcolumns.c index e6530ed2fc..13c6f7a565 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: