From 8f513aa30b0b2a9bebbbdb133d329f1fc6869eba Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 20 Apr 2009 14:04:36 -0500 Subject: Adding a ref'ing and deref'ing of the listener to the application menu item to ensure it stays around while we hav signals attached to it. Fix by Code Russell on bug 362124. --- src/app-menu-item.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src') diff --git a/src/app-menu-item.c b/src/app-menu-item.c index c769d47..56b3ec5 100644 --- a/src/app-menu-item.c +++ b/src/app-menu-item.c @@ -131,6 +131,8 @@ app_menu_item_finalize (GObject *object) g_signal_handlers_disconnect_by_func(G_OBJECT(priv->listener), G_CALLBACK(indicator_added_cb), self); g_signal_handlers_disconnect_by_func(G_OBJECT(priv->listener), G_CALLBACK(indicator_removed_cb), self); + g_object_unref(priv->listener); + G_OBJECT_CLASS (app_menu_item_parent_class)->finalize (object); return; @@ -144,7 +146,9 @@ app_menu_item_new (IndicateListener * listener, IndicateListenerServer * server) AppMenuItemPrivate * priv = APP_MENU_ITEM_GET_PRIVATE(self); priv->listener = listener; + g_object_ref(G_OBJECT(listener)); priv->server = server; + /* Can not ref as not real GObject */ g_signal_connect(G_OBJECT(listener), INDICATE_LISTENER_SIGNAL_INDICATOR_ADDED, G_CALLBACK(indicator_added_cb), self); g_signal_connect(G_OBJECT(listener), INDICATE_LISTENER_SIGNAL_INDICATOR_REMOVED, G_CALLBACK(indicator_removed_cb), self); -- cgit v1.2.3 From f30fe10fea03b79da41d82f8ea276291a9624fcf Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 20 Apr 2009 14:06:35 -0500 Subject: Moving signal disconnecting and unref to the dispose function instead of finalize. Fix by Cody Russell on bug 362124. --- src/app-menu-item.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/app-menu-item.c b/src/app-menu-item.c index 56b3ec5..d4536ac 100644 --- a/src/app-menu-item.c +++ b/src/app-menu-item.c @@ -119,6 +119,14 @@ app_menu_item_init (AppMenuItem *self) static void app_menu_item_dispose (GObject *object) { + AppMenuItem * self = APP_MENU_ITEM(object); + AppMenuItemPrivate * priv = APP_MENU_ITEM_GET_PRIVATE(self); + + g_signal_handlers_disconnect_by_func(G_OBJECT(priv->listener), G_CALLBACK(indicator_added_cb), self); + g_signal_handlers_disconnect_by_func(G_OBJECT(priv->listener), G_CALLBACK(indicator_removed_cb), self); + + g_object_unref(priv->listener); + G_OBJECT_CLASS (app_menu_item_parent_class)->dispose (object); } @@ -128,11 +136,6 @@ app_menu_item_finalize (GObject *object) AppMenuItem * self = APP_MENU_ITEM(object); AppMenuItemPrivate * priv = APP_MENU_ITEM_GET_PRIVATE(self); - g_signal_handlers_disconnect_by_func(G_OBJECT(priv->listener), G_CALLBACK(indicator_added_cb), self); - g_signal_handlers_disconnect_by_func(G_OBJECT(priv->listener), G_CALLBACK(indicator_removed_cb), self); - - g_object_unref(priv->listener); - G_OBJECT_CLASS (app_menu_item_parent_class)->finalize (object); return; -- cgit v1.2.3 From b5159bc66b25208344bb456f968cf6494815045b Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 20 Apr 2009 14:12:44 -0500 Subject: Freeing the appinfo and type from the application object on finalize --- src/app-menu-item.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src') diff --git a/src/app-menu-item.c b/src/app-menu-item.c index d4536ac..f6472af 100644 --- a/src/app-menu-item.c +++ b/src/app-menu-item.c @@ -136,6 +136,14 @@ app_menu_item_finalize (GObject *object) AppMenuItem * self = APP_MENU_ITEM(object); AppMenuItemPrivate * priv = APP_MENU_ITEM_GET_PRIVATE(self); + if (priv->type != NULL) { + g_free(priv->type); + } + + if (priv->appinfo != NULL) { + g_object_unref(priv->appinfo); + } + G_OBJECT_CLASS (app_menu_item_parent_class)->finalize (object); return; @@ -181,8 +189,14 @@ type_cb (IndicateListener * listener, IndicateListenerServer * server, gchar * v if (priv->type != NULL) { g_free(priv->type); + priv->type = NULL; } + if (value == NULL) { + g_warning("Type value is NULL, that shouldn't really happen"); + return; + } + priv->type = g_strdup(value); if (!(!g_strcmp0(priv->type, "message.instant") || !g_strcmp0(priv->type, "message.micro") || !g_strcmp0(priv->type, "message.im"))) { -- cgit v1.2.3