SF.net SVN: geany: [1038] trunk
ntrel at users.sourceforge.net
ntrel at xxxxx
Thu Nov 30 15:42:53 UTC 2006
Revision: 1038
http://svn.sourceforge.net/geany/?rev=1038&view=rev
Author: ntrel
Date: 2006-11-30 07:42:52 -0800 (Thu, 30 Nov 2006)
Log Message:
-----------
Make all filetypes except LaTeX use the same build menu, disabling
any items that don't apply for the current document.
Move BuildMenuItems struct type to build.h.
Modified Paths:
--------------
trunk/ChangeLog
trunk/src/build.c
trunk/src/build.h
trunk/src/callbacks.c
trunk/src/dialogs.c
trunk/src/filetypes.c
trunk/src/filetypes.h
trunk/src/keybindings.c
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2006-11-30 14:40:32 UTC (rev 1037)
+++ trunk/ChangeLog 2006-11-30 15:42:52 UTC (rev 1038)
@@ -3,6 +3,11 @@
* src/main.c:
Disable open toolbutton recent files menu for now because on
GTK+2.10 packing the recent files menu twice causes warnings.
+ * src/build.c, src/build.h, src/keybindings.c, src/callbacks.c,
+ src/filetypes.c, src/filetypes.h, src/dialogs.c:
+ Make all filetypes except LaTeX use the same build menu, disabling
+ any items that don't apply for the current document.
+ Move BuildMenuItems struct type to build.h.
2006-11-29 Nick Treleaven <nick.treleaven at btinternet.com>
Modified: trunk/src/build.c
===================================================================
--- trunk/src/build.c 2006-11-30 14:40:32 UTC (rev 1037)
+++ trunk/src/build.c 2006-11-30 15:42:52 UTC (rev 1038)
@@ -62,7 +62,12 @@
LATEX_CMD_VIEW_PDF
};
+static BuildMenuItems default_menu_items =
+ {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
+static BuildMenuItems latex_menu_items =
+ {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
+
static gboolean build_iofunc(GIOChannel *ioc, GIOCondition cond, gpointer data);
static gboolean build_create_shellscript(const gint idx, const gchar *fname, const gchar *cmd,
gboolean autoclose);
@@ -82,6 +87,11 @@
{
g_free(build_info.dir);
g_free(build_info.custom_target);
+
+ if (default_menu_items.menu != NULL && GTK_IS_WIDGET(default_menu_items.menu))
+ gtk_widget_destroy(default_menu_items.menu);
+ if (latex_menu_items.menu != NULL && GTK_IS_WIDGET(latex_menu_items.menu))
+ gtk_widget_destroy(latex_menu_items.menu);
}
@@ -793,49 +803,40 @@
gtk_widget_add_accelerator(menuitem, "activate", accel_group, \
keys[(gkey)]->key, keys[(gkey)]->mods, GTK_ACCEL_VISIBLE)
-static GtkWidget *create_build_menu_gen(gint idx)
+static void create_build_menu_gen(BuildMenuItems *menu_items)
{
GtkWidget *menu, *item = NULL, *image, *separator;
GtkAccelGroup *accel_group = gtk_accel_group_new();
GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(app->window, "tooltips"));
- filetype *ft = doc_list[idx].file_type;
menu = gtk_menu_new();
#ifndef G_OS_WIN32
- if (ft->menu_items->can_compile)
- {
- // compile the code
- item = gtk_image_menu_item_new_with_mnemonic(_("_Compile"));
- gtk_widget_show(item);
- gtk_container_add(GTK_CONTAINER(menu), item);
- gtk_tooltips_set_tip(tooltips, item, _("Compiles the current file"), NULL);
- GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_COMPILE, item);
- image = gtk_image_new_from_stock("gtk-convert", GTK_ICON_SIZE_MENU);
- gtk_widget_show(image);
- gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
- g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_compile_activate), NULL);
- ft->menu_items->item_compile = item;
- }
+ // compile the code
+ item = gtk_image_menu_item_new_with_mnemonic(_("_Compile"));
+ gtk_widget_show(item);
+ gtk_container_add(GTK_CONTAINER(menu), item);
+ gtk_tooltips_set_tip(tooltips, item, _("Compiles the current file"), NULL);
+ GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_COMPILE, item);
+ image = gtk_image_new_from_stock("gtk-convert", GTK_ICON_SIZE_MENU);
+ gtk_widget_show(image);
+ gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
+ g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_compile_activate), NULL);
+ menu_items->item_compile = item;
- if (ft->menu_items->can_link)
- { // build the code
- item = gtk_image_menu_item_new_with_mnemonic(_("_Build"));
- gtk_widget_show(item);
- gtk_container_add(GTK_CONTAINER(menu), item);
- gtk_tooltips_set_tip(tooltips, item,
- _("Builds the current file (generate an executable file)"), NULL);
- GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_LINK, item);
- g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_build_activate), NULL);
- ft->menu_items->item_link = item;
- }
+ // build the code
+ item = gtk_image_menu_item_new_with_mnemonic(_("_Build"));
+ gtk_widget_show(item);
+ gtk_container_add(GTK_CONTAINER(menu), item);
+ gtk_tooltips_set_tip(tooltips, item,
+ _("Builds the current file (generate an executable file)"), NULL);
+ GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_LINK, item);
+ g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_build_activate), NULL);
+ menu_items->item_link = item;
- if (item != NULL)
- {
- item = gtk_separator_menu_item_new();
- gtk_widget_show(item);
- gtk_container_add(GTK_CONTAINER(menu), item);
- }
+ item = gtk_separator_menu_item_new();
+ gtk_widget_show(item);
+ gtk_container_add(GTK_CONTAINER(menu), item);
// build the code with make all
item = gtk_image_menu_item_new_with_mnemonic(_("_Make all"));
@@ -846,7 +847,7 @@
GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKE, item);
g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_make_activate),
GINT_TO_POINTER(GBO_MAKE_ALL));
- ft->menu_items->item_make_all = item;
+ menu_items->item_make_all = item;
// build the code with make custom
item = gtk_image_menu_item_new_with_mnemonic(_("Make custom _target"));
@@ -857,7 +858,7 @@
"make tool and the specified target"), NULL);
g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_make_activate),
GINT_TO_POINTER(GBO_MAKE_CUSTOM));
- ft->menu_items->item_make_custom = item;
+ menu_items->item_make_custom = item;
// build the code with make object
item = gtk_image_menu_item_new_with_mnemonic(_("Make _object"));
@@ -868,56 +869,51 @@
"make tool"), NULL);
g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_make_activate),
GINT_TO_POINTER(GBO_MAKE_OBJECT));
- ft->menu_items->item_make_object = item;
+ menu_items->item_make_object = item;
#endif
- if (ft->menu_items->can_exec)
- { // execute the code
- item = gtk_separator_menu_item_new();
- gtk_widget_show(item);
- gtk_container_add(GTK_CONTAINER(menu), item);
+ item = gtk_separator_menu_item_new();
+ gtk_widget_show(item);
+ gtk_container_add(GTK_CONTAINER(menu), item);
- item = gtk_image_menu_item_new_from_stock("gtk-execute", accel_group);
- gtk_widget_show(item);
- gtk_container_add(GTK_CONTAINER(menu), item);
- gtk_tooltips_set_tip(tooltips, item, _("Run or view the current file"), NULL);
- GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_RUN, item);
- g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_execute_activate), NULL);
- ft->menu_items->item_exec = item;
- }
+ // execute the code
+ item = gtk_image_menu_item_new_from_stock("gtk-execute", accel_group);
+ gtk_widget_show(item);
+ gtk_container_add(GTK_CONTAINER(menu), item);
+ gtk_tooltips_set_tip(tooltips, item, _("Run or view the current file"), NULL);
+ GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_RUN, item);
+ g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_execute_activate), NULL);
+ menu_items->item_exec = item;
+ separator = gtk_separator_menu_item_new();
+ gtk_widget_show(separator);
+ gtk_container_add(GTK_CONTAINER(menu), separator);
+ gtk_widget_set_sensitive(separator, FALSE);
+
// arguments
- if (ft->menu_items->can_compile || ft->menu_items->can_link || ft->menu_items->can_exec)
- {
- // separator
- separator = gtk_separator_menu_item_new();
- gtk_widget_show(separator);
- gtk_container_add(GTK_CONTAINER(menu), separator);
- gtk_widget_set_sensitive(separator, FALSE);
+ item = gtk_image_menu_item_new_with_mnemonic(_("_Set Includes and Arguments"));
+ gtk_widget_show(item);
+ GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_OPTIONS, item);
+ gtk_container_add(GTK_CONTAINER(menu), item);
+ gtk_tooltips_set_tip(tooltips, item,
+ _("Sets the includes and library paths for the compiler and "
+ "the program arguments for execution"), NULL);
+ image = gtk_image_new_from_stock("gtk-preferences", GTK_ICON_SIZE_MENU);
+ gtk_widget_show(image);
+ gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
+ g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_arguments_activate), NULL);
+ menu_items->item_set_args = item;
- item = gtk_image_menu_item_new_with_mnemonic(_("_Set Includes and Arguments"));
- gtk_widget_show(item);
- GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_OPTIONS, item);
- gtk_container_add(GTK_CONTAINER(menu), item);
- gtk_tooltips_set_tip(tooltips, item,
- _("Sets the includes and library paths for the compiler and "
- "the program arguments for execution"), NULL);
- image = gtk_image_new_from_stock("gtk-preferences", GTK_ICON_SIZE_MENU);
- gtk_widget_show(image);
- gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
- g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_arguments_activate), NULL);
- }
-
- return menu;
+ menu_items->menu = menu;
+ g_object_ref((gpointer)menu_items->menu); // to hold it after removing
}
-static GtkWidget *create_build_menu_tex()
+static void create_build_menu_tex(BuildMenuItems *menu_items)
{
GtkWidget *menu, *item, *image, *separator;
GtkAccelGroup *accel_group = gtk_accel_group_new();
GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(app->window, "tooltips"));
- filetype *ft = filetypes[GEANY_FILETYPES_LATEX];
menu = gtk_menu_new();
@@ -935,7 +931,7 @@
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
g_signal_connect((gpointer) item, "activate",
G_CALLBACK(on_build_tex_activate), GINT_TO_POINTER(LATEX_CMD_TO_DVI));
- ft->menu_items->item_compile = item;
+ menu_items->item_compile = item;
// PDF
item = gtk_image_menu_item_new_with_mnemonic(_("LaTeX -> PDF"));
@@ -950,7 +946,7 @@
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
g_signal_connect((gpointer) item, "activate",
G_CALLBACK(on_build_tex_activate), GINT_TO_POINTER(LATEX_CMD_TO_PDF));
- ft->menu_items->item_link = item;
+ menu_items->item_link = item;
if (item != NULL)
{
@@ -968,7 +964,7 @@
GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKE, item);
g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_make_activate),
GINT_TO_POINTER(GBO_MAKE_ALL));
- ft->menu_items->item_make_all = item;
+ menu_items->item_make_all = item;
// build the code with make custom
item = gtk_image_menu_item_new_with_mnemonic(_("Make custom _target"));
@@ -979,7 +975,7 @@
"make tool and the specified target"), NULL);
g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_make_activate),
GINT_TO_POINTER(GBO_MAKE_CUSTOM));
- ft->menu_items->item_make_custom = item;
+ menu_items->item_make_custom = item;
if (item != NULL)
{
@@ -1003,7 +999,7 @@
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
g_signal_connect((gpointer) item, "activate",
G_CALLBACK(on_build_execute_activate), GINT_TO_POINTER(LATEX_CMD_VIEW_DVI));
- ft->menu_items->item_exec = item;
+ menu_items->item_exec = item;
// PDF view
item = gtk_image_menu_item_new_with_mnemonic(_("View PDF file"));
@@ -1018,7 +1014,7 @@
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
g_signal_connect((gpointer) item, "activate",
G_CALLBACK(on_build_execute_activate), GINT_TO_POINTER(LATEX_CMD_VIEW_PDF));
- ft->menu_items->item_exec2 = item;
+ menu_items->item_exec2 = item;
// separator
separator = gtk_separator_menu_item_new();
@@ -1039,11 +1035,13 @@
gtk_widget_show(image);
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
g_signal_connect((gpointer) item, "activate",
- G_CALLBACK(on_build_arguments_activate), ft);
+ G_CALLBACK(on_build_arguments_activate), filetypes[GEANY_FILETYPES_LATEX]);
+ menu_items->item_set_args = item;
gtk_window_add_accel_group(GTK_WINDOW(app->window), accel_group);
- return menu;
+ menu_items->menu = menu;
+ g_object_ref((gpointer)menu_items->menu); // to hold it after removing
}
@@ -1059,10 +1057,13 @@
}
+/* Call this whenever build menu items need to be enabled/disabled.
+ * Uses current document (if there is one) when idx == -1 */
void build_menu_update(gint idx)
{
filetype *ft;
- gboolean have_path, can_build, can_make;
+ gboolean have_path, can_build, can_make, can_run, can_set_args;
+ BuildMenuItems *menu_items;
if (idx == -1)
idx = document_get_cur_idx();
@@ -1080,6 +1081,7 @@
gtk_widget_set_sensitive(lookup_widget(app->window, "menu_build1"), TRUE);
ft = doc_list[idx].file_type;
+ g_return_if_fail(ft != NULL);
#ifdef G_OS_WIN32
// disable compile and link under Windows until it is implemented
@@ -1087,16 +1089,11 @@
ft->menu_items->can_link = FALSE;
#endif
- if (ft->menu_items->menu == NULL)
- {
- ft->menu_items->menu = (ft->id == GEANY_FILETYPES_LATEX) ?
- create_build_menu_tex() : create_build_menu_gen(idx);
- g_object_ref((gpointer)ft->menu_items->menu); // to hold it after removing
- }
+ menu_items = build_get_menu_items(ft);
/* Note: don't remove the submenu first because it can now cause an X hang if
* the menu is already open when called from build_exit_cb(). */
gtk_menu_item_set_submenu(GTK_MENU_ITEM(lookup_widget(app->window, "menu_build1")),
- ft->menu_items->menu);
+ menu_items->menu);
have_path = (doc_list[idx].file_name != NULL);
@@ -1108,31 +1105,36 @@
else
can_build = can_make;
- if (ft->menu_items->can_compile)
- gtk_widget_set_sensitive(ft->menu_items->item_compile, can_build);
- if (ft->menu_items->can_link)
- gtk_widget_set_sensitive(ft->menu_items->item_link, can_build);
- if (ft->menu_items->item_make_all)
- gtk_widget_set_sensitive(ft->menu_items->item_make_all, can_make);
- if (ft->menu_items->item_make_custom)
- gtk_widget_set_sensitive(ft->menu_items->item_make_custom, can_make);
- if (ft->menu_items->item_make_object)
- gtk_widget_set_sensitive(ft->menu_items->item_make_object, can_make);
- if (ft->menu_items->can_exec)
- {
- gboolean can_run = have_path && run_info.pid <= 1;
+ if (menu_items->item_compile)
+ gtk_widget_set_sensitive(menu_items->item_compile, can_build && ft->actions->can_compile);
+ if (menu_items->item_link)
+ gtk_widget_set_sensitive(menu_items->item_link, can_build && ft->actions->can_link);
+ if (menu_items->item_make_all)
+ gtk_widget_set_sensitive(menu_items->item_make_all, can_make);
+ if (menu_items->item_make_custom)
+ gtk_widget_set_sensitive(menu_items->item_make_custom, can_make);
+ if (menu_items->item_make_object)
+ gtk_widget_set_sensitive(menu_items->item_make_object, can_make);
- /* can_run only applies item_exec2
- * item_exec is enabled for both run and stop commands */
- if (ft->menu_items->item_exec)
- gtk_widget_set_sensitive(ft->menu_items->item_exec, have_path);
- if (ft->menu_items->item_exec2)
- gtk_widget_set_sensitive(ft->menu_items->item_exec2, can_run);
- }
+ can_run = have_path && run_info.pid <= 1;
+ /* can_run only applies item_exec2
+ * item_exec is enabled for both run and stop commands */
+ if (menu_items->item_exec)
+ gtk_widget_set_sensitive(menu_items->item_exec, have_path && ft->actions->can_exec);
+ if (menu_items->item_exec2)
+ gtk_widget_set_sensitive(menu_items->item_exec2, can_run && ft->actions->can_exec);
- gtk_widget_set_sensitive(app->compile_button, can_build && ft->menu_items->can_compile);
- gtk_widget_set_sensitive(app->run_button, have_path && ft->menu_items->can_exec);
+ can_set_args =
+ ((ft->actions->can_compile ||
+ ft->actions->can_link ||
+ ft->actions->can_exec) &&
+ FILETYPE_ID(ft) != GEANY_FILETYPES_ALL);
+ if (menu_items->item_set_args)
+ gtk_widget_set_sensitive(menu_items->item_set_args, can_set_args);
+ gtk_widget_set_sensitive(app->compile_button, can_build && ft->actions->can_compile);
+ gtk_widget_set_sensitive(app->run_button, have_path && ft->actions->can_exec);
+
// show the stop command if a program is running, otherwise show run command
set_stop_button(run_info.pid > 1);
}
@@ -1143,7 +1145,7 @@
{
GtkStockItem sitem;
GtkWidget *menuitem =
- filetypes[run_info.file_type_id]->menu_items->item_exec;
+ build_get_menu_items(filetypes[run_info.file_type_id])->item_exec;
if (stop && utils_str_equal(
gtk_tool_button_get_stock_id(GTK_TOOL_BUTTON(app->run_button)), "gtk-stop")) return;
@@ -1192,6 +1194,27 @@
}
+// Creates the relevant build menu if necessary.
+BuildMenuItems *build_get_menu_items(const filetype *ft)
+{
+ BuildMenuItems *items;
+
+ if (FILETYPE_ID(ft) == GEANY_FILETYPES_LATEX)
+ {
+ items = &latex_menu_items;
+ if (items->menu == NULL)
+ create_build_menu_tex(items);
+ }
+ else
+ {
+ items = &default_menu_items;
+ if (items->menu == NULL)
+ create_build_menu_gen(items);
+ }
+ return items;
+}
+
+
void
on_build_compile_activate (GtkMenuItem *menuitem,
gpointer user_data)
@@ -1405,3 +1428,4 @@
g_free(first);
}
+
Modified: trunk/src/build.h
===================================================================
--- trunk/src/build.h 2006-11-30 14:40:32 UTC (rev 1037)
+++ trunk/src/build.h 2006-11-30 15:42:52 UTC (rev 1038)
@@ -24,6 +24,8 @@
#ifndef GEANY_BUILD_H
#define GEANY_BUILD_H 1
+#include "filetypes.h"
+
typedef enum // Geany Build Options
{
GBO_COMPILE,
@@ -44,7 +46,21 @@
extern BuildInfo build_info;
+typedef struct
+{
+ GtkWidget *menu;
+ GtkWidget *item_compile;
+ GtkWidget *item_link;
+ GtkWidget *item_make_all;
+ GtkWidget *item_make_custom;
+ GtkWidget *item_make_object;
+ GtkWidget *item_exec;
+ GtkWidget *item_exec2;
+ GtkWidget *item_set_args;
+} BuildMenuItems;
+
+
void build_finalize();
GPid build_make_file(gint idx, gint build_opts);
@@ -61,7 +77,9 @@
void build_menu_update(gint idx);
+BuildMenuItems *build_get_menu_items(const filetype *ft);
+
void
on_build_compile_activate (GtkMenuItem *menuitem,
gpointer user_data);
Modified: trunk/src/callbacks.c
===================================================================
--- trunk/src/callbacks.c 2006-11-30 14:40:32 UTC (rev 1037)
+++ trunk/src/callbacks.c 2006-11-30 15:42:52 UTC (rev 1038)
@@ -1685,7 +1685,7 @@
const gchar *newstr;
struct build_programs *programs = ft->programs;
- if (ft->menu_items->can_compile)
+ if (ft->actions->can_compile)
{
newstr = gtk_entry_get_text(
GTK_ENTRY(lookup_widget(GTK_WIDGET(dialog), "includes_entry1")));
@@ -1696,7 +1696,7 @@
programs->modified = TRUE;
}
}
- if (ft->menu_items->can_link)
+ if (ft->actions->can_link)
{
newstr = gtk_entry_get_text(
GTK_ENTRY(lookup_widget(GTK_WIDGET(dialog), "includes_entry2")));
@@ -1707,7 +1707,7 @@
programs->modified = TRUE;
}
}
- if (ft->menu_items->can_exec)
+ if (ft->actions->can_exec)
{
newstr = gtk_entry_get_text(
GTK_ENTRY(lookup_widget(GTK_WIDGET(dialog), "includes_entry3")));
Modified: trunk/src/dialogs.c
===================================================================
--- trunk/src/dialogs.c 2006-11-30 14:40:32 UTC (rev 1037)
+++ trunk/src/dialogs.c 2006-11-30 15:42:52 UTC (rev 1038)
@@ -716,7 +716,7 @@
gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
gtk_container_add(GTK_CONTAINER(vbox), label);
- if (ft->menu_items->can_compile || ft->menu_items->can_link || ft->menu_items->can_exec)
+ if (ft->actions->can_compile || ft->actions->can_link || ft->actions->can_exec)
{
GtkWidget *align, *frame;
gchar *frame_title = g_strconcat(ft->title, _(" commands"), NULL);
@@ -732,7 +732,7 @@
}
// include-args
- if (ft->menu_items->can_compile)
+ if (ft->actions->can_compile)
{
label = gtk_label_new(_("Compile:"));
gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
@@ -753,7 +753,7 @@
}
// lib-args
- if (ft->menu_items->can_link)
+ if (ft->actions->can_link)
{
label = gtk_label_new(_("Build:"));
gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
@@ -774,7 +774,7 @@
}
// program-args
- if (ft->menu_items->can_exec)
+ if (ft->actions->can_exec)
{
label = gtk_label_new(_("Execute:"));
gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
Modified: trunk/src/filetypes.c
===================================================================
--- trunk/src/filetypes.c 2006-11-30 14:40:32 UTC (rev 1037)
+++ trunk/src/filetypes.c 2006-11-30 15:42:52 UTC (rev 1038)
@@ -710,7 +710,7 @@
{
ftype->programs = g_new0(struct build_programs, 1);
- ftype->menu_items = g_new0(struct build_menu_items, 1);
+ ftype->actions = g_new0(struct build_actions, 1);
}
@@ -864,10 +864,7 @@
g_free(filetypes[i]->programs->run_cmd);
g_free(filetypes[i]->programs->run_cmd2);
g_free(filetypes[i]->programs);
- if (filetypes[i]->menu_items->menu != NULL &&
- GTK_IS_WIDGET(filetypes[i]->menu_items->menu))
- gtk_widget_destroy(filetypes[i]->menu_items->menu);
- g_free(filetypes[i]->menu_items);
+ g_free(filetypes[i]->actions);
g_strfreev(filetypes[i]->pattern);
g_free(filetypes[i]);
@@ -918,7 +915,7 @@
if (result != NULL)
{
filetypes[ft]->programs->compiler = result;
- filetypes[ft]->menu_items->can_compile = TRUE;
+ filetypes[ft]->actions->can_compile = TRUE;
}
result = g_key_file_get_string(configh, "build_settings", "linker", NULL);
@@ -926,7 +923,7 @@
if (result != NULL)
{
filetypes[ft]->programs->linker = result;
- filetypes[ft]->menu_items->can_link = TRUE;
+ filetypes[ft]->actions->can_link = TRUE;
}
result = g_key_file_get_string(configh, "build_settings", "run_cmd", NULL);
@@ -934,7 +931,7 @@
if (result != NULL)
{
filetypes[ft]->programs->run_cmd = result;
- filetypes[ft]->menu_items->can_exec = TRUE;
+ filetypes[ft]->actions->can_exec = TRUE;
}
result = g_key_file_get_string(configh, "build_settings", "run_cmd2", NULL);
@@ -942,7 +939,7 @@
if (result != NULL)
{
filetypes[ft]->programs->run_cmd2 = result;
- filetypes[ft]->menu_items->can_exec = TRUE;
+ filetypes[ft]->actions->can_exec = TRUE;
}
}
Modified: trunk/src/filetypes.h
===================================================================
--- trunk/src/filetypes.h 2006-11-30 14:40:32 UTC (rev 1037)
+++ trunk/src/filetypes.h 2006-11-30 15:42:52 UTC (rev 1038)
@@ -69,19 +69,11 @@
(((filetype_ptr) != NULL) ? (filetype_ptr)->id : GEANY_FILETYPES_ALL)
-struct build_menu_items
+struct build_actions
{
- GtkWidget *menu;
- GtkWidget *item_compile;
- GtkWidget *item_link;
- GtkWidget *item_exec;
- GtkWidget *item_exec2;
- GtkWidget *item_make_all;
- GtkWidget *item_make_custom;
- GtkWidget *item_make_object;
- gboolean can_compile;
- gboolean can_link;
- gboolean can_exec;
+ gboolean can_compile:1;
+ gboolean can_link:1;
+ gboolean can_exec:1;
};
struct build_programs
@@ -108,8 +100,8 @@
gchar *comment_open;
gchar *comment_close;
gboolean comment_use_indent;
- struct build_programs *programs;
- struct build_menu_items *menu_items;
+ struct build_programs *programs;
+ struct build_actions *actions;
void (*style_func_ptr) (ScintillaObject*);
} filetype;
Modified: trunk/src/keybindings.c
===================================================================
--- trunk/src/keybindings.c 2006-11-30 14:40:32 UTC (rev 1037)
+++ trunk/src/keybindings.c 2006-11-30 15:42:52 UTC (rev 1038)
@@ -75,7 +75,6 @@
static void cb_func_menu_foldall(guint key_id);
static void cb_func_menu_unfoldall(guint key_id);
static void cb_func_build_action(guint key_id);
-static void cb_func_build_options(guint key_id);
static void cb_func_reloadtaglist(guint key_id);
static void cb_func_switch_editor(guint key_id);
static void cb_func_switch_scribble(guint key_id);
@@ -172,7 +171,7 @@
GDK_F5, 0, "build_run", _("Run"));
keys[GEANY_KEYS_BUILD_RUN2] = fill(cb_func_build_action,
0, 0, "build_run2", _("Run (alternative command)"));
- keys[GEANY_KEYS_BUILD_OPTIONS] = fill(cb_func_build_options,
+ keys[GEANY_KEYS_BUILD_OPTIONS] = fill(cb_func_build_action,
0, 0, "build_options", _("Build options"));
keys[GEANY_KEYS_RELOADTAGLIST] = fill(cb_func_reloadtaglist,
GDK_r, GDK_SHIFT_MASK | GDK_CONTROL_MASK, "reloadtaglist", _("Reload symbol list"));
@@ -570,42 +569,48 @@
gint idx = document_get_cur_idx();
GtkWidget *item;
filetype *ft;
+ BuildMenuItems *menu_items;
if (! DOC_IDX_VALID(idx)) return;
ft = doc_list[idx].file_type;
- if (! ft || ! ft->menu_items) return;
+ if (! ft) return;
+ menu_items = build_get_menu_items(ft);
switch (key_id)
{
case GEANY_KEYS_BUILD_COMPILE:
- item = ft->menu_items->item_compile;
+ item = menu_items->item_compile;
break;
case GEANY_KEYS_BUILD_LINK:
- item = ft->menu_items->item_link;
+ item = menu_items->item_link;
break;
case GEANY_KEYS_BUILD_MAKE:
- item = ft->menu_items->item_make_all;
+ item = menu_items->item_make_all;
break;
case GEANY_KEYS_BUILD_MAKEOWNTARGET:
- item = ft->menu_items->item_make_custom;
+ item = menu_items->item_make_custom;
break;
case GEANY_KEYS_BUILD_MAKEOBJECT:
- item = ft->menu_items->item_make_object;
+ item = menu_items->item_make_object;
break;
case GEANY_KEYS_BUILD_RUN:
- item = ft->menu_items->item_exec;
+ item = menu_items->item_exec;
break;
case GEANY_KEYS_BUILD_RUN2:
- item = ft->menu_items->item_exec2;
+ item = menu_items->item_exec2;
break;
+ case GEANY_KEYS_BUILD_OPTIONS:
+ item = menu_items->item_set_args;
+ break;
+
default:
item = NULL;
}
@@ -613,24 +618,6 @@
gtk_menu_item_activate(GTK_MENU_ITEM(item));
}
-static void cb_func_build_options(G_GNUC_UNUSED guint key_id)
-{
- gint idx = document_get_cur_idx();
- document *doc;
- filetype *ft;
-
- if (! DOC_IDX_VALID(idx)) return;
- doc = &doc_list[idx];
- ft = doc->file_type;
- if (! ft || ! ft->menu_items) return;
- if ((ft->menu_items->can_compile ||
- ft->menu_items->can_link ||
- ft->menu_items->can_exec) &&
- (doc->file_name != NULL ||
- FILETYPE_ID(ft) != GEANY_FILETYPES_ALL))
- on_build_arguments_activate(NULL, ft);
-}
-
static void cb_func_reloadtaglist(G_GNUC_UNUSED guint key_id)
{
gint idx = document_get_cur_idx();
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