anjuta r3958 - in trunk: . libanjuta/interfaces manuals/reference/libanjuta plugins/build-basic-autotools plugins/debug-manager plugins/run-program



Author: sgranjoux
Date: Mon May 26 19:47:23 2008
New Revision: 3958
URL: http://svn.gnome.org/viewvc/anjuta?rev=3958&view=rev

Log:
	* plugins/debug-manager/start.c,
	plugins/build-basic-autotools/build-basic-autotools.c,
	plugins/run-program/plugin.c,
	plugins/run-program/execute.c,
	plugins/run-program/plugin.h,
	libanjuta/interfaces/libanjuta.idl,
	libanjuta/interfaces/anjuta-idl-compiler.pl,
	manuals/reference/libanjuta/libanjuta-docs.sgml,
	manuals/reference/libanjuta/libanjuta-sections.txt:
	Change the new IAnjutaBuilder interface to use callbacks
	Add the documentation of IAnjutaBuilder


Modified:
   trunk/ChangeLog
   trunk/libanjuta/interfaces/anjuta-idl-compiler.pl
   trunk/libanjuta/interfaces/libanjuta.idl
   trunk/manuals/reference/libanjuta/libanjuta-docs.sgml
   trunk/manuals/reference/libanjuta/libanjuta-sections.txt
   trunk/plugins/build-basic-autotools/build-basic-autotools.c
   trunk/plugins/debug-manager/start.c
   trunk/plugins/run-program/execute.c
   trunk/plugins/run-program/plugin.c
   trunk/plugins/run-program/plugin.h

Modified: trunk/libanjuta/interfaces/anjuta-idl-compiler.pl
==============================================================================
--- trunk/libanjuta/interfaces/anjuta-idl-compiler.pl	(original)
+++ trunk/libanjuta/interfaces/anjuta-idl-compiler.pl	Mon May 26 19:47:23 2008
@@ -1313,7 +1313,7 @@
 			$answer .= "\t\t/* Signal */";
 			$answer .="\n\t\tg_signal_new (\"$signal\",
 			$macro_type,
-			G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
+			G_SIGNAL_RUN_LAST,
 			G_STRUCT_OFFSET (${class}Iface, $func),
 			NULL, NULL,
 			${marshaller});\n\n";

Modified: trunk/libanjuta/interfaces/libanjuta.idl
==============================================================================
--- trunk/libanjuta/interfaces/libanjuta.idl	(original)
+++ trunk/libanjuta/interfaces/libanjuta.idl	Mon May 26 19:47:23 2008
@@ -556,7 +556,7 @@
 interface IAnjutaBuilder
 {
 	#include <libanjuta/anjuta-error.h>
-	
+
 	/* Types */
 	enum Error
 	{
@@ -571,58 +571,55 @@
 		OTHER_ERROR
 	}
 
-	/**
-	* IAnjutaBuilder::command-finished:
-	* @obj: Self
-	* @err: Error if command fail
-	*
-	* This signal is emitted when a command with a non null command_id is
-	* finished. The command_id is used as detail argument when the signal
-	* is emitted so only the caller get the signal.
-	*/
-	void ::command_finished (GError *err);
+	typedef gpointer Handle;
+
+	typedef void (*Callback) (GObject *sender, GError* err, gpointer user_data);
 
 	/** 
 	* ianjuta_builder_is_built:
 	* @obj: Self
 	* @uri: target uri
-	* @command_id: Quark used to identify command, could be 0
+	* @callback: callback called when command is finished
+	* @user_data: data passed to the callback
 	* @err: Error propagation and reporting.
 	*
 	* Check if the corresponding target is up to date or not. This
 	* command doesn't display anything. If this command cannot be
 	* implemented, it is possible to return always TRUE.
+	* When the command if finished, the callback function is called
+	* if defined.
 	*
-	* Returns: TRUE if the target is already built.
+	* Returns: non null command handle if succeed
 	*/
-	gboolean is_built (const gchar *uri, GQuark command_id);
+	Handle is_built (const gchar *uri, Callback callback, gpointer user_data);
 
 	/** 
 	* ianjuta_builder_build:
 	* @obj: Self
 	* @uri: target uri
-	* @command_id: Quark used to identify command, could be 0
+	* @callback: callback called when command is finished
+	* @user_data: data passed to the callback
 	* @err: Error propagation and reporting.
 	*
-	* Build the specified target
+	* Build the specified target.
+	* When the command if finished, the callback function is called
+	* if defined.
 	*
-	* Returns: FALSE if there is an error.
+	* Returns: non null command handle if succeed
 	*/
-	gboolean build (const gchar *uri, GQuark command_id);
+	Handle build (const gchar *uri, Callback callback, gpointer user_data);
 
 	/**
 	* ianjuta_builder_cancel:
 	* @obj: Self
-	* @command_id: Quark used to identify command
+	* @handle: handle of the command to cancel
 	* @err: Error propagation and reporting.
 	* 
-	* Cancel specified command. The command-finished signal is
-	* emitted immediatly even if the real command will be
-	* cancelled a bit later.
+	* Cancel specified command. The callback function will not
+	* be called.
 	*
-	* Returns: FALSE if there is an error.
 	*/
-	void cancel (GQuark command_id);
+	void cancel (Handle handle);
 }
 
 /**

Modified: trunk/manuals/reference/libanjuta/libanjuta-docs.sgml
==============================================================================
--- trunk/manuals/reference/libanjuta/libanjuta-docs.sgml	(original)
+++ trunk/manuals/reference/libanjuta/libanjuta-docs.sgml	Mon May 26 19:47:23 2008
@@ -85,6 +85,7 @@
     <title>Plugin interfaces</title>
 	<xi:include href="xml/ianjuta-bookmark.xml"/>
 	<xi:include href="xml/ianjuta-buildable.xml"/>
+	<xi:include href="xml/ianjuta-builder.xml"/>
 	<xi:include href="xml/ianjuta-debugger.xml"/>
 	<xi:include href="xml/ianjuta-debugger-breakpoint.xml"/>
 	<xi:include href="xml/ianjuta-debugger-instruction.xml"/>

Modified: trunk/manuals/reference/libanjuta/libanjuta-sections.txt
==============================================================================
--- trunk/manuals/reference/libanjuta/libanjuta-sections.txt	(original)
+++ trunk/manuals/reference/libanjuta/libanjuta-sections.txt	Mon May 26 19:47:23 2008
@@ -700,6 +700,28 @@
 </SECTION>
 
 <SECTION>
+<FILE>ianjuta-builder</FILE>
+IANJUTA_TYPE_BUILDER_ERROR
+IAnjutaBuilderError
+IANJUTA_BUILDER_ERROR
+IAnjutaBuilderHandle
+IAnjutaBuilderCallback
+IAnjutaBuilder
+IAnjutaBuilderIface
+ianjuta_builder_error_quark
+ianjuta_builder_get_type
+ianjuta_builder_build
+ianjuta_builder_cancel
+ianjuta_builder_is_built
+<SUBSECTION Standard>
+IANJUTA_BUILDER
+IANJUTA_IS_BUILDER
+IANJUTA_TYPE_BUILDER
+ianjuta_builder_error_get_type
+IANJUTA_BUILDER_GET_IFACE
+</SECTION>
+
+<SECTION>
 <FILE>ianjuta-debug-manager</FILE>
 IANJUTA_DEBUG_MANAGER_ERROR
 IAnjutaDebugManager

Modified: trunk/plugins/build-basic-autotools/build-basic-autotools.c
==============================================================================
--- trunk/plugins/build-basic-autotools/build-basic-autotools.c	(original)
+++ trunk/plugins/build-basic-autotools/build-basic-autotools.c	Mon May 26 19:47:23 2008
@@ -95,8 +95,9 @@
 	AnjutaPlugin *plugin;
 	
 	AnjutaLauncher *launcher;
-	GQuark id;
 	gchar *command;
+	IAnjutaBuilderCallback callback;
+	gpointer user_data;
 
 	IAnjutaMessageView *message_view;
 	GHashTable *build_dir_stack;
@@ -268,7 +269,7 @@
 static gboolean
 build_context_destroy_command (BuildContext *context)
 {
-	if (context->id)
+	if (context->callback)
 	{
 		GError *err;
 			
@@ -276,9 +277,9 @@
 		err = g_error_new_literal (ianjuta_builder_error_quark (),
 								   IANJUTA_BUILDER_ABORTED,
 								   _("Command aborted"));
-		g_signal_emit (context->plugin, g_signal_lookup ("command-finished", IANJUTA_TYPE_BUILDER), context->id, err);
+		context->callback (G_OBJECT (context->plugin), err, context->user_data);
 		g_error_free (err);
-		context->id = 0;
+		context->callback = NULL;
 	}
 		
 	if (context->launcher)
@@ -828,7 +829,7 @@
 										  G_CALLBACK (on_build_terminated),
 										  context);
 	
-	if (context->id != 0)
+	if (context->callback != NULL)
 	{
 		GError *err = NULL;
 		
@@ -867,10 +868,10 @@
 			err = g_error_new_literal (ianjuta_builder_error_quark (),
 							   IANJUTA_BUILDER_TERMINATED,
 							   _("Command terminated for an unknown reason"));
-		}	
-		/* Emit command-finished signal if a valid quark have been passed */
-		g_signal_emit (context->plugin, g_signal_lookup ("command-finished", IANJUTA_TYPE_BUILDER), context->id, err);
-		context->id = 0;
+		}
+		
+		context->callback (G_OBJECT (context->plugin), err, context->user_data);	
+		context->callback = NULL;
 	}
 	
 	/* Message view could have been destroyed before */
@@ -1004,8 +1005,8 @@
 	
 static BuildContext*
 build_get_context (BasicAutotoolsPlugin *plugin, const gchar *dir,
-				   gboolean with_view,
-				   const gchar *command, GQuark id)
+		   gboolean with_view, const gchar *command,
+		  IAnjutaBuilderCallback callback, gpointer user_data)
 {
 	BuildContext *context = NULL;
 
@@ -1021,7 +1022,8 @@
 		context->plugin = ANJUTA_PLUGIN(plugin);
 	}
 		
-	context->id = id;
+	context->callback = callback;
+	context->user_data = user_data;
 	context->command = g_strdup (command);
 	context->launcher = anjuta_launcher_new ();
 	g_signal_connect (G_OBJECT (context->launcher), "child-exited",
@@ -1058,23 +1060,24 @@
 	anjuta_launcher_set_env (launcher, name, env_value);
 }
 
-static gboolean
+static BuildContext*
 build_execute_command_full (BasicAutotoolsPlugin* bplugin, const gchar *dir,
-							const gchar *command, GQuark id,
-							gboolean save_file, gboolean with_view, GHashTable* env,
-							GError **err)
+			const gchar *command,
+			gboolean save_file, gboolean with_view, GHashTable* env,
+			IAnjutaBuilderCallback callback, gpointer user_data,
+			GError **err)
 {
 	AnjutaPlugin* plugin = ANJUTA_PLUGIN(bplugin);
 	AnjutaPreferences* prefs = anjuta_shell_get_preferences (plugin->shell, NULL);
 	BuildContext *context;
 	gchar* real_command;
 	
-	g_return_val_if_fail (command != NULL, FALSE);
+	g_return_val_if_fail (command != NULL, NULL);
 
 	if (save_file) 
 		save_all_files (ANJUTA_PLUGIN (plugin));
 	
-	context = build_get_context (bplugin, dir, with_view, command, id);
+	context = build_get_context (bplugin, dir, with_view, command, callback, user_data);
 	
 	if (anjuta_preferences_get_int (prefs , PREF_USE_SB))
 	{
@@ -1113,48 +1116,39 @@
 	}		
 	g_free(real_command);
 	
-	return TRUE;
+	return context;
 }
 
 
 static gboolean
 build_execute_command (BasicAutotoolsPlugin* bplugin, const gchar *dir,
-					   const gchar *command, GQuark id,
-					   gboolean save_file, gboolean with_view, GError **err)
+		   const gchar *command, gboolean save_file, GError **err)
 {
-	return build_execute_command_full (bplugin, dir, command, id,
-									   save_file, with_view, NULL, NULL);
+	return build_execute_command_full (bplugin, dir, command, save_file, TRUE, NULL, NULL, NULL, NULL) != NULL;
 }
 
 static void
-build_cancel_command (BasicAutotoolsPlugin* bplugin, GQuark id,
+build_cancel_command (BasicAutotoolsPlugin* bplugin, BuildContext *context,
 					  GError **err)
 {
 	GList *node;
-	
+
+	if (context == NULL) return;
+		
 	for (node = g_list_first (bplugin->contexts_pool); node != NULL; node = g_list_next (node))
 	{
-		BuildContext *context;
-		context = node->data;
-		
-		if ((context->id == id) && (context->launcher != NULL))
-		{
-			GError *err;
-			
-			/* emit the cancel signal immediatly, so the quark value can
-			 * be reused */
-			err = g_error_new (ianjuta_builder_error_quark (),
-									 IANJUTA_BUILDER_CANCELED,
-									 _("Command canceled by user"));
-			g_signal_emit (context->plugin, g_signal_lookup ("command-finished", IANJUTA_TYPE_BUILDER), context->id, err);
-			g_error_free (err);
-			context->id = 0;
-			
-			anjuta_launcher_signal (context->launcher, SIGTERM);
-		}
+		if (node->data == context)
+		{	
+			if (context->launcher != NULL)
+			{
+				anjuta_launcher_signal (context->launcher, SIGTERM);
+				return;
+			}
+		}	
 	}	
-	
-	return;
+
+	/* Invalid handle passed */
+	g_return_if_reached ();	
 }
 
 static gboolean
@@ -1200,7 +1194,7 @@
 			*ext_ptr = '\0';
 			command = g_strconcat (CHOOSE_COMMAND (plugin, COMPILE), " ",
 								   file_basename, new_ext, NULL);
-			build_execute_command (plugin, file_dirname, command, 0, TRUE, TRUE, NULL);
+			build_execute_command (plugin, file_dirname, command, TRUE, NULL);
 			g_free (command);
 			ret = TRUE;
 		}
@@ -1209,7 +1203,7 @@
 		gchar *command;
 		command = g_strconcat (CHOOSE_COMMAND(plugin, COMPILE), " ",
 							   file_basename, NULL);
-		build_execute_command (plugin, file_dirname, command, 0, TRUE, TRUE, NULL);
+		build_execute_command (plugin, file_dirname, command, TRUE, NULL);
 		g_free (command);
 		ret = TRUE;
 	}
@@ -1234,7 +1228,7 @@
 build_build_project (GtkAction *action, BasicAutotoolsPlugin *plugin)
 {
 	build_execute_command (plugin, plugin->project_root_dir,
-						   CHOOSE_COMMAND (plugin, BUILD), 0, TRUE, TRUE, NULL);
+						   CHOOSE_COMMAND (plugin, BUILD), TRUE, NULL);
 }
 
 static void
@@ -1245,7 +1239,7 @@
 									 CHOOSE_COMMAND (plugin, INSTALL));
 	g_free(root);
 	build_execute_command (plugin, plugin->project_root_dir,
-						   command, 0, TRUE, TRUE, NULL);
+						   command, TRUE, NULL);
 	g_free(command);
 }
 
@@ -1253,7 +1247,7 @@
 build_clean_project (GtkAction *action, BasicAutotoolsPlugin *plugin)
 {
 	build_execute_command (plugin, plugin->project_root_dir,
-						   CHOOSE_COMMAND (plugin, CLEAN), 0, FALSE, TRUE, NULL);
+						   CHOOSE_COMMAND (plugin, CLEAN), FALSE, NULL);
 }
 
 static void
@@ -1285,7 +1279,8 @@
 			cmd = g_strdup (CHOOSE_COMMAND (plugin, CONFIGURE));
 		}
 		build_execute_command_full (plugin, plugin->project_root_dir, 
-							   cmd, 0, TRUE, TRUE, build_options, NULL);
+					   cmd, TRUE, TRUE, build_options,
+					   NULL, NULL, NULL);
 		g_free (cmd);
 		g_hash_table_destroy (build_options);
 	}
@@ -1328,7 +1323,8 @@
 				cmd = g_strdup ("autoreconf -i --force");
 		}
 		build_execute_command_full (plugin, plugin->project_root_dir, 
-									cmd, 0, TRUE, TRUE, build_options, NULL);
+					cmd, TRUE, TRUE, build_options,
+		 			NULL, NULL, NULL);
 		g_free (cmd);
 		g_hash_table_destroy (build_options);
 	}
@@ -1338,8 +1334,8 @@
 build_distribution_project (GtkAction *action, BasicAutotoolsPlugin *plugin)
 {
 	build_execute_command (plugin, plugin->project_root_dir,
-						   CHOOSE_COMMAND (plugin, BUILD_TARBALL), 0,
-						   FALSE, TRUE, NULL);
+			   CHOOSE_COMMAND (plugin, BUILD_TARBALL),
+			   FALSE, NULL);
 }
 
 static void
@@ -1347,8 +1343,8 @@
 {
 	gchar *dirname = g_dirname (plugin->current_editor_filename);
 	build_execute_command (plugin, dirname,
-						   CHOOSE_COMMAND (plugin, BUILD), 0,
-						   TRUE, TRUE, NULL);
+			   CHOOSE_COMMAND (plugin, BUILD),
+			   TRUE, NULL);
 	g_free (dirname);
 }
 
@@ -1360,8 +1356,7 @@
 	gchar* command = g_strdup_printf ("%s %s", root,
 									  CHOOSE_COMMAND (plugin, INSTALL));
 	g_free(root);
-	build_execute_command (plugin, dirname,
-						   command, 0, TRUE, TRUE, NULL);
+	build_execute_command (plugin, dirname, command, TRUE, NULL);
 	g_free(command);
 	g_free (dirname);
 }
@@ -1371,8 +1366,8 @@
 {
 	gchar *dirname = g_dirname (plugin->current_editor_filename);
 	build_execute_command (plugin, dirname,
-						   CHOOSE_COMMAND (plugin, CLEAN), 0,
-						   FALSE, TRUE, NULL);
+			   CHOOSE_COMMAND (plugin, CLEAN),
+			   FALSE, NULL);
 	g_free (dirname);
 }
 
@@ -1407,8 +1402,8 @@
 	else
 		dir = g_path_get_dirname (plugin->fm_current_filename);
 	build_execute_command (plugin, dir,
-						   CHOOSE_COMMAND (plugin, BUILD), 0,
-						   TRUE, TRUE, NULL);
+			   CHOOSE_COMMAND (plugin, BUILD),
+			   TRUE, NULL);
 }
 
 static void
@@ -1429,7 +1424,7 @@
 	command = g_strdup_printf ("%s %s", root,
 							   CHOOSE_COMMAND (plugin, INSTALL));
 	g_free(root);
-	build_execute_command (plugin, dir, command, 0, TRUE, TRUE, NULL);
+	build_execute_command (plugin, dir, command, TRUE, NULL);
 }
 
 static void
@@ -1444,8 +1439,8 @@
 	else
 		dir = g_path_get_dirname (plugin->fm_current_filename);
 	build_execute_command (plugin, dir,
-						   CHOOSE_COMMAND (plugin, CLEAN), 0,
-						   FALSE, TRUE, NULL);
+			   CHOOSE_COMMAND (plugin, CLEAN),
+			   FALSE, NULL);
 }
 
 /* Project manager context menu */
@@ -1470,8 +1465,8 @@
 	else
 		dir = g_path_get_dirname (plugin->pm_current_filename);
 	build_execute_command (plugin, dir,
-						   CHOOSE_COMMAND (plugin, BUILD), 0,
-						   TRUE, TRUE, NULL);
+			   CHOOSE_COMMAND (plugin, BUILD),
+			   TRUE, NULL);
 }
 
 static void
@@ -1492,7 +1487,7 @@
 		dir = g_strdup (plugin->pm_current_filename);
 	else
 		dir = g_path_get_dirname (plugin->pm_current_filename);
-	build_execute_command (plugin, dir, command, 0, TRUE, TRUE, NULL);
+	build_execute_command (plugin, dir, command, TRUE, NULL);
 	g_free(command);
 }
 
@@ -1508,8 +1503,8 @@
 	else
 		dir = g_path_get_dirname (plugin->pm_current_filename);
 	build_execute_command (plugin, dir,
-						   CHOOSE_COMMAND (plugin, CLEAN), 0,
-						   FALSE, TRUE, NULL);
+			   CHOOSE_COMMAND (plugin, CLEAN),
+			   FALSE, NULL);
 }
 
 static GtkActionEntry build_actions[] = 
@@ -2425,8 +2420,8 @@
 {
 	BasicAutotoolsPlugin *plugin = ANJUTA_PLUGIN_BASIC_AUTOTOOLS (manager);
 	build_execute_command (plugin, directory,
-						   CHOOSE_COMMAND (plugin, BUILD), 0,
-						   TRUE, TRUE, NULL);
+			   CHOOSE_COMMAND (plugin, BUILD),
+			   TRUE, NULL);
 }
 
 static void
@@ -2435,8 +2430,8 @@
 {
 	BasicAutotoolsPlugin *plugin = ANJUTA_PLUGIN_BASIC_AUTOTOOLS (manager);
 	build_execute_command (plugin, directory,
-						   CHOOSE_COMMAND (plugin, CLEAN), 0,
-						   FALSE, TRUE, NULL);
+			   CHOOSE_COMMAND (plugin, CLEAN),
+			   FALSE, NULL);
 }
 
 static void
@@ -2448,7 +2443,7 @@
 	gchar* command = g_strdup_printf ("%s %s", root,
 									  CHOOSE_COMMAND (plugin, INSTALL));
 	g_free(root);
-	build_execute_command (plugin, directory, command, 0, TRUE, TRUE, NULL);
+	build_execute_command (plugin, directory, command, TRUE, NULL);
 	g_free(command);
 }
 
@@ -2458,8 +2453,8 @@
 {
 	BasicAutotoolsPlugin *plugin = ANJUTA_PLUGIN_BASIC_AUTOTOOLS (manager);
 	build_execute_command (plugin, directory,
-						   CHOOSE_COMMAND (plugin, CONFIGURE), 0,
-						   TRUE, TRUE, NULL);
+			   CHOOSE_COMMAND (plugin, CONFIGURE),
+			   TRUE, NULL);
 }
 
 static void
@@ -2470,15 +2465,15 @@
 	if (directory_has_file (plugin->project_root_dir, "autogen.sh"))
 	{
 		build_execute_command (plugin, directory,
-							   CHOOSE_COMMAND (plugin, GENERATE), 0,
-							   FALSE, TRUE, NULL);
+				   CHOOSE_COMMAND (plugin, GENERATE),
+				   FALSE, NULL);
 	}
 	else
 	{
 		/* FIXME: get override command for this too */
 		build_execute_command (plugin, directory,
-							   "autoreconf -i --force", 0, 
-							   FALSE, TRUE, NULL);
+				   "autoreconf -i --force", 
+				   FALSE, NULL);
 	}
 }
 
@@ -2533,62 +2528,71 @@
 /* IAnjutaBuilder implementation
  *---------------------------------------------------------------------------*/
 
-static gboolean
-ibuilder_is_built (IAnjutaBuilder *builder, const gchar *uri, GQuark command_id, GError **err)
+static IAnjutaBuilderHandle
+ibuilder_is_built (IAnjutaBuilder *builder, const gchar *uri,
+	       IAnjutaBuilderCallback callback, gpointer user_data,
+       	       GError **err)
 {
 	BasicAutotoolsPlugin *plugin = ANJUTA_PLUGIN_BASIC_AUTOTOOLS (builder);
-	gboolean ok;
+	BuildContext *context;
 	gchar *filename;
 	gchar *target;
 	gchar *dirname;
 	gchar *cmd;
 	
 	filename = gnome_vfs_get_local_path_from_uri (uri);
-	if (filename == NULL) return FALSE;
+	if (filename == NULL) return NULL;
 	target = g_path_get_basename (filename);
 	dirname = g_path_get_dirname (filename);
 	g_free (filename);	
 	cmd = g_strconcat (CHOOSE_COMMAND (plugin, IS_BUILT), " ", target, NULL);
 	g_free (target);
 	
-	ok = build_execute_command (plugin, dirname, cmd, command_id, TRUE, FALSE, err);
+	context = build_execute_command_full (plugin, dirname, cmd,
+			       			TRUE, FALSE, NULL,
+			       			callback, user_data, err);
 	g_free (cmd);
 	g_free (dirname);
 	
-	return ok;
+	return (IAnjutaBuilderHandle)context;
 }
 
-static gboolean
-ibuilder_build (IAnjutaBuilder *builder, const gchar *uri, GQuark command_id, GError **err)
+static IAnjutaBuilderHandle
+ibuilder_build (IAnjutaBuilder *builder, const gchar *uri,
+	       	IAnjutaBuilderCallback callback, gpointer user_data,
+		GError **err)
 {
 	BasicAutotoolsPlugin *plugin = ANJUTA_PLUGIN_BASIC_AUTOTOOLS (builder);
-	gboolean ok;
+	BuildContext *context;
 	gchar *filename;
 	gchar *target;
 	gchar *dirname;
 	gchar *cmd;
 
 	filename = gnome_vfs_get_local_path_from_uri (uri);
-	if (filename == NULL) return FALSE;
+	if (filename == NULL) return NULL;
 	target = g_path_get_basename (filename);
 	dirname = g_path_get_dirname (filename);
 	g_free (filename);	
 	cmd = g_strconcat (CHOOSE_COMMAND (plugin, BUILD), " ", target, NULL);
 	g_free (target);
 
-	ok = build_execute_command (plugin, dirname, cmd, command_id, TRUE, TRUE, err);
+	context = build_execute_command_full (plugin, dirname, cmd,
+		       				TRUE, TRUE, NULL,
+						callback, user_data, err);
+
 	g_free (cmd);
 	g_free (dirname);
 	
-	return ok;
+	return (IAnjutaBuilderHandle)context;
 }
 
 static void
-ibuilder_cancel (IAnjutaBuilder *builder, GQuark command_id, GError **err)
+ibuilder_cancel (IAnjutaBuilder *builder, IAnjutaBuilderHandle handle, GError **err)
 {
 	BasicAutotoolsPlugin *plugin = ANJUTA_PLUGIN_BASIC_AUTOTOOLS (builder);
 
-	build_cancel_command (plugin, command_id, err);
+	build_cancel_command (plugin, (BuildContext *)handle, err);
 }
 
 static void

Modified: trunk/plugins/debug-manager/start.c
==============================================================================
--- trunk/plugins/debug-manager/start.c	(original)
+++ trunk/plugins/debug-manager/start.c	Mon May 26 19:47:23 2008
@@ -128,9 +128,8 @@
 	gboolean stop_at_beginning;
 	GList *source_dirs;
 	
-	GQuark build_id;
 	gchar *build_target;
-	gulong build_handle;
+	IAnjutaBuilderHandle build_handle;
 };
 
 /* Widgets found in glade file
@@ -156,8 +155,6 @@
 #define RUN_PROGRAM_ACTION_GROUP "ActionGroupRun"
 #define RUN_PROGRAM_PARAMETER_ACTION "ActionProgramParameters"
 
-#define BUILD_TARGET	"DMA_BUILD_TARGET"
-
 static void attach_process_clear (AttachProcess * ap, gint ClearRequest);
 
 /* Helper functions
@@ -876,12 +873,10 @@
 }
 
 static void
-on_build_finished (IAnjutaBuilder *builder, GError *err, gpointer user_data)
+on_build_finished (GObject *builder, GError *err, gpointer user_data)
 {
 	DmaStart *this = (DmaStart *)user_data;
 	
-	g_signal_handler_disconnect (builder, this->build_handle); 
-
 	if (err == NULL)
 	{
 		/* Up to date, start debugger */
@@ -893,12 +888,10 @@
 }
 
 static void
-on_is_built_finished (IAnjutaBuilder *builder, GError *err, gpointer user_data)
+on_is_built_finished (GObject *builder, GError *err, gpointer user_data)
 {
 	DmaStart *this = (DmaStart *)user_data;
 	
-	g_signal_handler_disconnect (builder, this->build_handle); 
-
 	if (err == NULL)
 	{
 		/* Up to date, start debugger */
@@ -907,10 +900,7 @@
 	else if (err->code == IANJUTA_BUILDER_FAILED)
 	{
 		/* Target is not up to date */
-		this->build_handle = g_signal_connect (builder, "command-finished::" BUILD_TARGET, G_CALLBACK (on_build_finished), this);
-
-		/* Build target */
-		ianjuta_builder_build (builder, this->build_target, this->build_id, NULL);
+		this->build_handle = ianjuta_builder_build (IANJUTA_BUILDER (builder), this->build_target, on_build_finished, this, NULL);
 		return;
 	}
 	
@@ -937,18 +927,15 @@
 			else
 			{
 				/* Cancel old operation */
-				ianjuta_builder_cancel (builder, this->build_id, NULL);
+				ianjuta_builder_cancel (builder, this->build_handle, NULL);
 			}
 		}
 		
 		this->build_target = g_strdup (target);
-		if (this->build_id == 0)
-			this->build_id = g_quark_from_static_string(BUILD_TARGET);
-
-		this->build_handle = g_signal_connect (builder, "command-finished::" BUILD_TARGET, G_CALLBACK (on_is_built_finished), this);
 
 		/* Check if target is up to date */
-		return ianjuta_builder_is_built (builder, target, this->build_id, NULL);
+		this->build_handle = ianjuta_builder_is_built (builder, target, on_is_built_finished, this, NULL);
+		return this->build_handle != 0;
 	}
 	else
 	{
@@ -1236,7 +1223,6 @@
 	self->debugger = dma_debug_manager_get_queue (plugin);
 	self->source_dirs = NULL;
 	self->build_target = NULL;
-	self->build_id = 0;
 	
 	g_signal_connect (self->plugin->shell, "save-session",
 					  G_CALLBACK (on_session_save), self);

Modified: trunk/plugins/run-program/execute.c
==============================================================================
--- trunk/plugins/run-program/execute.c	(original)
+++ trunk/plugins/run-program/execute.c	Mon May 26 19:47:23 2008
@@ -40,8 +40,6 @@
 #define PREF_USE_SB "build.use_scratchbox"
 #define PREF_SB_PATH "build.scratchbox.path"
 
-#define RUN_BUILD_TARGET_QUARK_STRING	"RUN_PLUGIN_BUILD_TARGET"
-
 /*----------------------------------------------------------------------------
  * Type definitions
  */
@@ -403,12 +401,10 @@
 }
 
 static void
-on_build_finished (IAnjutaBuilder *builder, GError *err, gpointer user_data)
+on_build_finished (GObject *builder, GError *err, gpointer user_data)
 {
 	RunProgramPlugin *plugin = (RunProgramPlugin *)user_data;
 	
-	g_signal_handler_disconnect (builder, plugin->build_handle); 
-
 	if (err == NULL)
 	{
 		/* Up to date, run program */
@@ -422,12 +418,10 @@
 }
 
 static void
-on_is_built_finished (IAnjutaBuilder *builder, GError *err, gpointer user_data)
+on_is_built_finished (GObject *builder, GError *err, gpointer user_data)
 {
 	RunProgramPlugin *plugin = (RunProgramPlugin *)user_data;
 	
-	g_signal_handler_disconnect (builder, plugin->build_handle); 
-
 	if (err == NULL)
 	{
 		/* Up to date, run program */
@@ -436,10 +430,7 @@
 	else if (err->code == IANJUTA_BUILDER_FAILED)
 	{
 		/* Target is not up to date */
-		plugin->build_handle = g_signal_connect (builder, "command-finished::" RUN_BUILD_TARGET_QUARK_STRING, G_CALLBACK (on_build_finished), plugin);
-
-		/* Build target */
-		ianjuta_builder_build (builder, plugin->build_uri, plugin->build_id, NULL);
+		plugin->build_handle = ianjuta_builder_build (IANJUTA_BUILDER (builder), plugin->build_uri, on_build_finished, plugin, NULL);
 	}
 	else
 	{
@@ -471,18 +462,16 @@
 			else
 			{
 				/* Cancel old operation */
-				ianjuta_builder_cancel (builder, plugin->build_id, NULL);
+				ianjuta_builder_cancel (builder, plugin->build_handle, NULL);
 			}
 		}
 		
 		plugin->build_uri = prog_uri;
-		if (plugin->build_id == 0)
-			plugin->build_id = g_quark_from_static_string(RUN_BUILD_TARGET_QUARK_STRING);
-
-		plugin->build_handle = g_signal_connect (builder, "command-finished::" RUN_BUILD_TARGET_QUARK_STRING, G_CALLBACK (on_is_built_finished), plugin);
 
 		/* Check if target is up to date */
-		return ianjuta_builder_is_built (builder, plugin->build_uri, plugin->build_id, NULL);
+		plugin->build_handle = ianjuta_builder_is_built (builder, plugin->build_uri, on_is_built_finished, plugin, NULL);
+
+		return plugin->build_handle != 0;
 	}
 	else
 	{

Modified: trunk/plugins/run-program/plugin.c
==============================================================================
--- trunk/plugins/run-program/plugin.c	(original)
+++ trunk/plugins/run-program/plugin.c	Mon May 26 19:47:23 2008
@@ -322,7 +322,6 @@
 	self->child = NULL;
 	
 	self->build_uri = NULL;
-	self->build_id = 0;
 }
 
 /* dispose is used to unref object created with instance_init */

Modified: trunk/plugins/run-program/plugin.h
==============================================================================
--- trunk/plugins/run-program/plugin.h	(original)
+++ trunk/plugins/run-program/plugin.h	Mon May 26 19:47:23 2008
@@ -64,9 +64,8 @@
 	guint child_exited_connection;
 	
 	/* Build data */	
-	GQuark build_id;
 	gchar *build_uri;
-	gulong build_handle;
+	gpointer build_handle;
 };
 
 void run_plugin_update_shell_value (RunProgramPlugin *plugin);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]