SF.net SVN: geany:[4033] branches/build-system

elextr at users.sourceforge.net elextr at xxxxx
Tue Jul 28 01:38:42 UTC 2009


Revision: 4033
          http://geany.svn.sourceforge.net/geany/?rev=4033&view=rev
Author:   elextr
Date:     2009-07-28 01:38:41 +0000 (Tue, 28 Jul 2009)

Log Message:
-----------
Fix warnings, build API and execute toolbutton

Modified Paths:
--------------
    branches/build-system/ChangeLog
    branches/build-system/src/build.c
    branches/build-system/src/build.h
    branches/build-system/src/filetypes.c
    branches/build-system/src/keyfile.c
    branches/build-system/src/project.c

Modified: branches/build-system/ChangeLog
===================================================================
--- branches/build-system/ChangeLog	2009-07-27 20:00:33 UTC (rev 4032)
+++ branches/build-system/ChangeLog	2009-07-28 01:38:41 UTC (rev 4033)
@@ -1,3 +1,12 @@
+2009-07-28  Lex Trotman  <elextr(at)gmail(dot)com>
+
+ * src/build.c, src/build.h, src/project.c, src/keyfile.c, src/filetypes.c
+   Fix some more warnings.
+   Fix commented out execute/stop toolbar code in build.c.
+   Add extra plugins documentation for GBO_TO_CMD and GBO_TO_GBG macros.
+   Changed build.h api so all functions prefixed with build_.
+
+
 2009-07-27  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
 
  * src/build.c, src/build.h, src/project.c:

Modified: branches/build-system/src/build.c
===================================================================
--- branches/build-system/src/build.c	2009-07-27 20:00:33 UTC (rev 4032)
+++ branches/build-system/src/build.c	2009-07-28 01:38:41 UTC (rev 4033)
@@ -113,7 +113,7 @@
 #endif
 static gboolean build_create_shellscript(const gchar *fname, const gchar *cmd, gboolean autoclose);
 static GPid build_spawn_cmd(GeanyDocument *doc, const gchar *cmd, const gchar *dir);
-/* static void set_stop_button(gboolean stop); */
+static void set_stop_button(gboolean stop);
 static void run_exit_cb(GPid child_pid, gint status, gpointer user_data);
 static void on_set_build_commands_activate(GtkWidget *w, gpointer u);
 static void on_build_next_error(GtkWidget *menuitem, gpointer user_data);
@@ -174,9 +174,9 @@
 };
 
 /*-----------------------------------------------------
- *
+ * 
  * Execute commands and handle results
- *
+ * 
  *-----------------------------------------------------*/
 
 /* the various groups of commands not in the filetype struct */
@@ -333,7 +333,7 @@
 #define return_nonblank_regex(src, ptr) if ((ptr)!=NULL && strlen(ptr)>0){ *fr = (src); return &(ptr); }
 
 /* like get_build_cmd, but for regexen, used by filetypes */
-gchar **get_build_regex(GeanyBuildGroup grp, GeanyFiletype *ft, gint *from)
+gchar **build_get_regex(GeanyBuildGroup grp, GeanyFiletype *ft, gint *from)
 {
 	gint sink, *fr = &sink;
 	if (from!=NULL) fr=from;
@@ -362,7 +362,7 @@
 {
 	GeanyDocument *doc;
 	GeanyFiletype *ft;
-
+	
 	switch(grp)
 	{
 		case GBG_FT:
@@ -398,7 +398,7 @@
 				case BCS_PREF:    return exec_pref;
 				case BCS_PROJ:    return exec_proj;
 				default: return NULL;
-
+				
 			}
 			break;
 		default:
@@ -524,7 +524,7 @@
 		utils_string_replace_all(stack, "%e", replacement);
 		g_free(replacement);
 	}
-
+	
     /* replace %p with the current project's (absolute) base directory */
 	replacement = NULL; /* prevent double free if no replacement found */
     if (app->project)
@@ -656,7 +656,7 @@
 	GeanyProject 		*project = app->project;
 	GeanyBuildCommand	*cmd = NULL;
 	gchar				*executable = NULL;
-	gchar				*working_dir = NULL;
+	gchar				*working_dir = NULL, *cmd_working_dir;
 	gboolean 			 autoclose = FALSE;
 	gboolean 			 result = FALSE;
 	gchar				*tmp;
@@ -672,7 +672,9 @@
 
 
     cmd_string = build_replace_placeholder(doc, buildcmd_cmd(cmd));
-    working_dir = build_replace_placeholder(doc, buildcmd_working_dir(cmd)); /* in utf-8 */
+	cmd_working_dir =  buildcmd_working_dir(cmd);
+	if (!NZV(cmd_working_dir)) cmd_working_dir = "%d";
+    working_dir = build_replace_placeholder(doc, cmd_working_dir); /* in utf-8 */
 
 	/* only test whether working dir exists, don't change it or else Windows support will break
 	 * (gspawn-win32-helper.exe is used by GLib and must be in $PATH which means current working
@@ -1031,7 +1033,7 @@
 static void run_exit_cb(GPid child_pid, gint status, gpointer user_data)
 {
 	RunInfo *run_info_data = (RunInfo*)user_data;
-
+	
 	g_spawn_close_pid(child_pid);
 
 	run_info_data->pid = 0;
@@ -1077,7 +1079,7 @@
 	gchar *full_command, *subs_command;
 	GeanyBuildCommand *buildcmd = get_build_cmd(doc, grp, cmd, NULL);
     gchar* cmdstr;
-
+	
 	if (buildcmd==NULL)
         return;
 
@@ -1108,9 +1110,9 @@
 
 
 /*----------------------------------------------------------------
- *
+ * 
  * Create build menu and handle callbacks (&toolbar callbacks)
- *
+ * 
  *----------------------------------------------------------------*/
 
 static void on_make_custom_input_response(const gchar *input)
@@ -1190,7 +1192,7 @@
 	const gint	 build_grp, build_cmd;
 	const gchar	*fix_label;
 	callback *cb;
-} build_menu_specs[] = {
+} build_menu_specs[] = { 
 	{ GTK_STOCK_CONVERT, GEANY_KEYS_BUILD_COMPILE, GBO_TO_GBG(GBO_COMPILE),
 		GBO_TO_CMD(GBO_COMPILE),       NULL, on_build_menu_item },
 	{ GEANY_STOCK_BUILD, GEANY_KEYS_BUILD_LINK,    GBO_TO_GBG(GBO_BUILD),
@@ -1227,7 +1229,7 @@
 		0,                             NULL, NULL }
 };
 
-static void create_build_menu_item(GtkWidget *menu, GeanyKeyGroup *group, GtkAccelGroup *ag,
+static void create_build_menu_item(GtkWidget *menu, GeanyKeyGroup *group, GtkAccelGroup *ag, 
 							struct build_menu_item_spec *bs, gchar *lbl, gint grp, gint cmd)
 {
 	GtkWidget *item = gtk_image_menu_item_new_with_mnemonic(lbl);
@@ -1235,7 +1237,7 @@
 	{
 		GtkWidget *image = gtk_image_new_from_stock(bs->stock_id, GTK_ICON_SIZE_MENU);
 		gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
-
+		
 	}
 	gtk_widget_show(item);
 	if (bs->key_binding>0)
@@ -1260,7 +1262,7 @@
 	build_menu_items->menu_item[GBG_NON_FT] = g_new0(GtkWidget*, build_groups_count[GBG_NON_FT]);
 	build_menu_items->menu_item[GBG_EXEC] = g_new0(GtkWidget*, build_groups_count[GBG_EXEC]);
 	build_menu_items->menu_item[GBG_FIXED] = g_new0(GtkWidget*, GBF_COUNT);
-
+	
 	for (i=0; build_menu_specs[i].build_grp != MENU_DONE; ++i)
 	{
 		struct build_menu_item_spec *bs = &(build_menu_specs[i]);
@@ -1314,9 +1316,9 @@
 	gint i, cmdcount, cmd, grp;
 	gboolean vis=FALSE;
 	gboolean have_path, build_running, exec_running, have_errors, cmd_sensitivity;
-	gboolean can_compile, can_make;
+	gboolean can_compile, can_make, run_sensitivity, run_running;
 	GeanyBuildCommand *bc;
-
+	
 	if (menu_items.menu==NULL)
 		create_build_menu(&menu_items);
 	if (doc == NULL)
@@ -1369,7 +1371,7 @@
 
 					if (grp < GBG_EXEC)
 					{
-						cmd_sensitivity =
+						cmd_sensitivity = 
 							(grp == GBG_FT && bc!=NULL && have_path && ! build_running) ||
 							(grp == GBG_NON_FT && bc!=NULL && ! build_running);
 						gtk_widget_set_sensitive(menu_item, cmd_sensitivity);
@@ -1389,6 +1391,7 @@
 						exec_running = run_info[cmd].pid>1;
 						cmd_sensitivity = bc!=NULL || exec_running;
 						gtk_widget_set_sensitive(menu_item, cmd_sensitivity);
+						if (cmd==GBO_TO_CMD(GBO_EXEC)) run_sensitivity = cmd_sensitivity;
 						if (!exec_running)
 						{
 							image = gtk_image_new_from_stock(bs->stock_id, GTK_ICON_SIZE_MENU);
@@ -1397,6 +1400,7 @@
 						{
 							image = gtk_image_new_from_stock(GTK_STOCK_STOP, GTK_ICON_SIZE_MENU);
 						}
+						if (cmd==GBO_TO_CMD(GBO_EXEC)) run_running = exec_running;
 						gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), image);
 						if (bc != NULL && label != NULL
                                 && strlen(label) > 0)
@@ -1411,44 +1415,41 @@
 				}
 		}
 	}
-
+	
 	can_compile = get_build_cmd(doc, GBG_FT, GBO_TO_CMD(GBO_BUILD), NULL)!=NULL
 					&& have_path && ! build_running;
 	if (widgets.toolitem_build != NULL)
 		gtk_widget_set_sensitive(widgets.toolitem_build, can_compile);
 	can_make = FALSE;
 	if (widgets.toolitem_make_all != NULL)
-		gtk_widget_set_sensitive(widgets.toolitem_make_all,
-			(can_make |= get_build_cmd(doc, GBG_FT, GBO_TO_CMD(GBO_MAKE_ALL), NULL)!=NULL
+		gtk_widget_set_sensitive(widgets.toolitem_make_all, 
+			(can_make |= get_build_cmd(doc, GBG_FT, GBO_TO_CMD(GBO_MAKE_ALL), NULL)!=NULL 
 							&& ! build_running));
 	if (widgets.toolitem_make_custom != NULL)
-		gtk_widget_set_sensitive(widgets.toolitem_make_custom,
-			(can_make |= get_build_cmd(doc, GBG_FT, GBO_TO_CMD(GBO_MAKE_CUSTOM), NULL)!=NULL
+		gtk_widget_set_sensitive(widgets.toolitem_make_custom, 
+			(can_make |= get_build_cmd(doc, GBG_FT, GBO_TO_CMD(GBO_MAKE_CUSTOM), NULL)!=NULL 
 							&& ! build_running));
 	if (widgets.toolitem_make_object != NULL)
 		gtk_widget_set_sensitive(widgets.toolitem_make_object,
-			(can_make |= get_build_cmd(doc, GBG_FT, GBO_TO_CMD(GBO_MAKE_OBJECT), NULL)!=NULL
+			(can_make |= get_build_cmd(doc, GBG_FT, GBO_TO_CMD(GBO_MAKE_OBJECT), NULL)!=NULL 
 							&& ! build_running));
 	if (widgets.toolitem_set_args != NULL)
 		gtk_widget_set_sensitive(widgets.toolitem_set_args, TRUE);
 
 	gtk_action_set_sensitive(widgets.compile_action, can_compile);
 	gtk_action_set_sensitive(widgets.build_action, can_make );
-/*	gtk_action_set_sensitive(widgets.run_action, can_run || can_stop); */
+	gtk_action_set_sensitive(widgets.run_action, run_sensitivity);
 
-	/* show the stop command if a program is running, otherwise show run command
-	set_stop_button(can_stop); */
+	/* show the stop command if a program is running from execute 0 , otherwise show run command */
+	set_stop_button(run_running);
 
 }
 
 /* Call build_menu_update() instead of calling this directly. */
-#if 0
 static void set_stop_button(gboolean stop)
 {
 	const gchar *button_stock_id = NULL;
-	GtkStockItem sitem;
 	GtkToolButton *run_button;
-	GtkWidget *menuitem = build_get_menu_items(run_info.file_type_id)->item_exec;
 
 	run_button = GTK_TOOL_BUTTON(toolbar_get_widget_by_name("Run"));
 	if (run_button != NULL)
@@ -1459,38 +1460,18 @@
 	if (! stop && utils_str_equal(button_stock_id, "gtk-execute"))
 		return;
 
-	/* use the run button also as stop button */
+	 /* use the run button also as stop button  */
 	if (stop)
 	{
 		if (run_button != NULL)
 			gtk_tool_button_set_stock_id(run_button, "gtk-stop");
-
-		if (menuitem != NULL)
-		{
-			gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem),
-							gtk_image_new_from_stock("gtk-stop", GTK_ICON_SIZE_MENU));
-			gtk_stock_lookup("gtk-stop", &sitem);
-			gtk_label_set_text_with_mnemonic(GTK_LABEL(gtk_bin_get_child(GTK_BIN(menuitem))),
-						sitem.label);
-		}
 	}
 	else
 	{
 		if (run_button != NULL)
 			gtk_tool_button_set_stock_id(run_button, "gtk-execute");
-
-		if (menuitem != NULL)
-		{
-			gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem),
-						gtk_image_new_from_stock("gtk-execute", GTK_ICON_SIZE_MENU));
-
-			gtk_stock_lookup("gtk-execute", &sitem);
-			gtk_label_set_text_with_mnemonic(GTK_LABEL(gtk_bin_get_child(GTK_BIN(menuitem))),
-						sitem.label);
-		}
 	}
 }
-#endif
 
 static void on_set_build_commands_activate(GtkWidget *w, gpointer u)
 {
@@ -1596,9 +1577,9 @@
 }
 
 /*------------------------------------------------------
- *
+ * 
  * Create and handle the build menu configuration dialog
- *
+ * 
  *-------------------------------------------------------*/
 
 typedef struct RowWidgets {
@@ -1663,11 +1644,11 @@
 	GtkWidget 	*label, *clear, *clearicon;
 	RowWidgets 	*roww;
 	GeanyBuildCommand *bc;
-	guint src;
+	gint src;
     enum GeanyBuildCmdEntries i;
 
     gint column = 0;
-
+	
 	label = gtk_label_new(g_strdup_printf("%d:", cmd+1));
 	gtk_table_attach(table, label, column, column+1, row, row+1, GTK_FILL, GTK_FILL | GTK_EXPAND,
 					entry_x_padding, entry_y_padding);
@@ -1722,7 +1703,7 @@
 	GtkTable		*table;
 	gchar			**ch, *txt;
 	gint			 col, row, cmdindex, cmd;
-	guint			 src;
+	gint			 src;
 	gboolean		 sensitivity;
 
 	table = GTK_TABLE(gtk_table_new(build_items_count+12, 5, FALSE));
@@ -1752,7 +1733,7 @@
 	gtk_table_attach(table, label, 0, DC_ENTRIES+1, row, row+1, GTK_FILL, GTK_FILL | GTK_EXPAND,
 					entry_x_padding, entry_y_padding);
 	fields->fileregex = gtk_entry_new();
-	fields->fileregexstring = get_build_regex(GBG_FT, NULL, &src);
+	fields->fileregexstring = build_get_regex(GBG_FT, NULL, &src);
 	sensitivity = ft==NULL?FALSE:TRUE;
 	if (fields->fileregexstring!=NULL && *(fields->fileregexstring)!=NULL)
 	{
@@ -1785,7 +1766,7 @@
 	gtk_table_attach(table, label, 0, DC_ENTRIES+1, row, row+1, GTK_FILL, GTK_FILL | GTK_EXPAND,
 					entry_x_padding, entry_y_padding);
 	fields->nonfileregex = gtk_entry_new();
-	fields->nonfileregexstring = get_build_regex(GBG_NON_FT, NULL, &src);
+	fields->nonfileregexstring = build_get_regex(GBG_NON_FT, NULL, &src);
 	sensitivity = TRUE;
 	if (fields->nonfileregexstring!=NULL && *(fields->nonfileregexstring)!=NULL)
 	{
@@ -1882,7 +1863,7 @@
 				&&
 				(
 					strlen(entries[BC_LABEL])>0				/* but now one field has some */
-					|| strlen(entries[BC_COMMAND])>0
+					|| strlen(entries[BC_COMMAND])>0 
 					|| strlen(entries[BC_WORKING_DIR])>0
 				)
 			)
@@ -1948,7 +1929,7 @@
 {
 	gint			 cmdindex, cmd;
 	gboolean		 changed = FALSE;
-
+	
 	if (response == GTK_RESPONSE_ACCEPT)
 	{
 		for (cmdindex=0, cmd=0; cmd<build_groups_count[GBG_FT]; ++cmdindex, ++cmd)
@@ -1981,11 +1962,11 @@
 										GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
 	table = build_commands_table(doc, BCS_PREF, &table_data, ft);
 	vbox = ui_dialog_vbox_new(GTK_DIALOG(dialog));
-	gtk_box_pack_start(GTK_BOX(vbox), table, TRUE, TRUE, 0);
+	gtk_box_pack_start(GTK_BOX(vbox), table, TRUE, TRUE, 0); 
 	gtk_widget_show_all(dialog);
 	/* run modally to prevent user changing idx filetype */
 	response = gtk_dialog_run(GTK_DIALOG(dialog));
-
+	
 	prefdsts.dst[GBG_NON_FT] = &non_ft_pref;
 	prefdsts.dst[GBG_EXEC] = &exec_pref;
 	if (ft!=NULL)
@@ -2001,7 +1982,7 @@
 	prefdsts.nonfileregexstr = &regex_pref;
 	read_build_commands(&prefdsts, table_data, response);
 	free_build_fields(table_data);
-
+	
 	build_menu_update(doc);
 	gtk_widget_destroy(dialog);
 }
@@ -2027,9 +2008,9 @@
 }
 
 /*----------------------------------------------------------
- *
+ * 
  * Load and store configuration
- *
+ * 
  * ---------------------------------------------------------*/
 
 static const gchar *build_grp_name = "build-menu";
@@ -2045,14 +2026,14 @@
 #define set_key_cmd(key,cmd) (key[prefixlen+3]=cmd[0], key[prefixlen+4]=cmd[1])
 #define set_key_fld(key,fld) (key[prefixlen+6]=fld[0], key[prefixlen+7]=fld[1])
 
-static void load_build_menu_grp(GKeyFile *config, GeanyBuildCommand **dst, gint grp,
+static void build_load_menu_grp(GKeyFile *config, GeanyBuildCommand **dst, gint grp,
 								gchar *prefix, gboolean loc)
 {
 	gint cmd, prefixlen; /* NOTE prefixlen used in macros above */
 	GeanyBuildCommand *dstcmd;
 	gchar *key;
 	static gchar cmdbuf[3]="  ";
-
+	
 	if (*dst==NULL)*dst = g_new0(GeanyBuildCommand, build_groups_count[grp]);
 	dstcmd = *dst;
 	prefixlen = prefix==NULL?0:strlen(prefix);
@@ -2085,9 +2066,9 @@
 	g_free(key);
 }
 
-/* for the specified source load new format build menu items or try to make some sense of
+/* for the specified source load new format build menu items or try to make some sense of 
  * old format setings, not done perfectly but better than ignoring them */
-void load_build_menu(GKeyFile *config, GeanyBuildSource src, gpointer p)
+void build_load_menu(GKeyFile *config, GeanyBuildSource src, gpointer p)
 {
 /*	gint grp;*/
 	GeanyFiletype 	*ft;
@@ -2103,28 +2084,28 @@
 			case BCS_FT:
 				ft = (GeanyFiletype*)p;
 				if (ft==NULL)return;
-				load_build_menu_grp(config, &(ft->filecmds), GBG_FT, NULL, TRUE);
-				load_build_menu_grp(config, &(ft->ftdefcmds), GBG_NON_FT, NULL, TRUE);
-				load_build_menu_grp(config, &(ft->execcmds), GBG_EXEC, NULL, TRUE);
+				build_load_menu_grp(config, &(ft->filecmds), GBG_FT, NULL, TRUE);
+				build_load_menu_grp(config, &(ft->ftdefcmds), GBG_NON_FT, NULL, TRUE);
+				build_load_menu_grp(config, &(ft->execcmds), GBG_EXEC, NULL, TRUE);
 				setptr(ft->error_regex_string,
 						g_key_file_get_string(config, build_grp_name, "error_regex", NULL));
 				break;
 			case BCS_HOME_FT:
 				ft = (GeanyFiletype*)p;
 				if (ft==NULL)return;
-				load_build_menu_grp(config, &(ft->homefilecmds), GBG_FT, NULL, FALSE);
-				load_build_menu_grp(config, &(ft->homeexeccmds), GBG_EXEC, NULL, FALSE);
+				build_load_menu_grp(config, &(ft->homefilecmds), GBG_FT, NULL, FALSE);
+				build_load_menu_grp(config, &(ft->homeexeccmds), GBG_EXEC, NULL, FALSE);
 				setptr(ft->homeerror_regex_string,
 						g_key_file_get_string(config, build_grp_name, "error_regex", NULL));
 				break;
 			case BCS_PREF:
-				load_build_menu_grp(config, &non_ft_pref, GBG_NON_FT, NULL, FALSE);
-				load_build_menu_grp(config, &exec_pref, GBG_EXEC, NULL, FALSE);
+				build_load_menu_grp(config, &non_ft_pref, GBG_NON_FT, NULL, FALSE);
+				build_load_menu_grp(config, &exec_pref, GBG_EXEC, NULL, FALSE);
 				setptr(regex_pref, g_key_file_get_string(config, build_grp_name, "error_regex", NULL));
 				break;
 			case BCS_PROJ:
-				load_build_menu_grp(config, &non_ft_proj, GBG_NON_FT, NULL, FALSE);
-				load_build_menu_grp(config, &exec_proj, GBG_EXEC, NULL, FALSE);
+				build_load_menu_grp(config, &non_ft_proj, GBG_NON_FT, NULL, FALSE);
+				build_load_menu_grp(config, &exec_proj, GBG_EXEC, NULL, FALSE);
 				setptr(regex_proj, g_key_file_get_string(config, build_grp_name, "error_regex", NULL));
 				pj = (GeanyProject*)p;
 				if (p==NULL)return;
@@ -2141,7 +2122,7 @@
 						{
 							gchar *regkey = g_strdup_printf("%serror_regex", *ftname);
 							g_ptr_array_add(pj->build_filetypes_list, ft);
-							load_build_menu_grp(config, &(ft->projfilecmds), GBG_FT, *ftname, FALSE);
+							build_load_menu_grp(config, &(ft->projfilecmds), GBG_FT, *ftname, FALSE);
 							setptr(ft->projerror_regex_string,
 									g_key_file_get_string(config, build_grp_name, regkey, NULL));
 							g_free(regkey);
@@ -2154,9 +2135,9 @@
 				break;
 		}
 	}
-
+	
 	/* load old [build_settings] values if there is no value defined by [build-menu] */
-
+	
 	/* set GeanyBuildCommand if it doesn't already exist and there is a command */
 #define ASSIGNIF(type, id, string, value) \
 	if (value!=NULL && !type[GBO_TO_CMD(id)].exists && strlen(value)>0) { \
@@ -2167,7 +2148,7 @@
 		type[GBO_TO_CMD(id)].old = TRUE; \
 	} else \
 		g_free(value);
-
+		
 	switch(src)
 	{
 		case BCS_FT:
@@ -2214,13 +2195,13 @@
 	}
 }
 
-static gint save_build_menu_grp(GKeyFile *config, GeanyBuildCommand *src, gint grp, gchar *prefix)
+static gint build_save_menu_grp(GKeyFile *config, GeanyBuildCommand *src, gint grp, gchar *prefix)
 {
 	gint cmd, prefixlen; /* NOTE prefixlen used in macros above */
 	gchar *key;
 	gint count=0;
     enum GeanyBuildCmdEntries i;
-
+	
 	if (src==NULL)return 0;
 	prefixlen = prefix==NULL?0:strlen(prefix);
 	key = g_strconcat(prefix==NULL?"":prefix, fixedkey, NULL);
@@ -2245,7 +2226,7 @@
 			else
 			{
                 FOREACH_GEANYBUILDCMD_ENTRY(i)
-                {
+                {                    
                     set_key_fld(key, config_keys[i]);
                     g_key_file_remove_key(config, build_grp_name, key, NULL);
                 }
@@ -2268,8 +2249,8 @@
 	ForEachData *d = (ForEachData*)user_data;
 	gint i=0;
 	gchar *regkey = g_strdup_printf("%serror_regex", ft->name);
-
-	i += save_build_menu_grp(d->config, ft->projfilecmds, GBG_FT, ft->name);
+	
+	i += build_save_menu_grp(d->config, ft->projfilecmds, GBG_FT, ft->name);
 	if (ft->projerror_regex_string!=NULL && strlen(ft->projerror_regex_string)>0)
 	{
 		g_key_file_set_string(d->config, build_grp_name, regkey, ft->projerror_regex_string);
@@ -2281,20 +2262,20 @@
 	if (i>0)g_ptr_array_add(d->ft_names, ft->name);
 }
 
-void save_build_menu(GKeyFile *config, gpointer ptr, GeanyBuildSource src)
+void build_save_menu(GKeyFile *config, gpointer ptr, GeanyBuildSource src)
 {
 	GeanyFiletype 	*ft;
 	GeanyProject  	*pj;
 	ForEachData		 data;
 	gchar 			*regkey;
-
+	
 	switch(src)
 	{
 		case BCS_HOME_FT:
 			ft = (GeanyFiletype*)ptr;
 			if (ft==NULL)return;
-			save_build_menu_grp(config, ft->homefilecmds, GBG_FT, NULL);
-			save_build_menu_grp(config, ft->homeexeccmds, GBG_EXEC, NULL);
+			build_save_menu_grp(config, ft->homefilecmds, GBG_FT, NULL);
+			build_save_menu_grp(config, ft->homeexeccmds, GBG_EXEC, NULL);
 			regkey = g_strdup_printf("%serror_regex", ft->name);
 			if (ft->homeerror_regex_string!=NULL && strlen(ft->homeerror_regex_string)>0)
 				g_key_file_set_string(config, build_grp_name, regkey, ft->projerror_regex_string);
@@ -2303,8 +2284,8 @@
 			g_free(regkey);
 			break;
 		case BCS_PREF:
-			save_build_menu_grp(config, non_ft_pref, GBG_NON_FT, NULL);
-			save_build_menu_grp(config, exec_pref, GBG_EXEC, NULL);
+			build_save_menu_grp(config, non_ft_pref, GBG_NON_FT, NULL);
+			build_save_menu_grp(config, exec_pref, GBG_EXEC, NULL);
 			if (regex_pref!=NULL && strlen(regex_pref)>0)
 				g_key_file_set_string(config, build_grp_name, "error_regex", regex_pref);
 			else
@@ -2312,8 +2293,8 @@
 			break;
 		case BCS_PROJ:
 			pj = (GeanyProject*)ptr;
-			save_build_menu_grp(config, non_ft_proj, GBG_NON_FT, NULL);
-			save_build_menu_grp(config, exec_proj, GBG_EXEC, NULL);
+			build_save_menu_grp(config, non_ft_proj, GBG_NON_FT, NULL);
+			build_save_menu_grp(config, exec_proj, GBG_EXEC, NULL);
 			if (regex_proj!=NULL && strlen(regex_proj)>0)
 				g_key_file_set_string(config, build_grp_name, "error_regex", regex_proj);
 			else
@@ -2336,7 +2317,7 @@
 	}
 }
 
-void set_build_grp_count(GeanyBuildGroup grp, gint count)
+void build_set_group_count(GeanyBuildGroup grp, gint count)
 {
 	gint i, sum;
 	if (count>build_groups_count[grp])
@@ -2345,7 +2326,7 @@
 	build_items_count = sum;
 }
 
-gint get_build_group_count(GeanyBuildGroup grp)
+gint build_get_group_count(GeanyBuildGroup grp)
 {
 	return build_groups_count[grp];
 }
@@ -2354,9 +2335,9 @@
 	gchar *entries[BC_CMDENTRIES_COUNT];
 	GeanyBuildCommand **ptr;
 	gint index;
-} default_cmds[] = {
-	{ {N_("_Make"), "make", NULL}, &non_ft_def, GBO_TO_CMD(GBO_MAKE_ALL)},
-	{ {N_("Make Custom _Target"), "make ", NULL}, &non_ft_def, GBO_TO_CMD(GBO_MAKE_CUSTOM)},
+} default_cmds[] = { 
+	{ {N_("_Make"), "make", NULL}, &non_ft_def, GBO_TO_CMD(GBO_MAKE_ALL)}, 
+	{ {N_("Make Custom _Target"), "make ", NULL}, &non_ft_def, GBO_TO_CMD(GBO_MAKE_CUSTOM)}, 
 	{ {N_("Make _Object"), "make %e.o", NULL }, &non_ft_def, GBO_TO_CMD(GBO_MAKE_OBJECT)},
 	{ {N_("_Execute"), "./%e", NULL }, &exec_def, GBO_TO_CMD(GBO_EXEC)},
 	{ {NULL, NULL, NULL}, NULL, 0 }

Modified: branches/build-system/src/build.h
===================================================================
--- branches/build-system/src/build.h	2009-07-27 20:00:33 UTC (rev 4032)
+++ branches/build-system/src/build.h	2009-07-28 01:38:41 UTC (rev 4033)
@@ -28,17 +28,20 @@
 
 #define GEANY_BUILD_ERR_HIGHLIGHT_MAX 100
 
-/* Geany Known Build Commands, currently only these can have keybindings
- * Order is important (see GBO_TO_GBG, GBO_TO_CMD below) */
+/* Order is important (see GBO_TO_GBG, GBO_TO_CMD below) */
+/** Geany Known Build Commands.
+ * These commands are named after their default use.
+ * Only these commands can currently have keybindings.
+ **/
 typedef enum
 {
-	GBO_COMPILE,
-	GBO_BUILD,
-	GBO_MAKE_ALL,
-	GBO_MAKE_CUSTOM,
-	GBO_MAKE_OBJECT,
-	GBO_EXEC,
-	GBO_COUNT	/* count of how many */
+	GBO_COMPILE,		/**< default compile file */
+	GBO_BUILD,			/**< default build file */
+	GBO_MAKE_ALL,		/**< default make */
+	GBO_MAKE_CUSTOM,	/**< default make user specified target */
+	GBO_MAKE_OBJECT,	/**< default make object, make %e.o */
+	GBO_EXEC,			/**< default execute ./%e */
+	GBO_COUNT			/**< count of how many */
 } GeanyBuildType;
 
 /** Groups of Build menu items. */
@@ -53,11 +56,34 @@
 /* include the fixed widgets in an array indexed by groups */
 #define GBG_FIXED GBG_COUNT
 
-/* convert GBO_xxx to GBG_xxx and command number
- * Note they are macros so they can be used in static initialisers */
-#define GBO_TO_GBG(gbo) ((gbo)>GBO_EXEC?GBG_COUNT:((gbo)>=GBO_EXEC?GBG_EXEC:((gbo)>=GBO_MAKE_ALL?GBG_NON_FT:GBG_FT)))
-#define GBO_TO_CMD(gbo) ((gbo)>=GBO_COUNT?(gbo)-GBO_COUNT:((gbo)>=GBO_EXEC?(gbo)-GBO_EXEC:((gbo)>=GBO_MAKE_ALL?(gbo)-GBO_MAKE_ALL:(gbo))))
+/** Convert @c GeanyBuildType to @c GeanyBuildGroup .
+ * 
+ * This macro converts @c GeanyBiuildType enum values (the "known" commands)
+ * to the group they are part of.
+ * 
+ * @param gbo the @c GeanyBuildType value.
+ * 
+ * @return the @c GeanyBuildGroup group that @a gbo is in.
+ * 
+ * Note this is a macro so that it can be used in static initialisers
+ **/
+#define GBO_TO_GBG(gbo) ((gbo)>GBO_EXEC?GBG_COUNT:((gbo)>=GBO_EXEC?GBG_EXEC: \
+						 ((gbo)>=GBO_MAKE_ALL?GBG_NON_FT:GBG_FT)))
 
+/** Convert @c GeanyBuildType to command index.
+ * 
+ * This macro converts @c GeanyBuildType enum values (the "known" commands)
+ * to the index within the group.
+ * 
+ * @param gbo the @c GeanyBuildType value.
+ * 
+ * @return the index of the @a gbo command in its group.
+ * 
+ * Note this is a macro so that it can be used in static initialisers
+ **/
+#define GBO_TO_CMD(gbo) ((gbo)>=GBO_COUNT?(gbo)-GBO_COUNT:((gbo)>=GBO_EXEC?(gbo)-GBO_EXEC: \
+						 ((gbo)>=GBO_MAKE_ALL?(gbo)-GBO_MAKE_ALL:(gbo))))
+
 enum GeanyBuildFixedMenuItems
 {
 	GBF_NEXT_ERROR,
@@ -230,14 +256,14 @@
 BuildMenuItems *build_get_menu_items(gint filetype_idx);
 
 /* load and store menu configuration */
-void load_build_menu( GKeyFile *config, GeanyBuildSource dst, gpointer ptr);
+void build_load_menu( GKeyFile *config, GeanyBuildSource dst, gpointer ptr);
 
-void save_build_menu( GKeyFile *config, gpointer ptr, GeanyBuildSource src);
+void build_save_menu( GKeyFile *config, gpointer ptr, GeanyBuildSource src);
 
-void set_build_grp_count(GeanyBuildGroup grp, gint count);
+void build_set_group_count(GeanyBuildGroup grp, gint count);
 
-gint get_build_group_count(GeanyBuildGroup grp);
+gint build_get_group_count(GeanyBuildGroup grp);
 
-gchar **get_build_regex(GeanyBuildGroup grp, GeanyFiletype *ft, gint *from);
+gchar **build_get_regex(GeanyBuildGroup grp, GeanyFiletype *ft, gint *from);
 
 #endif

Modified: branches/build-system/src/filetypes.c
===================================================================
--- branches/build-system/src/filetypes.c	2009-07-27 20:00:33 UTC (rev 4032)
+++ branches/build-system/src/filetypes.c	2009-07-28 01:38:41 UTC (rev 4033)
@@ -1126,8 +1126,8 @@
 	}
 
 	/* read build settings */
-	load_build_menu( config, BCS_FT, (gpointer)ft );
-	load_build_menu( configh, BCS_HOME_FT, (gpointer)ft );
+	build_load_menu( config, BCS_FT, (gpointer)ft );
+	build_load_menu( configh, BCS_HOME_FT, (gpointer)ft );
 
 }
 
@@ -1226,7 +1226,7 @@
 		g_free(ext);
 		config_home = g_key_file_new();
 		g_key_file_load_from_file(config_home, fname, G_KEY_FILE_KEEP_COMMENTS, NULL);
-		save_build_menu(config_home, (gpointer)(filetypes[i]), BCS_HOME_FT);
+		build_save_menu(config_home, (gpointer)(filetypes[i]), BCS_HOME_FT);
 		data = g_key_file_to_data(config_home, NULL, NULL);
 		utils_write_file(fname, data);
 		g_free(data);
@@ -1346,7 +1346,7 @@
 		doc = document_get_current();
 		if(doc!=NULL)ft = doc->file_type;
 	}
-	tmp = get_build_regex(build_info.grp, ft, NULL);
+	tmp = build_get_regex(build_info.grp, ft, NULL);
 	if (tmp==NULL) return FALSE;
 	regstr = *tmp;
 #ifndef HAVE_REGCOMP

Modified: branches/build-system/src/keyfile.c
===================================================================
--- branches/build-system/src/keyfile.c	2009-07-27 20:00:33 UTC (rev 4032)
+++ branches/build-system/src/keyfile.c	2009-07-28 01:38:41 UTC (rev 4033)
@@ -407,7 +407,7 @@
 	g_key_file_set_string(config, PACKAGE, "context_action_cmd", tool_prefs.context_action_cmd);
 
 	/* build menu */
-	save_build_menu( config, NULL, BCS_PREF );
+	build_save_menu( config, NULL, BCS_PREF );
 	
 	/* printing */
 	g_key_file_set_string(config, "printing", "print_cmd", printing_prefs.external_print_cmd ? printing_prefs.external_print_cmd : "");
@@ -773,10 +773,10 @@
 	tool_prefs.context_action_cmd = utils_get_setting_string(config, PACKAGE, "context_action_cmd", "");
 
 	/* build menu */
-	set_build_grp_count( GBG_FT, utils_get_setting_integer( config, "build-menu", "number_ft_menu_items", 0 ));
-	set_build_grp_count( GBG_NON_FT, utils_get_setting_integer( config, "build-menu", "number_non_ft_menu_items", 0 ));
-	set_build_grp_count( GBG_EXEC, utils_get_setting_integer( config, "build-menu", "number_exec_menu_items", 0 ));
-	load_build_menu( config, BCS_PREF, NULL );
+	build_set_group_count( GBG_FT, utils_get_setting_integer( config, "build-menu", "number_ft_menu_items", 0 ));
+	build_set_group_count( GBG_NON_FT, utils_get_setting_integer( config, "build-menu", "number_non_ft_menu_items", 0 ));
+	build_set_group_count( GBG_EXEC, utils_get_setting_integer( config, "build-menu", "number_exec_menu_items", 0 ));
+	build_load_menu( config, BCS_PREF, NULL );
 
 	/* printing */
 	tmp_string2 = g_find_program_in_path(GEANY_DEFAULT_TOOLS_PRINTCMD);

Modified: branches/build-system/src/project.c
===================================================================
--- branches/build-system/src/project.c	2009-07-27 20:00:33 UTC (rev 4032)
+++ branches/build-system/src/project.c	2009-07-28 01:38:41 UTC (rev 4033)
@@ -86,7 +86,6 @@
 
 static gboolean update_config(const PropertyDialogElements *e);
 static void on_file_save_button_clicked(GtkButton *button, PropertyDialogElements *e);
-static void on_file_open_button_clicked(GtkButton *button, PropertyDialogElements *e);
 static gboolean load_config(const gchar *filename);
 static gboolean write_config(gboolean emit_signal);
 static void on_name_entry_changed(GtkEditable *editable, PropertyDialogElements *e);
@@ -868,35 +867,6 @@
 }
 
 
-static void on_file_open_button_clicked(GtkButton *button, PropertyDialogElements *e)
-{
-#ifdef G_OS_WIN32
-	gchar *path = win32_show_project_open_dialog(e->dialog, _("Choose Project Run Command"),
-						gtk_entry_get_text(GTK_ENTRY(e->run_cmd)), FALSE, FALSE);
-	if (path != NULL)
-	{
-		gtk_entry_set_text(GTK_ENTRY(e->run_cmd), path);
-		g_free(path);
-	}
-#else
-	GtkWidget *dialog;
-
-	/* initialise the dialog */
-	dialog = gtk_file_chooser_dialog_new(_("Choose Project Run Command"), NULL,
-					GTK_FILE_CHOOSER_ACTION_OPEN,
-					GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-					GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
-	gtk_widget_set_name(dialog, "GeanyDialog");
-	gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE);
-	gtk_window_set_skip_taskbar_hint(GTK_WINDOW(dialog), TRUE);
-	gtk_window_set_type_hint(GTK_WINDOW(dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
-	gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
-
-	run_dialog(dialog, e->run_cmd);
-#endif
-}
-
-
 /* sets the project base path and the project file name according to the project name */
 static void on_name_entry_changed(GtkEditable *editable, PropertyDialogElements *e)
 {
@@ -999,7 +969,7 @@
 	p->run_cmd = utils_get_setting_string(config, "project", "run_cmd", "");
 	p->file_patterns = g_key_file_get_string_list(config, "project", "file_patterns", NULL, NULL);
 
-	load_build_menu( config, BCS_PROJ, (gpointer)p );
+	build_load_menu( config, BCS_PROJ, (gpointer)p );
 	if (project_prefs.project_session)
 	{
 		/* save current (non-project) session (it could has been changed since program startup) */
@@ -1056,7 +1026,7 @@
 	/* store the session files into the project too */
 	if (project_prefs.project_session)
 		configuration_save_session_files(config);
-	save_build_menu( config, (gpointer)p, BCS_PROJ );
+	build_save_menu( config, (gpointer)p, BCS_PROJ );
 	if (emit_signal)
 	{
 		g_signal_emit_by_name(geany_object, "project-save", config);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Commits mailing list