[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