From 1a53f11fa9662a6a7e8abdfdd6863f8163227ea4 Mon Sep 17 00:00:00 2001 From: John Darrington Date: Thu, 5 Jul 2012 19:55:52 +0200 Subject: [PATCH 04/11] PsppireVarSheet: Keep reference to the return value of _get_ui_manager --- src/ui/gui/psppire-var-sheet.c | 15 ++++++++++++--- src/ui/gui/psppire-var-sheet.h | 2 ++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/ui/gui/psppire-var-sheet.c b/src/ui/gui/psppire-var-sheet.c index 3a8f423..930c277 100644 --- a/src/ui/gui/psppire-var-sheet.c +++ b/src/ui/gui/psppire-var-sheet.c @@ -926,6 +926,8 @@ psppire_var_sheet_dispose (GObject *obj) if (var_sheet->dict) g_object_unref (var_sheet->dict); + if (var_sheet->uim) + g_object_unref (var_sheet->uim); /* These dialogs are not GObjects (although they should be!) But for now, unreffing them only causes a GCritical Error @@ -1168,6 +1170,7 @@ psppire_var_sheet_init (PsppireVarSheet *obj) obj->container = NULL; obj->dispose_has_run = FALSE; + obj->uim = NULL; pspp_sheet_view_append_column (sheet_view, make_row_number_column (obj)); @@ -1418,8 +1421,14 @@ psppire_var_sheet_goto_variable (PsppireVarSheet *var_sheet, int dict_index) GtkUIManager * psppire_var_sheet_get_ui_manager (PsppireVarSheet *var_sheet) { - return GTK_UI_MANAGER (get_object_assert (var_sheet->builder, - "var_sheet_uim", - GTK_TYPE_UI_MANAGER)); + if (var_sheet->uim == NULL) + { + var_sheet->uim = GTK_UI_MANAGER (get_object_assert (var_sheet->builder, + "var_sheet_uim", + GTK_TYPE_UI_MANAGER)); + g_object_ref (var_sheet->uim); + } + + return var_sheet->uim; } diff --git a/src/ui/gui/psppire-var-sheet.h b/src/ui/gui/psppire-var-sheet.h index b115b9b..754dd25 100644 --- a/src/ui/gui/psppire-var-sheet.h +++ b/src/ui/gui/psppire-var-sheet.h @@ -73,6 +73,8 @@ struct _PsppireVarSheet GtkWidget *container; gulong on_switch_page_handler; + GtkUIManager *uim; + gboolean dispose_has_run; }; -- 1.7.2.5