empathy r2093 - trunk/libempathy
- From: xclaesse svn gnome org
- To: svn-commits-list gnome org
- Subject: empathy r2093 - trunk/libempathy
- Date: Tue, 6 Jan 2009 16:49:37 +0000 (UTC)
Author: xclaesse
Date: Tue Jan 6 16:49:36 2009
New Revision: 2093
URL: http://svn.gnome.org/viewvc/empathy?rev=2093&view=rev
Log:
Move code handling the DBus signal in an idle callback.
Modified:
trunk/libempathy/empathy-account-manager.c
Modified: trunk/libempathy/empathy-account-manager.c
==============================================================================
--- trunk/libempathy/empathy-account-manager.c (original)
+++ trunk/libempathy/empathy-account-manager.c Tue Jan 6 16:49:36 2009
@@ -270,22 +270,28 @@
return FALSE;
}
-static void
-account_status_changed_cb (MissionControl *mc,
- TpConnectionStatus status,
- McPresence presence,
- TpConnectionStatusReason reason,
- const gchar *unique_name,
- EmpathyAccountManager *manager)
+typedef struct {
+ TpConnectionStatus status;
+ McPresence presence;
+ TpConnectionStatusReason reason;
+ gchar *unique_name;
+ EmpathyAccountManager *manager;
+} ChangedSignalData;
+
+static gboolean
+account_status_changed_idle_cb (ChangedSignalData *signal_data)
{
McAccount *account;
- EmpathyAccountManagerPriv *priv = GET_PRIV (manager);
AccountData *data;
- McPresence old_p;
- TpConnectionStatus old_s;
+ McPresence presence, old_p;
+ TpConnectionStatus status, old_s;
gboolean emit_presence = FALSE, emit_connection = FALSE;
+ EmpathyAccountManager *manager = signal_data->manager;
+ EmpathyAccountManagerPriv *priv = GET_PRIV (manager);
- account = mc_account_lookup (unique_name);
+ presence = signal_data->presence;
+ status = signal_data->status;
+ account = mc_account_lookup (signal_data->unique_name);
if (account)
{
@@ -326,10 +332,36 @@
if (emit_connection)
g_signal_emit (manager, signals[ACCOUNT_CONNECTION_CHANGED], 0,
- account, reason, status, old_s);
+ account, signal_data->reason, status, old_s);
g_object_unref (account);
}
+
+ g_object_unref (signal_data->manager);
+ g_free (signal_data->unique_name);
+ g_slice_free (ChangedSignalData, signal_data);
+
+ return FALSE;
+}
+
+static void
+account_status_changed_cb (MissionControl *mc,
+ TpConnectionStatus status,
+ McPresence presence,
+ TpConnectionStatusReason reason,
+ const gchar *unique_name,
+ EmpathyAccountManager *manager)
+{
+ ChangedSignalData *data;
+
+ data = g_slice_new0 (ChangedSignalData);
+ data->status = status;
+ data->presence = presence;
+ data->reason = reason;
+ data->unique_name = g_strdup (unique_name);
+ data->manager = g_object_ref (manager);
+
+ g_idle_add ((GSourceFunc) account_status_changed_idle_cb, data);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]