aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy/empathy-connection-managers.c
diff options
context:
space:
mode:
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2010-01-22 20:35:35 +0800
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2010-01-22 20:35:35 +0800
commit07961d71bdc15756e355c701a02856dbcd801bdd (patch)
treeffd9e4b7d03c29382cdd39818d9c20401fdf9aa0 /libempathy/empathy-connection-managers.c
parent90d96b199a4f4e1912403d52f38581e8c86752a1 (diff)
downloadgsoc2013-empathy-07961d71bdc15756e355c701a02856dbcd801bdd.tar
gsoc2013-empathy-07961d71bdc15756e355c701a02856dbcd801bdd.tar.gz
gsoc2013-empathy-07961d71bdc15756e355c701a02856dbcd801bdd.tar.bz2
gsoc2013-empathy-07961d71bdc15756e355c701a02856dbcd801bdd.tar.lz
gsoc2013-empathy-07961d71bdc15756e355c701a02856dbcd801bdd.tar.xz
gsoc2013-empathy-07961d71bdc15756e355c701a02856dbcd801bdd.tar.zst
gsoc2013-empathy-07961d71bdc15756e355c701a02856dbcd801bdd.zip
replace empathy_connection_managers_call_when_ready by prepare_{async_finish} functions
Diffstat (limited to 'libempathy/empathy-connection-managers.c')
-rw-r--r--libempathy/empathy-connection-managers.c78
1 files changed, 32 insertions, 46 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;
}