empathy r943 - trunk/libempathy-gtk



Author: xclaesse
Date: Mon Apr 14 16:51:03 2008
New Revision: 943
URL: http://svn.gnome.org/viewvc/empathy?rev=943&view=rev

Log:
fix bug #526374.


Modified:
   trunk/libempathy-gtk/empathy-contact-list-store.c

Modified: trunk/libempathy-gtk/empathy-contact-list-store.c
==============================================================================
--- trunk/libempathy-gtk/empathy-contact-list-store.c	(original)
+++ trunk/libempathy-gtk/empathy-contact-list-store.c	Mon Apr 14 16:51:03 2008
@@ -91,10 +91,6 @@
 								      guint                          param_id,
 								      const GValue                  *value,
 								      GParamSpec                    *pspec);
-static gboolean         contact_list_store_finalize_foreach          (GtkTreeModel                  *model,
-								      GtkTreePath                   *path,
-								      GtkTreeIter                   *iter,
-								      gpointer                       user_data);
 static void             contact_list_store_setup                     (EmpathyContactListStore       *store);
 static gboolean         contact_list_store_inibit_active_cb          (EmpathyContactListStore       *store);
 static void             contact_list_store_members_changed_cb        (EmpathyContactList            *list_iface,
@@ -292,23 +288,26 @@
 static void
 contact_list_store_finalize (GObject *object)
 {
-	EmpathyContactListStorePriv *priv;
-
-	priv = GET_PRIV (object);
+	EmpathyContactListStorePriv *priv = GET_PRIV (object);
+	GList                       *contacts, *l;
 
-	gtk_tree_model_foreach (GTK_TREE_MODEL (object),
-				(GtkTreeModelForeachFunc) contact_list_store_finalize_foreach,
-				object);
-
-	if (priv->list) {
-		g_signal_handlers_disconnect_by_func (priv->list,
-						      G_CALLBACK (contact_list_store_members_changed_cb),
-						      object);
-		g_signal_handlers_disconnect_by_func (priv->list,
-						      G_CALLBACK (contact_list_store_groups_changed_cb),
+	contacts = empathy_contact_list_get_members (priv->list);
+	for (l = contacts; l; l = l->next) {
+		g_signal_handlers_disconnect_by_func (l->data,
+						      G_CALLBACK (contact_list_store_contact_updated_cb),
 						      object);
-		g_object_unref (priv->list);
+
+		g_object_unref (l->data);
 	}
+	g_list_free (contacts);
+
+	g_signal_handlers_disconnect_by_func (priv->list,
+					      G_CALLBACK (contact_list_store_members_changed_cb),
+					      object);
+	g_signal_handlers_disconnect_by_func (priv->list,
+					      G_CALLBACK (contact_list_store_groups_changed_cb),
+					      object);
+	g_object_unref (priv->list);
 
 	if (priv->inhibit_active) {
 		g_source_remove (priv->inhibit_active);
@@ -725,28 +724,6 @@
 	return ret;
 }
 
-static gboolean
-contact_list_store_finalize_foreach (GtkTreeModel *model,
-				     GtkTreePath  *path,
-				     GtkTreeIter  *iter,
-				     gpointer      user_data)
-{
-	EmpathyContactListStore *store = user_data;
-	EmpathyContact          *contact = NULL;
-
-	gtk_tree_model_get (GTK_TREE_MODEL (store), iter,
-			    EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, &contact,
-			    -1);
-
-	if (contact) {
-		g_signal_handlers_disconnect_by_func (contact,
-						      G_CALLBACK (contact_list_store_contact_updated_cb),
-						      store);
-	}
-
-	return FALSE;
-}
-
 static void
 contact_list_store_setup (EmpathyContactListStore *store)
 {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]