[Xfce4-commits] r25251 - squeeze/trunk/libsqueeze
Stephan Arts
stephan at xfce.org
Wed Mar 21 22:50:21 CET 2007
Author: stephan
Date: 2007-03-21 21:50:21 +0000 (Wed, 21 Mar 2007)
New Revision: 25251
Modified:
squeeze/trunk/libsqueeze/archive.c
squeeze/trunk/libsqueeze/macro-command.c
Log:
fixed macro command
Modified: squeeze/trunk/libsqueeze/archive.c
===================================================================
--- squeeze/trunk/libsqueeze/archive.c 2007-03-21 21:42:03 UTC (rev 25250)
+++ squeeze/trunk/libsqueeze/archive.c 2007-03-21 21:50:21 UTC (rev 25251)
@@ -580,14 +580,19 @@
return FALSE;
archive->command = builder->build_refresh(builder, archive);
- g_signal_connect(archive->command, "terminated", G_CALLBACK(cb_archive_archive_command_terminated), archive);
- if(!lsq_archive_command_execute(archive->command))
+ if(archive->command)
{
- g_object_unref(archive->command);
- archive->command = NULL;
+ g_signal_connect(archive->command, "terminated", G_CALLBACK(cb_archive_archive_command_terminated), archive);
+ if(!lsq_archive_command_execute(archive->command))
+ {
+ g_object_unref(archive->command);
+ archive->command = NULL;
+ return FALSE;
+ }
+ else
+ g_object_unref(archive->command);
+ return TRUE;
}
- else
- g_object_unref(archive->command);
return FALSE;
}
Modified: squeeze/trunk/libsqueeze/macro-command.c
===================================================================
--- squeeze/trunk/libsqueeze/macro-command.c 2007-03-21 21:42:03 UTC (rev 25250)
+++ squeeze/trunk/libsqueeze/macro-command.c 2007-03-21 21:50:21 UTC (rev 25251)
@@ -44,6 +44,9 @@
static gboolean
lsq_macro_command_stop(LSQArchiveCommand *command);
+static void
+cb_macro_command_sub_command_terminated(LSQArchiveCommand *, GError *, LSQMacroCommand *);
+
static GObjectClass *parent_class;
GType
@@ -141,7 +144,15 @@
static gboolean
lsq_macro_command_execute(LSQArchiveCommand *command)
{
- return TRUE;
+ g_object_ref(command);
+ LSQMacroCommand *macro_command = LSQ_MACRO_COMMAND(command);
+ g_signal_connect(macro_command->command_queue->data, "terminated", G_CALLBACK(cb_macro_command_sub_command_terminated), command);
+
+ gboolean retval = lsq_archive_command_execute(macro_command->command_queue->data);
+
+ g_object_unref(macro_command->command_queue->data);
+
+ return retval;
}
static gboolean
@@ -153,5 +164,37 @@
void
lsq_macro_command_append(LSQMacroCommand *command, LSQArchiveCommand *sub_command)
{
+ g_object_ref(sub_command);
command->command_queue = g_slist_append(command->command_queue, sub_command);
}
+
+static void
+cb_macro_command_sub_command_terminated(LSQArchiveCommand *sub_command, GError *error, LSQMacroCommand *macro_command)
+{
+ macro_command->command_queue = g_slist_remove(macro_command->command_queue, sub_command);
+ if(macro_command->command_queue)
+ {
+ LSQArchiveCommand *command = macro_command->command_queue->data;
+
+ g_signal_connect(command, "terminated", G_CALLBACK(cb_macro_command_sub_command_terminated), macro_command);
+
+ if(!lsq_archive_command_execute(command))
+ {
+ g_signal_handlers_disconnect_by_func(command, cb_macro_command_sub_command_terminated, macro_command);
+ /* And here i kind of have no idea if this works */
+ GSList *termination_queue = macro_command->command_queue;
+ macro_command->command_queue = NULL;
+ g_slist_foreach(termination_queue, (GFunc)g_object_unref, NULL);
+ g_slist_free(termination_queue);
+ g_object_unref(macro_command);
+ }
+ else
+ {
+ g_object_unref(command);
+ }
+ }
+ else
+ {
+ g_object_unref(macro_command);
+ }
+}
More information about the Xfce4-commits
mailing list