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 = ®ex_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.