aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy
diff options
context:
space:
mode:
Diffstat (limited to 'libempathy')
-rw-r--r--libempathy/empathy-connection-managers.c78
-rw-r--r--libempathy/empathy-connection-managers.h11
2 files changed, 38 insertions, 51 deletions
diff --git a/libempathy/empathy-connection-managers.c b/libempathy/empathy-connection-managers.c
index 7085b507b..9cda1a331 100644
--- a/libempathy/empathy-connection-managers.c
+++ b/libempathy/empathy-connection-managers.c
@@ -292,65 +292,51 @@ empathy_connection_managers_get_cms_num (EmpathyConnectionManagers *self)
return g_list_length (priv->cms);
}
-typedef struct
-{
- EmpathyConnectionManagers *self;
- EmpathyConnectionManagersWhenReadyCb callback;
- gpointer user_data;
- guint ready_id;
-} CallWhenReadyContext;
-
static void
-call_when_ready_ctx_free (CallWhenReadyContext *ctx)
-{
- g_signal_handler_disconnect (ctx->self, ctx->ready_id);
- g_object_unref (ctx->self);
- g_slice_free (CallWhenReadyContext, ctx);
-}
-
-static void
-cwr_ready (EmpathyConnectionManagers *self,
+notify_ready_cb (EmpathyConnectionManagers *self,
GParamSpec *spec,
- CallWhenReadyContext *ctx)
+ GSimpleAsyncResult *result)
{
- g_assert (ctx->callback != NULL);
-
- ctx->callback (self, NULL, ctx->user_data);
-
- call_when_ready_ctx_free (ctx);
+ g_simple_async_result_complete_in_idle (result);
+ g_object_unref (result);
}
-static CallWhenReadyContext *
-call_when_ready_ctx_new (EmpathyConnectionManagers *self,
- EmpathyConnectionManagersWhenReadyCb callback,
+void
+empathy_connection_managers_prepare_async (
+ EmpathyConnectionManagers *self,
+ GAsyncReadyCallback callback,
gpointer user_data)
{
- CallWhenReadyContext *ctx = g_slice_new (CallWhenReadyContext);
+ EmpathyConnectionManagersPriv *priv = GET_PRIV (self);
+ GSimpleAsyncResult *result;
- ctx->self = g_object_ref (self);
- ctx->callback = callback;
- ctx->user_data = user_data;
+ result = g_simple_async_result_new (G_OBJECT (managers),
+ callback, user_data, empathy_connection_managers_prepare_finish);
- ctx->ready_id = g_signal_connect (self, "notify::ready",
- G_CALLBACK (cwr_ready), ctx);
+ if (priv->ready)
+ {
+ g_simple_async_result_complete_in_idle (result);
+ g_object_unref (result);
+ return;
+ }
- return ctx;
+ g_signal_connect (self, "notify::ready", G_CALLBACK (notify_ready_cb),
+ result);
}
-void
-empathy_connection_managers_call_when_ready (
+gboolean
+empathy_connection_managers_prepare_finish (
EmpathyConnectionManagers *self,
- EmpathyConnectionManagersWhenReadyCb callback,
- gpointer user_data)
+ GAsyncResult *result,
+ GError **error)
{
- EmpathyConnectionManagersPriv *priv = GET_PRIV (self);
+ GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
- if (priv->ready)
- {
- callback (self, NULL, user_data);
- }
- else
- {
- call_when_ready_ctx_new (self, callback, user_data);
- }
+ g_return_val_if_fail (g_simple_async_result_is_valid (result,
+ G_OBJECT (self), empathy_connection_managers_prepare_finish), FALSE);
+
+ if (g_simple_async_result_propagate_error (simple, error))
+ return FALSE;
+
+ return TRUE;
}
diff --git a/libempathy/empathy-connection-managers.h b/libempathy/empathy-connection-managers.h
index 956f24315..14833734c 100644
--- a/libempathy/empathy-connection-managers.h
+++ b/libempathy/empathy-connection-managers.h
@@ -22,6 +22,7 @@
#define __EMPATHY_CONNECTION_MANAGERS_H__
#include <glib-object.h>
+#include <gio/gio.h>
#include <telepathy-glib/connection-manager.h>
@@ -72,15 +73,15 @@ guint empathy_connection_managers_get_cms_num
TpConnectionManager *empathy_connection_managers_get_cm (
EmpathyConnectionManagers *managers, const gchar *cm);
-typedef void (*EmpathyConnectionManagersWhenReadyCb) (
+void empathy_connection_managers_prepare_async (
EmpathyConnectionManagers *managers,
- const GError *error,
+ GAsyncReadyCallback callback,
gpointer user_data);
-void empathy_connection_managers_call_when_ready (
+gboolean empathy_connection_managers_prepare_finish (
EmpathyConnectionManagers *managers,
- EmpathyConnectionManagersWhenReadyCb callback,
- gpointer user_data);
+ GAsyncResult *result,
+ GError **error);
G_END_DECLS