[telepathy-glib/master] account: use new tp_account_manager_dup function
Jonny Lamb
jonny.lamb at collabora.co.uk
Mon Sep 28 07:39:34 PDT 2009
Signed-off-by: Jonny Lamb <jonny.lamb at collabora.co.uk>
---
telepathy-glib/account.c | 62 ++++++++++++++++++++++++++++++++-------------
1 files changed, 44 insertions(+), 18 deletions(-)
diff --git a/telepathy-glib/account.c b/telepathy-glib/account.c
index 0aab1c4..9725bfe 100644
--- a/telepathy-glib/account.c
+++ b/telepathy-glib/account.c
@@ -1352,6 +1352,37 @@ tp_account_set_enabled_finish (TpAccount *account,
return TRUE;
}
+static void
+_tp_account_set_presence_from_global (TpAccountManager *account_manager,
+ TpAccount *account)
+{
+ TpConnectionPresenceType presence;
+ gchar *status = NULL;
+ gchar *status_message = NULL;
+
+ presence = tp_account_manager_get_requested_global_presence (account_manager,
+ &status, &status_message);
+
+ if (presence != TP_CONNECTION_PRESENCE_TYPE_UNSET)
+ tp_account_request_presence_async (account, presence, status,
+ status_message, NULL, NULL);
+
+ g_free (status);
+ g_free (status_message);
+}
+
+static void
+_tp_account_account_manager_ready_cb (TpAccountManager *account_manager,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ TpAccount *account = TP_ACCOUNT (user_data);
+
+ _tp_account_set_presence_from_global (account_manager, account);
+
+ g_object_unref (account_manager);
+}
+
/**
* tp_account_set_enabled_async:
* @account: a #TpAccount
@@ -1369,15 +1400,10 @@ tp_account_set_enabled_async (TpAccount *account,
GAsyncReadyCallback callback,
gpointer user_data)
{
- /* Disabled for now due to lack of account manager */
-
TpAccountPrivate *priv = account->priv;
- TpAccountManager *acc_manager;
+ TpAccountManager *account_manager;
GValue value = {0, };
GSimpleAsyncResult *result;
- char *status = NULL;
- char *status_message = NULL;
- TpConnectionPresenceType presence;
result = g_simple_async_result_new (G_OBJECT (account),
callback, user_data, tp_account_set_enabled_finish);
@@ -1390,18 +1416,18 @@ tp_account_set_enabled_async (TpAccount *account,
if (enabled)
{
- acc_manager = tp_account_manager_new (
- tp_proxy_get_dbus_daemon (account));
- presence = tp_account_manager_get_requested_global_presence (acc_manager,
- &status, &status_message);
-
- if (presence != TP_CONNECTION_PRESENCE_TYPE_UNSET)
- tp_account_request_presence_async (account, presence, status,
- status_message, NULL, NULL);
-
- g_object_unref (acc_manager);
- g_free (status);
- g_free (status_message);
+ account_manager = tp_account_manager_dup ();
+
+ if (tp_account_manager_is_ready (account_manager))
+ {
+ _tp_account_set_presence_from_global (account_manager, account);
+ g_object_unref (account_manager);
+ }
+ else
+ {
+ g_signal_connect (G_OBJECT (account_manager), "notify::ready",
+ G_CALLBACK (_tp_account_account_manager_ready_cb), account);
+ }
}
g_value_init (&value, G_TYPE_BOOLEAN);
--
1.5.6.5
More information about the telepathy-commits
mailing list