empathy r932 - in trunk: libempathy libempathy-gtk src



Author: xclaesse
Date: Sun Apr 13 13:39:13 2008
New Revision: 932
URL: http://svn.gnome.org/viewvc/empathy?rev=932&view=rev

Log:
Fix disconnection of AccountStatusChanged signal.


Modified:
   trunk/libempathy-gtk/empathy-account-chooser.c
   trunk/libempathy-gtk/empathy-accounts-dialog.c
   trunk/libempathy-gtk/empathy-chat.c
   trunk/libempathy/empathy-contact-manager.c
   trunk/libempathy/empathy-tp-contact-factory.c
   trunk/libempathy/empathy-utils.c
   trunk/libempathy/empathy-utils.h
   trunk/src/empathy-main-window.c

Modified: trunk/libempathy-gtk/empathy-account-chooser.c
==============================================================================
--- trunk/libempathy-gtk/empathy-account-chooser.c	(original)
+++ trunk/libempathy-gtk/empathy-account-chooser.c	Sun Apr 13 13:39:13 2008
@@ -47,6 +47,7 @@
 	gboolean                        has_all_option;
 	EmpathyAccountChooserFilterFunc filter;
 	gpointer                        filter_data;
+	gpointer                        token;
 } EmpathyAccountChooserPriv;
 
 typedef struct {
@@ -151,10 +152,7 @@
 	g_signal_handlers_disconnect_by_func (priv->monitor,
 					      account_chooser_account_deleted_cb,
 					      chooser);
-	dbus_g_proxy_disconnect_signal (DBUS_G_PROXY (priv->mc),
-					"AccountStatusChanged",
-					G_CALLBACK (account_chooser_status_changed_cb),
-					chooser);
+	empathy_disconnect_account_status_changed (priv->token);
 	g_object_unref (priv->mc);
 	g_object_unref (priv->monitor);
 
@@ -223,7 +221,7 @@
 	g_signal_connect (priv->monitor, "account-deleted",
 			  G_CALLBACK (account_chooser_account_deleted_cb),
 			  chooser);
-	empathy_connect_to_account_status_changed (priv->mc,
+	priv->token = empathy_connect_to_account_status_changed (priv->mc,
 						   G_CALLBACK (account_chooser_status_changed_cb),
 						   chooser, NULL);
 

Modified: trunk/libempathy-gtk/empathy-accounts-dialog.c
==============================================================================
--- trunk/libempathy-gtk/empathy-accounts-dialog.c	(original)
+++ trunk/libempathy-gtk/empathy-accounts-dialog.c	Sun Apr 13 13:39:13 2008
@@ -84,6 +84,7 @@
 
 	MissionControl   *mc;
 	McAccountMonitor *monitor;
+	gpointer          token;
 } EmpathyAccountsDialog;
 
 enum {
@@ -962,10 +963,7 @@
 	g_signal_handlers_disconnect_by_func (dialog->monitor,
 					      accounts_dialog_account_enabled_cb,
 					      dialog);
-	dbus_g_proxy_disconnect_signal (DBUS_G_PROXY (dialog->mc),
-					"AccountStatusChanged",
-					G_CALLBACK (accounts_dialog_status_changed_cb),
-					dialog);
+	empathy_disconnect_account_status_changed (dialog->token);
 
 	/* Delete incomplete accounts */
 	accounts = mc_accounts_list ();
@@ -1074,7 +1072,7 @@
 	g_signal_connect (dialog->monitor, "account-disabled",
 			  G_CALLBACK (accounts_dialog_account_enabled_cb),
 			  dialog);
-	empathy_connect_to_account_status_changed (dialog->mc,
+	dialog->token = empathy_connect_to_account_status_changed (dialog->mc,
 						   G_CALLBACK (accounts_dialog_status_changed_cb),
 						   dialog, NULL);
 

Modified: trunk/libempathy-gtk/empathy-chat.c
==============================================================================
--- trunk/libempathy-gtk/empathy-chat.c	(original)
+++ trunk/libempathy-gtk/empathy-chat.c	Sun Apr 13 13:39:13 2008
@@ -77,6 +77,7 @@
 	guint              composing_stop_timeout_id;
 	guint              block_events_timeout_id;
 	TpHandleType       handle_type;
+	gpointer           token;
 
 	GtkWidget         *widget;
 	GtkWidget         *hpaned;
@@ -1405,9 +1406,7 @@
 
 	chat_composing_remove_timeout (chat);
 
-	dbus_g_proxy_disconnect_signal (DBUS_G_PROXY (priv->mc), "AccountStatusChanged",
-					G_CALLBACK (chat_status_changed_cb),
-					chat);
+	empathy_disconnect_account_status_changed (priv->token);
 	g_object_unref (priv->mc);
 	g_object_unref (priv->log_manager);
 	g_object_unref (priv->store);
@@ -1537,7 +1536,7 @@
 	priv->sent_messages_index = -1;
 	priv->mc = empathy_mission_control_new ();
 
-	empathy_connect_to_account_status_changed (priv->mc,
+	priv->token = empathy_connect_to_account_status_changed (priv->mc,
 						   G_CALLBACK (chat_status_changed_cb),
 						   chat, NULL);
 

Modified: trunk/libempathy/empathy-contact-manager.c
==============================================================================
--- trunk/libempathy/empathy-contact-manager.c	(original)
+++ trunk/libempathy/empathy-contact-manager.c	Sun Apr 13 13:39:13 2008
@@ -38,6 +38,7 @@
 struct _EmpathyContactManagerPriv {
 	GHashTable     *lists;
 	MissionControl *mc;
+	gpointer        token;
 };
 
 static void empathy_contact_manager_class_init (EmpathyContactManagerClass *klass);
@@ -188,11 +189,7 @@
 {
 	EmpathyContactManagerPriv *priv = GET_PRIV (object);
 
-	dbus_g_proxy_disconnect_signal (DBUS_G_PROXY (priv->mc),
-					"AccountStatusChanged",
-					G_CALLBACK (contact_manager_status_changed_cb),
-					object);
-
+	empathy_disconnect_account_status_changed (priv->token);
 	g_hash_table_foreach (priv->lists,
 			      contact_manager_disconnect_foreach,
 			      object);
@@ -224,10 +221,9 @@
 					     (GDestroyNotify) g_object_unref);
 
 	priv->mc = empathy_mission_control_new ();
-
-	empathy_connect_to_account_status_changed (priv->mc,
-						   G_CALLBACK (contact_manager_status_changed_cb),
-						   manager, NULL);
+	priv->token = empathy_connect_to_account_status_changed (priv->mc,
+		G_CALLBACK (contact_manager_status_changed_cb),
+		manager, NULL);
 
 	/* Get ContactList for existing connections */
 	accounts = mission_control_get_online_connections (priv->mc, NULL);

Modified: trunk/libempathy/empathy-tp-contact-factory.c
==============================================================================
--- trunk/libempathy/empathy-tp-contact-factory.c	(original)
+++ trunk/libempathy/empathy-tp-contact-factory.c	Sun Apr 13 13:39:13 2008
@@ -44,6 +44,7 @@
 
 	GList          *contacts;
 	EmpathyContact *user;
+	gpointer        token;
 };
 
 static void empathy_tp_contact_factory_class_init (EmpathyTpContactFactoryClass *klass);
@@ -1196,10 +1197,7 @@
 		       object,
 		       mc_account_get_normalized_name (priv->account));
 
-	dbus_g_proxy_disconnect_signal (DBUS_G_PROXY (priv->mc),
-					"AccountStatusChanged",
-					G_CALLBACK (tp_contact_factory_status_changed_cb),
-					object);
+	empathy_disconnect_account_status_changed (priv->token);
 
 	for (l = priv->contacts; l; l = l->next) {
 		g_object_weak_unref (G_OBJECT (l->data),
@@ -1277,7 +1275,7 @@
 	EmpathyTpContactFactoryPriv *priv = GET_PRIV (tp_factory);
 
 	priv->mc = empathy_mission_control_new ();
-	empathy_connect_to_account_status_changed (priv->mc,
+	priv->token = empathy_connect_to_account_status_changed (priv->mc,
 						   G_CALLBACK (tp_contact_factory_status_changed_cb),
 						   tp_factory, NULL);
 }

Modified: trunk/libempathy/empathy-utils.c
==============================================================================
--- trunk/libempathy/empathy-utils.c	(original)
+++ trunk/libempathy/empathy-utils.c	Sun Apr 13 13:39:13 2008
@@ -639,16 +639,16 @@
 					  McPresence                presence,
 					  TpConnectionStatusReason  reason,
 					  const gchar              *unique_name,
-					  gpointer                 *user_data);
+					  gpointer                  user_data);
 
 typedef struct {
 	AccountStatusChangedFunc handler;
 	gpointer                 user_data;
 	GClosureNotify           free_func;
+	MissionControl          *mc;
 } AccountStatusChangedData;
 
 typedef struct {
-	MissionControl           *mc;
 	TpConnectionStatus        status;
 	McPresence                presence;
 	TpConnectionStatusReason  reason;
@@ -665,6 +665,7 @@
 	if (data->free_func) {
 		data->free_func (data->user_data, closure);
 	}
+	g_object_unref (data->mc);
 	g_slice_free (AccountStatusChangedData, data);
 }
 
@@ -673,7 +674,7 @@
 {
 	InvocationData *invocation_data = data;
 
-	invocation_data->data->handler (invocation_data->mc,
+	invocation_data->data->handler (invocation_data->data->mc,
 					invocation_data->status,
 					invocation_data->presence,
 					invocation_data->reason,
@@ -697,18 +698,18 @@
 	InvocationData *invocation_data;
 
 	invocation_data = g_slice_new (InvocationData);
-	invocation_data->mc = mc;
 	invocation_data->status = status;
 	invocation_data->presence = presence;
 	invocation_data->reason = reason;
 	invocation_data->unique_name = g_strdup (unique_name);
 	invocation_data->data = data;
+
 	g_idle_add_full (G_PRIORITY_HIGH,
 			 account_status_changed_invoke_callback,
 			 invocation_data, NULL);
 }
 
-void
+gpointer
 empathy_connect_to_account_status_changed (MissionControl *mc,
 					   GCallback       handler,
 					   gpointer        user_data,
@@ -716,16 +717,30 @@
 {
 	AccountStatusChangedData *data;
 
-	g_return_if_fail (IS_MISSIONCONTROL (mc));
-	g_return_if_fail (handler != NULL);
+	g_return_val_if_fail (IS_MISSIONCONTROL (mc), NULL);
+	g_return_val_if_fail (handler != NULL, NULL);
 	
 	data = g_slice_new (AccountStatusChangedData);
-
 	data->handler = (AccountStatusChangedFunc) handler;
 	data->user_data = user_data;
 	data->free_func = free_func;
+	data->mc = g_object_ref (mc);
+
 	dbus_g_proxy_connect_signal (DBUS_G_PROXY (mc), "AccountStatusChanged",
 				     G_CALLBACK (account_status_changed_cb),
 				     data, account_status_changed_data_free);
+
+	return data;
+}
+
+void
+empathy_disconnect_account_status_changed (gpointer token)
+{
+	AccountStatusChangedData *data = token;
+
+	dbus_g_proxy_disconnect_signal (DBUS_G_PROXY (data->mc),
+					"AccountStatusChanged",
+					G_CALLBACK (account_status_changed_cb),
+					data);
 }
 

Modified: trunk/libempathy/empathy-utils.h
==============================================================================
--- trunk/libempathy/empathy-utils.h	(original)
+++ trunk/libempathy/empathy-utils.h	Sun Apr 13 13:39:13 2008
@@ -102,10 +102,11 @@
 						     gpointer         user_data,
 						     GMainLoop      **loop);
 McAccount *  empathy_channel_get_account            (TpChannel       *channel);
-void          empathy_connect_to_account_status_changed (MissionControl *mc,
+gpointer      empathy_connect_to_account_status_changed (MissionControl *mc,
 							 GCallback       handler,
 							 gpointer        user_data,
 							 GClosureNotify  free_func);
+void          empathy_disconnect_account_status_changed (gpointer        token);
 
 G_END_DECLS
 

Modified: trunk/src/empathy-main-window.c
==============================================================================
--- trunk/src/empathy-main-window.c	(original)
+++ trunk/src/empathy-main-window.c	Sun Apr 13 13:39:13 2008
@@ -73,6 +73,7 @@
 	EmpathyContactListStore *list_store;
 	MissionControl          *mc;
 	EmpathyChatroomManager  *chatroom_manager;
+	gpointer                 token;
 
 	GtkWidget              *window;
 	GtkWidget              *main_vbox;
@@ -239,7 +240,7 @@
 	g_object_unref (glade);
 
 	window->mc = empathy_mission_control_new ();
-	empathy_connect_to_account_status_changed (window->mc,
+	window->token = empathy_connect_to_account_status_changed (window->mc,
 						   G_CALLBACK (main_window_status_changed_cb),
 						   window, NULL);
 
@@ -374,9 +375,7 @@
 	/* Save user-defined accelerators. */
 	main_window_accels_save ();
 
-	dbus_g_proxy_disconnect_signal (DBUS_G_PROXY (window->mc), "AccountStatusChanged",
-					G_CALLBACK (main_window_status_changed_cb),
-					window);
+	empathy_disconnect_account_status_changed (window->token);
 
 	if (window->size_timeout_id) {
 		g_source_remove (window->size_timeout_id);



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