[empathy: 6/80] TplActionChain: add _tpl_action_chain_start()
- From: Emilio Pozuelo Monfort <epm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [empathy: 6/80] TplActionChain: add _tpl_action_chain_start()
- Date: Fri, 10 Jun 2011 08:39:40 +0000 (UTC)
commit 8d3f7406c2055e4483cdc9639f8463e48b521621
Author: Emilio Pozuelo Monfort <emilio pozuelo collabora co uk>
Date: Wed Apr 20 09:23:05 2011 +0100
TplActionChain: add _tpl_action_chain_start()
libempathy/action-chain-internal.h | 3 +++
libempathy/action-chain.c | 18 +++++++++++++++++-
2 files changed, 20 insertions(+), 1 deletions(-)
---
diff --git a/libempathy/action-chain-internal.h b/libempathy/action-chain-internal.h
index 674cc2b..d2395d1 100644
--- a/libempathy/action-chain-internal.h
+++ b/libempathy/action-chain-internal.h
@@ -27,6 +27,7 @@
typedef struct {
GQueue *chain;
GSimpleAsyncResult *simple;
+ gboolean running;
} TplActionChain;
TplActionChain *_tpl_action_chain_new_async (GObject *obj,
@@ -38,8 +39,10 @@ void _tpl_action_chain_append (TplActionChain *self, TplPendingAction func,
gpointer user_data);
void _tpl_action_chain_prepend (TplActionChain *self, TplPendingAction func,
gpointer user_data);
+void _tpl_action_chain_start (TplActionChain *self);
void _tpl_action_chain_continue (TplActionChain *self);
void _tpl_action_chain_terminate (TplActionChain *self, const GError *error);
+
gpointer _tpl_action_chain_get_object (TplActionChain *self);
gboolean _tpl_action_chain_new_finish (GObject *source,
GAsyncResult *result, GError **error);
diff --git a/libempathy/action-chain.c b/libempathy/action-chain.c
index df792e5..30217dd 100644
--- a/libempathy/action-chain.c
+++ b/libempathy/action-chain.c
@@ -104,18 +104,34 @@ _tpl_action_chain_append (TplActionChain *self,
g_queue_push_tail (self->chain, l);
}
+void
+_tpl_action_chain_start (TplActionChain *self)
+{
+ g_return_if_fail (!g_queue_is_empty (self->chain));
+
+ if (self->running)
+ return;
+
+ _tpl_action_chain_continue (self);
+}
void
_tpl_action_chain_continue (TplActionChain *self)
{
if (g_queue_is_empty (self->chain))
- g_simple_async_result_complete (self->simple);
+ {
+ self->running = FALSE;
+ g_simple_async_result_complete (self->simple);
+ }
else
{
TplActionLink *l = g_queue_pop_head (self->chain);
+ self->running = TRUE;
l->action (self, l->user_data);
link_free (l);
+ if (g_queue_is_empty (self->chain))
+ self->running = FALSE;
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]