]> git.0d.be Git - empathy.git/blobdiff - libempathy/action-chain.c
individual-menu: remove link-contacts-activated signal
[empathy.git] / libempathy / action-chain.c
index df792e548bc5aa2ed45f7c634fbef0e4d14b951e..b6bf25ab9eb8f8efeeda445f61d3054c0c23ddbd 100644 (file)
@@ -104,22 +104,45 @@ _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;
     }
 }
 
 
+void
+_tpl_action_chain_clear (TplActionChain *self)
+{
+  g_queue_foreach (self->chain, (GFunc) link_free, NULL);
+  g_queue_clear (self->chain);
+}
+
 void
 _tpl_action_chain_terminate (TplActionChain *self,
     const GError *error)