diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2012-06-05 21:16:18 +0800 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2012-06-06 17:33:21 +0800 |
commit | 0e095b8af9cd07ae32823f73b889fdbfb47d6f2a (patch) | |
tree | 479664f2770b10eaaa6449382f4cbc98c575f9e8 | |
parent | 505305a0bc8f02ca770014682f0794b8c9353aef (diff) | |
download | gsoc2013-empathy-0e095b8af9cd07ae32823f73b889fdbfb47d6f2a.tar gsoc2013-empathy-0e095b8af9cd07ae32823f73b889fdbfb47d6f2a.tar.gz gsoc2013-empathy-0e095b8af9cd07ae32823f73b889fdbfb47d6f2a.tar.bz2 gsoc2013-empathy-0e095b8af9cd07ae32823f73b889fdbfb47d6f2a.tar.lz gsoc2013-empathy-0e095b8af9cd07ae32823f73b889fdbfb47d6f2a.tar.xz gsoc2013-empathy-0e095b8af9cd07ae32823f73b889fdbfb47d6f2a.tar.zst gsoc2013-empathy-0e095b8af9cd07ae32823f73b889fdbfb47d6f2a.zip |
use tp_list_connection_managers_async()
https://bugzilla.gnome.org/show_bug.cgi?id=677465
-rw-r--r-- | libempathy/empathy-connection-managers.c | 48 |
1 files changed, 30 insertions, 18 deletions
diff --git a/libempathy/empathy-connection-managers.c b/libempathy/empathy-connection-managers.c index a39f3ae80..84a318210 100644 --- a/libempathy/empathy-connection-managers.c +++ b/libempathy/empathy-connection-managers.c @@ -208,41 +208,53 @@ empathy_connection_managers_is_ready (EmpathyConnectionManagers *self) } static void -empathy_connection_managers_listed_cb (TpConnectionManager * const *cms, - gsize n_cms, - const GError *error, - gpointer user_data, - GObject *weak_object) +empathy_connection_managers_listed_cb (GObject *source, + GAsyncResult *result, + gpointer user_data) { - EmpathyConnectionManagers *self = - EMPATHY_CONNECTION_MANAGERS (weak_object); - EmpathyConnectionManagersPriv *priv = GET_PRIV (self); - TpConnectionManager * const *iter; + TpWeakRef *wr = user_data; + GError *error = NULL; + EmpathyConnectionManagers *self = tp_weak_ref_dup_object (wr); + GList *cms, *l; + EmpathyConnectionManagersPriv *priv; + + if (self == NULL) + { + tp_weak_ref_destroy (wr); + return; + } + + priv = GET_PRIV (self); empathy_connection_managers_free_cm_list (self); + cms = tp_list_connection_managers_finish (result, &error); if (error != NULL) { DEBUG ("Failed to get connection managers: %s", error->message); + g_error_free (error); goto out; } - for (iter = cms ; iter != NULL && *iter != NULL; iter++) + for (l = cms ; l != NULL; l = g_list_next (l)) { + TpConnectionManager *cm = l->data; + /* only list cms that didn't hit errors */ - if (tp_proxy_is_prepared (*iter, TP_CONNECTION_MANAGER_FEATURE_CORE)) - priv->cms = g_list_prepend (priv->cms, g_object_ref (*iter)); + if (tp_proxy_is_prepared (cm, TP_CONNECTION_MANAGER_FEATURE_CORE)) + priv->cms = g_list_prepend (priv->cms, g_object_ref (cm)); } out: - g_object_ref (weak_object); if (!priv->ready) { priv->ready = TRUE; - g_object_notify (weak_object, "ready"); + g_object_notify (G_OBJECT (self), "ready"); } - g_signal_emit (weak_object, signals[UPDATED], 0); - g_object_unref (weak_object); + + g_signal_emit (self, signals[UPDATED], 0); + g_object_unref (self); + tp_weak_ref_destroy (wr); } void @@ -250,9 +262,9 @@ empathy_connection_managers_update (EmpathyConnectionManagers *self) { EmpathyConnectionManagersPriv *priv = GET_PRIV (self); - tp_list_connection_managers (priv->dbus, + tp_list_connection_managers_async (priv->dbus, empathy_connection_managers_listed_cb, - NULL, NULL, G_OBJECT (self)); + tp_weak_ref_new (self, NULL, NULL)); } GList * |