empathy r2062 - in trunk: libempathy libempathy-gtk



Author: xclaesse
Date: Tue Jan  6 16:47:57 2009
New Revision: 2062
URL: http://svn.gnome.org/viewvc/empathy?rev=2062&view=rev

Log:
Always disconnect signals for safety on _finalize ().

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

Modified: trunk/libempathy-gtk/empathy-chat.c
==============================================================================
--- trunk/libempathy-gtk/empathy-chat.c	(original)
+++ trunk/libempathy-gtk/empathy-chat.c	Tue Jan  6 16:47:57 2009
@@ -1392,6 +1392,9 @@
 
 	chat_composing_remove_timeout (chat);
 
+	g_signal_handlers_disconnect_by_func (priv->account_manager,
+					      chat_connection_changed_cb, object);
+
 	g_object_unref (priv->account_manager);
 	g_object_unref (priv->log_manager);
 

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	Tue Jan  6 16:47:57 2009
@@ -143,6 +143,8 @@
 								      GtkTreeIter                   *iter,
 								      EmpathyContactListStore       *store);
 static gboolean         contact_list_store_iface_setup               (gpointer                       user_data);
+static void             disconnect_monitor_signals                   (EmpathyContactMonitor         *monitor,
+								      GObject                       *obj);
 
 enum {
 	PROP_0,
@@ -249,6 +251,10 @@
 contact_list_store_finalize (GObject *object)
 {
 	EmpathyContactListStorePriv *priv = GET_PRIV (object);
+	EmpathyContactMonitor *monitor;
+
+	monitor = empathy_contact_list_get_monitor (priv->list);
+	disconnect_monitor_signals (monitor, object);
 
 	g_signal_handlers_disconnect_by_func (priv->list,
 					      G_CALLBACK (contact_list_store_groups_changed_cb),
@@ -1067,6 +1073,27 @@
 	contact_list_store_remove_contact (store, contact);
 }
 
+
+static void
+disconnect_monitor_signals (EmpathyContactMonitor *monitor,
+			    GObject *obj)
+{
+	g_signal_handlers_disconnect_by_func (monitor,
+					      contact_monitor_avatar_changed_cb, obj);
+	g_signal_handlers_disconnect_by_func (monitor,
+					      contact_monitor_capabilities_changed_cb, obj);
+	g_signal_handlers_disconnect_by_func (monitor,
+					      contact_monitor_contact_added_cb, obj);
+	g_signal_handlers_disconnect_by_func (monitor,
+					      contact_monitor_contact_removed_cb, obj);
+	g_signal_handlers_disconnect_by_func (monitor,
+					      contact_monitor_name_changed_cb, obj);
+	g_signal_handlers_disconnect_by_func (monitor,
+					      contact_monitor_presence_changed_cb, obj);
+	g_signal_handlers_disconnect_by_func (monitor,
+					      contact_monitor_presence_message_changed_cb, obj);
+}
+
 static gboolean
 contact_list_store_iface_setup (gpointer user_data)
 {

Modified: trunk/libempathy/empathy-account-manager.c
==============================================================================
--- trunk/libempathy/empathy-account-manager.c	(original)
+++ trunk/libempathy/empathy-account-manager.c	Tue Jan  6 16:47:57 2009
@@ -341,8 +341,23 @@
 
 	dbus_g_proxy_connect_signal (DBUS_G_PROXY (priv->mc), "AccountStatusChanged",
 				     G_CALLBACK (account_status_changed_cb),
-				     g_object_ref (manager),
-				     (GClosureNotify) g_object_unref);
+				     manager, NULL);
+}
+
+static void
+disconnect_monitor_signals (McAccountMonitor *monitor,
+			    GObject *obj)
+{
+	g_signal_handlers_disconnect_by_func (monitor,
+					      account_created_cb, obj);
+	g_signal_handlers_disconnect_by_func (monitor,
+					      account_deleted_cb, obj);
+	g_signal_handlers_disconnect_by_func (monitor,
+					      account_disabled_cb, obj);
+	g_signal_handlers_disconnect_by_func (monitor,
+					      account_enabled_cb, obj);
+	g_signal_handlers_disconnect_by_func (monitor,
+					      account_changed_cb, obj);
 }
 					   
 static void
@@ -356,6 +371,8 @@
 					G_CALLBACK (account_status_changed_cb),
 					obj);
 
+	disconnect_monitor_signals (priv->monitor, obj);
+
 	g_object_unref (priv->monitor);
 	g_object_unref (priv->mc);
 

Modified: trunk/libempathy/empathy-contact-manager.c
==============================================================================
--- trunk/libempathy/empathy-contact-manager.c	(original)
+++ trunk/libempathy/empathy-contact-manager.c	Tue Jan  6 16:47:57 2009
@@ -185,7 +185,12 @@
 			      contact_manager_disconnect_foreach,
 			      object);
 	g_hash_table_destroy (priv->lists);
+
+	g_signal_handlers_disconnect_by_func (priv->account_manager,
+					      contact_manager_connection_changed_cb,
+					      object);
 	g_object_unref (priv->account_manager);
+
 	g_object_unref (priv->contact_monitor);
 }
 



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