]> git.0d.be Git - empathy.git/commitdiff
Merge commit 'elliot/bug-584703-c'
authorXavier Claessens <xclaesse@gmail.com>
Sun, 28 Jun 2009 07:58:53 +0000 (09:58 +0200)
committerXavier Claessens <xclaesse@gmail.com>
Sun, 28 Jun 2009 07:58:53 +0000 (09:58 +0200)
libempathy/empathy-account-manager.c
libempathy/empathy-contact-manager.c

index dd0a72f5900dc8d9fb3fe457682533e1ae1ace93..ff9fd2525be0e1dabbeaad3fd8761ca208cd7a41 100644 (file)
@@ -504,6 +504,18 @@ empathy_account_manager_init (EmpathyAccountManager *manager)
   mc_accounts_list_free (mc_accounts);
 }
 
+static void
+account_manager_disconnect_foreach (gpointer key,
+                                    gpointer value,
+                                    gpointer user_data)
+{
+  TpConnection *connection = key;
+  EmpathyAccountManager *manager = user_data;
+
+  g_signal_handlers_disconnect_by_func (connection, connection_invalidated_cb,
+    manager);
+}
+
 static void
 do_finalize (GObject *obj)
 {
@@ -511,6 +523,8 @@ do_finalize (GObject *obj)
   EmpathyAccountManagerPriv *priv = GET_PRIV (manager);
 
   g_hash_table_unref (priv->accounts);
+  g_hash_table_foreach (priv->connections, account_manager_disconnect_foreach,
+    obj);
   g_hash_table_unref (priv->connections);
 
   G_OBJECT_CLASS (empathy_account_manager_parent_class)->finalize (obj);
index 073424485405fd9def60d86ac561910a46f48c36..7af2bd3498eea3c90dc4d3e9f8dfbe49a806fc88 100644 (file)
@@ -86,26 +86,6 @@ contact_manager_groups_changed_cb (EmpathyTpContactList  *list,
                               contact, group, is_member);
 }
 
-static void
-contact_manager_disconnect_foreach (gpointer key,
-                                   gpointer value,
-                                   gpointer user_data)
-{
-       EmpathyTpContactList  *list = value;
-       EmpathyContactManager *manager = user_data;
-
-       /* Disconnect signals from the list */
-       g_signal_handlers_disconnect_by_func (list,
-                                             contact_manager_members_changed_cb,
-                                             manager);
-       g_signal_handlers_disconnect_by_func (list,
-                                             contact_manager_pendings_changed_cb,
-                                             manager);
-       g_signal_handlers_disconnect_by_func (list,
-                                             contact_manager_groups_changed_cb,
-                                             manager);
-}
-
 static void
 contact_manager_invalidated_cb (TpProxy *connection,
                                guint    domain,
@@ -127,6 +107,30 @@ contact_manager_invalidated_cb (TpProxy *connection,
        }
 }
 
+static void
+contact_manager_disconnect_foreach (gpointer key,
+                                   gpointer value,
+                                   gpointer user_data)
+{
+       TpConnection *connection = key;
+       EmpathyTpContactList  *list = value;
+       EmpathyContactManager *manager = user_data;
+
+       /* Disconnect signals from the list */
+       g_signal_handlers_disconnect_by_func (list,
+                                             contact_manager_members_changed_cb,
+                                             manager);
+       g_signal_handlers_disconnect_by_func (list,
+                                             contact_manager_pendings_changed_cb,
+                                             manager);
+       g_signal_handlers_disconnect_by_func (list,
+                                             contact_manager_groups_changed_cb,
+                                             manager);
+       g_signal_handlers_disconnect_by_func (connection,
+                                             contact_manager_invalidated_cb,
+                                             manager);
+}
+
 static void
 contact_manager_new_connection_cb (EmpathyAccountManager *account_manager,
                                   TpConnection *connection,