aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Gould <ted@canonical.com>2009-04-07 13:54:21 -0500
committerTed Gould <ted@canonical.com>2009-04-07 13:54:21 -0500
commitc3396784993f40c212738cfd28acc89afd5ca70b (patch)
treebb2a5f21e8fabe2894c10a0e97135a7fe87da1da
parent81194efc2e8b54fe3ab25604981ac03f4ad0bb4d (diff)
downloadayatana-indicator-messages-c3396784993f40c212738cfd28acc89afd5ca70b.tar.gz
ayatana-indicator-messages-c3396784993f40c212738cfd28acc89afd5ca70b.tar.bz2
ayatana-indicator-messages-c3396784993f40c212738cfd28acc89afd5ca70b.zip
Actually removing indicators when the server goes bye-bye and freeing up the indicator data. Wow, two biggie leaks.
-rw-r--r--src/indicator-messages.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/indicator-messages.c b/src/indicator-messages.c
index 5d7084e..b988537 100644
--- a/src/indicator-messages.c
+++ b/src/indicator-messages.c
@@ -36,6 +36,7 @@ static void server_count_changed (AppMenuItem * appitem, guint count, gpointer d
static void server_name_changed (AppMenuItem * appitem, gchar * name, gpointer data);
static void im_time_changed (ImMenuItem * imitem, glong seconds, gpointer data);
static void reconsile_list_and_menu (GList * serverlist, GtkMenuShell * menushell);
+static void indicator_removed (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * type, gpointer data);
#define DESIGN_TEAM_SIZE design_team_size
static GtkIconSize design_team_size;
@@ -241,6 +242,12 @@ server_removed (IndicateListener * listener, IndicateListenerServer * server, gc
}
serverList_t * sltp = (serverList_t *)lookup->data;
+
+ while (sltp->imList) {
+ imList_t * imitem = (imList_t *)sltp->imList->data;
+ indicator_removed(listener, server, imitem->indicator, "message", data);
+ }
+
serverList = g_list_remove(serverList, sltp);
if (sltp->menuitem != NULL) {
@@ -443,6 +450,7 @@ indicator_removed (IndicateListener * listener, IndicateListenerServer * server,
if (!removed && menuitem != NULL) {
g_object_ref(menuitem);
+ g_free(listItem->data);
sl_item->imList = g_list_remove(sl_item->imList, listItem->data);
gtk_widget_hide(menuitem);