From e821acb863a01aaa9bf42caf4c007623b47c2cb7 Mon Sep 17 00:00:00 2001 From: Nick Treleaven Date: Wed, 18 Oct 2006 19:35:42 +0000 Subject: [PATCH] Move build menu related functions and callbacks to build.c. Renamed ui_update_build_menu -> build_menu_update. git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@902 ea778897-0a13-0410-b9d1-a72fbfd435f5 --- ChangeLog | 8 + src/build.c | 551 +++++++++++++++++++++++++++++++++++++++++++++- src/build.h | 31 ++- src/callbacks.c | 199 +---------------- src/callbacks.h | 37 ---- src/document.c | 9 +- src/keybindings.c | 7 +- src/main.c | 3 +- src/ui_utils.c | 349 ----------------------------- src/ui_utils.h | 2 - 10 files changed, 601 insertions(+), 595 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9827f04a..bca2b273 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2006-10-18 Nick Treleaven + + * src/build.c, src/build.h, src/ui_utils.h, src/ui_utils.c, + src/keybindings.c, src/callbacks.c, src/callbacks.h, src/document.c, + src/main.c: + Move build menu related functions and callbacks to build.c. + Renamed ui_update_build_menu -> build_menu_update. + 2006-10-17 Nick Treleaven * src/callbacks.c, src/filetypes.h, src/ui_utils.c: diff --git a/src/build.c b/src/build.c index 7c66e9f0..7aad43c7 100644 --- a/src/build.c +++ b/src/build.c @@ -42,6 +42,7 @@ #include "msgwindow.h" #include "document.h" #include "main.h" +#include "keybindings.h" BuildInfo build_info = {NULL, GEANY_FILETYPES_ALL, NULL}; @@ -51,6 +52,15 @@ static gboolean build_iofunc(GIOChannel *ioc, GIOCondition cond, gpointer data); static gboolean build_create_shellscript(const gint idx, const gchar *fname, const gchar *cmd); static GPid build_spawn_cmd(gint idx, gchar **cmd); +static void +on_make_target_dialog_response (GtkDialog *dialog, + gint response, + gpointer user_data); + +static void +on_make_target_entry_activate (GtkEntry *entry, + gpointer user_data); + void build_finalize() @@ -580,7 +590,7 @@ static gboolean build_iofunc(GIOChannel *ioc, GIOCondition cond, gpointer data) } -void build_exit_cb(GPid child_pid, gint status, gpointer user_data) +static void build_exit_cb(GPid child_pid, gint status, gpointer user_data) { #ifdef G_OS_UNIX gboolean failure = FALSE; @@ -657,3 +667,542 @@ static gboolean build_create_shellscript(const gint idx, const gchar *fname, con } +#define GEANY_ADD_WIDGET_ACCEL(gkey, menuitem) \ + if (keys[(gkey)]->key != 0) \ + 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) +{ + 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; + } + + 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; + } + + if (item != NULL) + { + 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")); + gtk_widget_show(item); + gtk_container_add(GTK_CONTAINER(menu), item); + gtk_tooltips_set_tip(tooltips, item, _("Builds the current file with the " + "make tool and the default target"), NULL); + 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; + + // build the code with make custom + item = gtk_image_menu_item_new_with_mnemonic(_("Make custom _target")); + gtk_widget_show(item); + GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKEOWNTARGET, item); + gtk_container_add(GTK_CONTAINER(menu), item); + gtk_tooltips_set_tip(tooltips, item, _("Builds the current file with the " + "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; + + // build the code with make object + item = gtk_image_menu_item_new_with_mnemonic(_("Make _object")); + gtk_widget_show(item); + GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKEOBJECT, item); + gtk_container_add(GTK_CONTAINER(menu), item); + gtk_tooltips_set_tip(tooltips, item, _("Compiles the current file using the " + "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; +#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_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; + } + + // 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); + } + + return menu; +} + + +static GtkWidget *create_build_menu_tex(gint idx) +{ + 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(); + +#ifndef G_OS_WIN32 + // DVI + item = gtk_image_menu_item_new_with_mnemonic(_("LaTeX -> DVI")); + gtk_widget_show(item); + gtk_container_add(GTK_CONTAINER(menu), item); + gtk_tooltips_set_tip(tooltips, item, _("Compiles the current file into a DVI file"), NULL); + if (keys[GEANY_KEYS_BUILD_COMPILE]->key) + gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_COMPILE]->key, + keys[GEANY_KEYS_BUILD_COMPILE]->mods, GTK_ACCEL_VISIBLE); + 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_tex_activate), GINT_TO_POINTER(0)); + + // PDF + item = gtk_image_menu_item_new_with_mnemonic(_("LaTeX -> PDF")); + gtk_widget_show(item); + gtk_container_add(GTK_CONTAINER(menu), item); + gtk_tooltips_set_tip(tooltips, item, _("Compiles the current file into a PDF file"), NULL); + if (keys[GEANY_KEYS_BUILD_LINK]->key) + gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_LINK]->key, + keys[GEANY_KEYS_BUILD_LINK]->mods, GTK_ACCEL_VISIBLE); + 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_tex_activate), GINT_TO_POINTER(1)); + + if (item != NULL) + { + 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")); + gtk_widget_show(item); + gtk_container_add(GTK_CONTAINER(menu), item); + gtk_tooltips_set_tip(tooltips, item, _("Builds the current file with the " + "make tool and the default target"), NULL); + 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; + + // build the code with make custom + item = gtk_image_menu_item_new_with_mnemonic(_("Make custom _target")); + gtk_widget_show(item); + GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKEOWNTARGET, item); + gtk_container_add(GTK_CONTAINER(menu), item); + gtk_tooltips_set_tip(tooltips, item, _("Builds the current file with the " + "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; + + if (item != NULL) + { + item = gtk_separator_menu_item_new(); + gtk_widget_show(item); + gtk_container_add(GTK_CONTAINER(menu), item); + } +#endif + + // DVI view + item = gtk_image_menu_item_new_with_mnemonic(_("View DVI file")); + gtk_widget_show(item); + gtk_container_add(GTK_CONTAINER(menu), item); + if (keys[GEANY_KEYS_BUILD_RUN]->key) + gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_RUN]->key, + keys[GEANY_KEYS_BUILD_RUN]->mods, GTK_ACCEL_VISIBLE); + gtk_tooltips_set_tip(tooltips, item, _("Compiles and view the current file"), NULL); + image = gtk_image_new_from_stock("gtk-find", 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_tex_activate), GINT_TO_POINTER(2)); + + // PDF view + item = gtk_image_menu_item_new_with_mnemonic(_("View PDF file")); + gtk_widget_show(item); + gtk_container_add(GTK_CONTAINER(menu), item); + if (keys[GEANY_KEYS_BUILD_RUN2]->key) + gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_RUN2]->key, + keys[GEANY_KEYS_BUILD_RUN2]->mods, GTK_ACCEL_VISIBLE); + gtk_tooltips_set_tip(tooltips, item, _("Compiles and view the current file"), NULL); + image = gtk_image_new_from_stock("gtk-find", 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_tex_activate), GINT_TO_POINTER(3)); + + // separator + separator = gtk_separator_menu_item_new(); + gtk_widget_show(separator); + gtk_container_add(GTK_CONTAINER(menu), separator); + gtk_widget_set_sensitive(separator, FALSE); + + // arguments + item = gtk_image_menu_item_new_with_mnemonic(_("Set Arguments")); + gtk_widget_show(item); + if (keys[GEANY_KEYS_BUILD_OPTIONS]->key) + gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_OPTIONS]->key, + keys[GEANY_KEYS_BUILD_OPTIONS]->mods, GTK_ACCEL_VISIBLE); + gtk_container_add(GTK_CONTAINER(menu), item); + gtk_tooltips_set_tip(tooltips, item, + _("Sets the program paths and arguments"), 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_tex_arguments_activate), NULL); + + gtk_window_add_accel_group(GTK_WINDOW(app->window), accel_group); + + return menu; +} + + +static gboolean is_c_header(const gchar *fname) +{ + gchar *ext = NULL; + + if (fname) + { + ext = strrchr(fname, '.'); + } + return (ext == NULL) ? FALSE : (*(ext + 1) == 'h'); // match *.h* +} + + +void build_menu_update(gint idx) +{ + filetype *ft; + gboolean have_path; + + if (idx == -1 || doc_list[idx].file_type == NULL) + { + gtk_widget_set_sensitive(lookup_widget(app->window, "menu_build1"), FALSE); + gtk_menu_item_remove_submenu(GTK_MENU_ITEM(lookup_widget(app->window, "menu_build1"))); + gtk_widget_set_sensitive(app->compile_button, FALSE); + gtk_widget_set_sensitive(app->run_button, FALSE); + return; + } + else + gtk_widget_set_sensitive(lookup_widget(app->window, "menu_build1"), TRUE); + + ft = doc_list[idx].file_type; + +#ifdef G_OS_WIN32 + // disable compile and link under Windows until it is implemented + ft->menu_items->can_compile = FALSE; + ft->menu_items->can_link = FALSE; +#endif + + gtk_menu_item_remove_submenu(GTK_MENU_ITEM(lookup_widget(app->window, "menu_build1"))); + + if (ft->menu_items->menu == NULL) + { + ft->menu_items->menu = (ft->id == GEANY_FILETYPES_LATEX) ? + create_build_menu_tex(idx) : create_build_menu_gen(idx); + g_object_ref((gpointer)ft->menu_items->menu); // to hold it after removing + } + gtk_menu_item_set_submenu(GTK_MENU_ITEM(lookup_widget(app->window, "menu_build1")), + ft->menu_items->menu); + + have_path = (doc_list[idx].file_name != NULL); + // update the Make items + if (ft->menu_items->item_make_all != NULL) + gtk_widget_set_sensitive(ft->menu_items->item_make_all, have_path); + if (ft->menu_items->item_make_custom != NULL) + gtk_widget_set_sensitive(ft->menu_items->item_make_custom, have_path); + if (ft->menu_items->item_make_object != NULL) + gtk_widget_set_sensitive(ft->menu_items->item_make_object, have_path); + + switch (ft->id) + { + case GEANY_FILETYPES_LATEX: + { + gtk_widget_set_sensitive(app->compile_button, have_path && ft->menu_items->can_compile); + gtk_widget_set_sensitive(app->run_button, have_path && ft->menu_items->can_exec); + break; + } + case GEANY_FILETYPES_C: // intended fallthrough, C and C++ behave equal + case GEANY_FILETYPES_CPP: + { + if (ft->menu_items->can_exec) + gtk_widget_set_sensitive(ft->menu_items->item_exec, have_path); + gtk_widget_set_sensitive(app->run_button, have_path && ft->menu_items->can_exec); + + // compile and link are disabled for header files + have_path = have_path && ! is_c_header(doc_list[idx].file_name); + gtk_widget_set_sensitive(app->compile_button, have_path && ft->menu_items->can_compile); + if (ft->menu_items->can_compile) + gtk_widget_set_sensitive(ft->menu_items->item_compile, have_path); + if (ft->menu_items->can_link) + gtk_widget_set_sensitive(ft->menu_items->item_link, have_path); + break; + } + default: + { + gtk_widget_set_sensitive(app->compile_button, have_path && ft->menu_items->can_compile); + gtk_widget_set_sensitive(app->run_button, have_path && ft->menu_items->can_exec); + if (ft->menu_items->can_compile) + gtk_widget_set_sensitive(ft->menu_items->item_compile, have_path); + if (ft->menu_items->can_link) + gtk_widget_set_sensitive(ft->menu_items->item_link, have_path); + if (ft->menu_items->can_exec) + gtk_widget_set_sensitive(ft->menu_items->item_exec, have_path); + } + } +} + + +void +on_build_compile_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + gint idx = document_get_cur_idx(); + GPid child_pid = (GPid) 0; + + if (doc_list[idx].changed) document_save_file(idx, FALSE); + + if (doc_list[idx].file_type->id == GEANY_FILETYPES_LATEX) + child_pid = build_compile_tex_file(idx, 0); + else + child_pid = build_compile_file(idx); + + if (child_pid != (GPid) 0) + { + gtk_widget_set_sensitive(app->compile_button, FALSE); + g_child_watch_add(child_pid, build_exit_cb, NULL); + } +} + + +void +on_build_tex_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + gint idx = document_get_cur_idx(); + GPid child_pid = (GPid) 0; + + if (doc_list[idx].changed) document_save_file(idx, FALSE); + + switch (GPOINTER_TO_INT(user_data)) + { + case 0: child_pid = build_compile_tex_file(idx, 0); break; + case 1: child_pid = build_compile_tex_file(idx, 1); break; + case 2: child_pid = build_view_tex_file(idx, 0); break; + case 3: child_pid = build_view_tex_file(idx, 1); break; + } + + if (GPOINTER_TO_INT(user_data) <= 1 && child_pid != (GPid) 0) + { + gtk_widget_set_sensitive(app->compile_button, FALSE); + g_child_watch_add(child_pid, build_exit_cb, NULL); + } +} + + +void +on_build_build_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + gint idx = document_get_cur_idx(); + GPid child_pid = (GPid) 0; + + if (doc_list[idx].changed) document_save_file(idx, FALSE); + + if (doc_list[idx].file_type->id == GEANY_FILETYPES_LATEX) + child_pid = build_compile_tex_file(idx, 1); + else + child_pid = build_link_file(idx); + + if (child_pid != (GPid) 0) + { + gtk_widget_set_sensitive(app->compile_button, FALSE); + g_child_watch_add(child_pid, build_exit_cb, NULL); + } +} + + +void +on_build_make_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + gint idx = document_get_cur_idx(); + gint build_opts = GPOINTER_TO_INT(user_data); + + g_return_if_fail(DOC_IDX_VALID(idx) && doc_list[idx].file_name != NULL); + + switch (build_opts) + { + case GBO_MAKE_CUSTOM: + { + dialogs_show_input(_("Enter custom options for the make tool"), + _("Enter custom options here, all entered text is passed to the make command."), + build_info.custom_target, + G_CALLBACK(on_make_target_dialog_response), + G_CALLBACK(on_make_target_entry_activate)); + break; + } + + case GBO_MAKE_OBJECT: + // fall through + case GBO_MAKE_ALL: + { + GPid child_pid; + + if (doc_list[idx].changed) document_save_file(idx, FALSE); + + child_pid = build_make_file(idx, build_opts); + if (child_pid != (GPid) 0) + { + gtk_widget_set_sensitive(app->compile_button, FALSE); + g_child_watch_add(child_pid, build_exit_cb, NULL); + } + } + } +} + + +void +on_build_execute_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + gint idx = document_get_cur_idx(); + + if (doc_list[idx].file_type->id == GEANY_FILETYPES_LATEX && user_data != NULL) + { + if (build_view_tex_file(idx, GPOINTER_TO_INT(user_data)) == (GPid) 0) + { + msgwin_status_add(_("Failed to execute the view program")); + } + } + else if (doc_list[idx].file_type->id == GEANY_FILETYPES_HTML) + { + gchar *uri = g_strconcat("file:///", g_path_skip_root(doc_list[idx].file_name), NULL); + utils_start_browser(uri); + g_free(uri); + } + else + { + // save the file only if the run command uses it + if (doc_list[idx].changed && + strstr(doc_list[idx].file_type->programs->run_cmd, "%f") != NULL) + document_save_file(idx, FALSE); + if (build_run_cmd(idx) == (GPid) 0) + { +#ifndef G_OS_WIN32 // on Windows there is no PID returned + msgwin_status_add(_("Failed to execute the terminal program")); +#endif + } + } + //gtk_widget_grab_focus(GTK_WIDGET(doc_list[idx].sci)); +} + + +void +on_build_arguments_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + dialogs_show_includes_arguments_gen(); +} + + +void +on_build_tex_arguments_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + dialogs_show_includes_arguments_tex(); +} + + +static void +on_make_target_dialog_response (GtkDialog *dialog, + gint response, + gpointer user_data) +{ + if (response == GTK_RESPONSE_ACCEPT) + { + gint idx = document_get_cur_idx(); + GPid child_pid; + + if (doc_list[idx].changed) document_save_file(idx, FALSE); + + g_free(build_info.custom_target); + build_info.custom_target = g_strdup(gtk_entry_get_text(GTK_ENTRY(user_data))); + + child_pid = build_make_file(idx, GBO_MAKE_CUSTOM); + if (child_pid != (GPid) 0) + { + gtk_widget_set_sensitive(app->compile_button, FALSE); + g_child_watch_add(child_pid, build_exit_cb, NULL); + } + } + gtk_widget_destroy(GTK_WIDGET(dialog)); +} + + +static void +on_make_target_entry_activate (GtkEntry *entry, + gpointer user_data) +{ + on_make_target_dialog_response(GTK_DIALOG(user_data), GTK_RESPONSE_ACCEPT, entry); +} + + diff --git a/src/build.h b/src/build.h index f4eb2a8e..62a1b7d0 100644 --- a/src/build.h +++ b/src/build.h @@ -55,6 +55,35 @@ GPid build_view_tex_file(gint idx, gint mode); GPid build_run_cmd(gint idx); -void build_exit_cb (GPid child_pid, gint status, gpointer user_data); +void build_menu_update(gint idx); + + +void +on_build_compile_activate (GtkMenuItem *menuitem, + gpointer user_data); + +void +on_build_tex_activate (GtkMenuItem *menuitem, + gpointer user_data); + +void +on_build_build_activate (GtkMenuItem *menuitem, + gpointer user_data); + +void +on_build_make_activate (GtkMenuItem *menuitem, + gpointer user_data); + +void +on_build_execute_activate (GtkMenuItem *menuitem, + gpointer user_data); + +void +on_build_arguments_activate (GtkMenuItem *menuitem, + gpointer user_data); + +void +on_build_tex_arguments_activate (GtkMenuItem *menuitem, + gpointer user_data); #endif diff --git a/src/callbacks.c b/src/callbacks.c index 09fd7a65..bb31c450 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -761,7 +761,7 @@ on_notebook1_switch_page (GtkNotebook *notebook, document_set_text_changed(idx); ui_document_show_hide(idx); // update the document menu - ui_update_build_menu(idx); + build_menu_update(idx); ui_update_statusbar(idx, -1); ui_set_window_title(idx); ui_update_tag_list(idx, FALSE); @@ -921,7 +921,7 @@ on_file_save_dialog_response (GtkDialog *dialog, utils_replace_filename(idx); document_save_file(idx, TRUE); - ui_update_build_menu(idx); + build_menu_update(idx); // finally add current file to recent files menu ui_add_recent_file(doc_list[idx].file_name); @@ -1547,201 +1547,6 @@ on_compile_button_clicked (GtkToolButton *toolbutton, } -void -on_build_compile_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - gint idx = document_get_cur_idx(); - GPid child_pid = (GPid) 0; - - if (doc_list[idx].changed) document_save_file(idx, FALSE); - - if (doc_list[idx].file_type->id == GEANY_FILETYPES_LATEX) - child_pid = build_compile_tex_file(idx, 0); - else - child_pid = build_compile_file(idx); - - if (child_pid != (GPid) 0) - { - gtk_widget_set_sensitive(app->compile_button, FALSE); - g_child_watch_add(child_pid, build_exit_cb, NULL); - } -} - - -void -on_build_tex_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - gint idx = document_get_cur_idx(); - GPid child_pid = (GPid) 0; - - if (doc_list[idx].changed) document_save_file(idx, FALSE); - - switch (GPOINTER_TO_INT(user_data)) - { - case 0: child_pid = build_compile_tex_file(idx, 0); break; - case 1: child_pid = build_compile_tex_file(idx, 1); break; - case 2: child_pid = build_view_tex_file(idx, 0); break; - case 3: child_pid = build_view_tex_file(idx, 1); break; - } - - if (GPOINTER_TO_INT(user_data) <= 1 && child_pid != (GPid) 0) - { - gtk_widget_set_sensitive(app->compile_button, FALSE); - g_child_watch_add(child_pid, build_exit_cb, NULL); - } -} - - -void -on_build_build_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - gint idx = document_get_cur_idx(); - GPid child_pid = (GPid) 0; - - if (doc_list[idx].changed) document_save_file(idx, FALSE); - - if (doc_list[idx].file_type->id == GEANY_FILETYPES_LATEX) - child_pid = build_compile_tex_file(idx, 1); - else - child_pid = build_link_file(idx); - - if (child_pid != (GPid) 0) - { - gtk_widget_set_sensitive(app->compile_button, FALSE); - g_child_watch_add(child_pid, build_exit_cb, NULL); - } -} - - -void -on_build_make_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - gint idx = document_get_cur_idx(); - gint build_opts = GPOINTER_TO_INT(user_data); - - g_return_if_fail(DOC_IDX_VALID(idx) && doc_list[idx].file_name != NULL); - - switch (build_opts) - { - case GBO_MAKE_CUSTOM: - { - dialogs_show_input(_("Enter custom options for the make tool"), - _("Enter custom options here, all entered text is passed to the make command."), - build_info.custom_target, - G_CALLBACK(on_make_target_dialog_response), - G_CALLBACK(on_make_target_entry_activate)); - break; - } - - case GBO_MAKE_OBJECT: - // fall through - case GBO_MAKE_ALL: - { - GPid child_pid; - - if (doc_list[idx].changed) document_save_file(idx, FALSE); - - child_pid = build_make_file(idx, build_opts); - if (child_pid != (GPid) 0) - { - gtk_widget_set_sensitive(app->compile_button, FALSE); - g_child_watch_add(child_pid, build_exit_cb, NULL); - } - } - } -} - - -void -on_build_execute_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - gint idx = document_get_cur_idx(); - - if (doc_list[idx].file_type->id == GEANY_FILETYPES_LATEX && user_data != NULL) - { - if (build_view_tex_file(idx, GPOINTER_TO_INT(user_data)) == (GPid) 0) - { - msgwin_status_add(_("Failed to execute the view program")); - } - } - else if (doc_list[idx].file_type->id == GEANY_FILETYPES_HTML) - { - gchar *uri = g_strconcat("file:///", g_path_skip_root(doc_list[idx].file_name), NULL); - utils_start_browser(uri); - g_free(uri); - } - else - { - // save the file only if the run command uses it - if (doc_list[idx].changed && - strstr(doc_list[idx].file_type->programs->run_cmd, "%f") != NULL) - document_save_file(idx, FALSE); - if (build_run_cmd(idx) == (GPid) 0) - { -#ifndef G_OS_WIN32 // on Windows there is no PID returned - msgwin_status_add(_("Failed to execute the terminal program")); -#endif - } - } - //gtk_widget_grab_focus(GTK_WIDGET(doc_list[idx].sci)); -} - - -void -on_build_arguments_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - dialogs_show_includes_arguments_gen(); -} - - -void -on_build_tex_arguments_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - dialogs_show_includes_arguments_tex(); -} - - -void -on_make_target_dialog_response (GtkDialog *dialog, - gint response, - gpointer user_data) -{ - if (response == GTK_RESPONSE_ACCEPT) - { - gint idx = document_get_cur_idx(); - GPid child_pid; - - if (doc_list[idx].changed) document_save_file(idx, FALSE); - - g_free(build_info.custom_target); - build_info.custom_target = g_strdup(gtk_entry_get_text(GTK_ENTRY(user_data))); - - child_pid = build_make_file(idx, GBO_MAKE_CUSTOM); - if (child_pid != (GPid) 0) - { - gtk_widget_set_sensitive(app->compile_button, FALSE); - g_child_watch_add(child_pid, build_exit_cb, NULL); - } - } - gtk_widget_destroy(GTK_WIDGET(dialog)); -} - - -void -on_make_target_entry_activate (GtkEntry *entry, - gpointer user_data) -{ - on_make_target_dialog_response(GTK_DIALOG(user_data), GTK_RESPONSE_ACCEPT, entry); -} - - void on_find1_activate (GtkMenuItem *menuitem, gpointer user_data) diff --git a/src/callbacks.h b/src/callbacks.h index be0aadc8..ca5c1653 100644 --- a/src/callbacks.h +++ b/src/callbacks.h @@ -319,43 +319,6 @@ void on_show_color_chooser1_activate (GtkMenuItem *menuitem, gpointer user_data); -void -on_build_compile_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_build_tex_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_build_build_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_build_make_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_build_execute_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_build_arguments_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_build_tex_arguments_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void -on_make_target_dialog_response (GtkDialog *dialog, - gint response, - gpointer user_data); - -void -on_make_target_entry_activate (GtkEntry *entry, - gpointer user_data); - void on_find1_activate (GtkMenuItem *menuitem, gpointer user_data); diff --git a/src/document.c b/src/document.c index d2ab0782..eed3d48f 100644 --- a/src/document.c +++ b/src/document.c @@ -57,6 +57,7 @@ #include "notebook.h" #include "main.h" #include "vte.h" +#include "build.h" /* dynamic array of document elements to hold all information of the notebook tabs */ @@ -373,7 +374,7 @@ gboolean document_remove(guint page_num) ui_set_window_title(-1); ui_save_buttons_toggle(FALSE); ui_close_buttons_toggle(); - ui_update_build_menu(-1); + build_menu_update(-1); } } else geany_debug("Error: idx: %d page_num: %d", idx, page_num); @@ -409,7 +410,7 @@ void document_new_file(filetype *ft) document_set_filetype(idx, ft); // also clears taglist if (ft == NULL) filetypes[GEANY_FILETYPES_ALL]->style_func_ptr(doc_list[idx].sci); ui_set_window_title(idx); - ui_update_build_menu(idx); + build_menu_update(idx); doc_list[idx].mtime = time(NULL); doc_list[idx].changed = FALSE; document_set_text_changed(idx); @@ -676,7 +677,7 @@ int document_open_file(gint idx, const gchar *filename, gint pos, gboolean reado sci_set_readonly(doc_list[idx].sci, readonly); document_set_filetype(idx, use_ft); // also sets taglist - ui_update_build_menu(idx); + build_menu_update(idx); // "the" SCI signal (connect after initial setup(i.e. adding text)) g_signal_connect((GtkWidget*) doc_list[idx].sci, "sci-notify", @@ -1208,7 +1209,7 @@ void document_set_filetype(gint idx, filetype *type) } } sci_colourise(doc_list[idx].sci, 0, -1); - ui_update_build_menu(idx); + build_menu_update(idx); } diff --git a/src/keybindings.c b/src/keybindings.c index 9717966f..a3a20bb8 100644 --- a/src/keybindings.c +++ b/src/keybindings.c @@ -34,6 +34,7 @@ #include "msgwindow.h" #include "sci_cb.h" #include "sciwrappers.h" +#include "build.h" // include vte.h on non-Win32 systems, else define fake vte_init #ifdef HAVE_VTE # include "vte.h" @@ -572,7 +573,7 @@ static void cb_func_build_make(void) gint idx = document_get_cur_idx(); if (idx == -1 || ! doc_list[idx].is_valid) return; if (doc_list[idx].file_name != NULL) - on_build_make_activate(NULL, GINT_TO_POINTER(0)); + on_build_make_activate(NULL, GINT_TO_POINTER(GBO_MAKE_ALL)); } static void cb_func_build_makeowntarget(void) @@ -580,7 +581,7 @@ static void cb_func_build_makeowntarget(void) gint idx = document_get_cur_idx(); if (idx == -1 || ! doc_list[idx].is_valid) return; if (doc_list[idx].file_name != NULL) - on_build_make_activate(NULL, GINT_TO_POINTER(1)); + on_build_make_activate(NULL, GINT_TO_POINTER(GBO_MAKE_CUSTOM)); } static void cb_func_build_makeobject(void) @@ -588,7 +589,7 @@ static void cb_func_build_makeobject(void) gint idx = document_get_cur_idx(); if (idx == -1 || ! doc_list[idx].is_valid) return; if (doc_list[idx].file_name != NULL) - on_build_make_activate(NULL, GINT_TO_POINTER(2)); + on_build_make_activate(NULL, GINT_TO_POINTER(GBO_MAKE_OBJECT)); } static void cb_func_build_run(void) diff --git a/src/main.c b/src/main.c index e427fabc..9d3f86f6 100644 --- a/src/main.c +++ b/src/main.c @@ -50,6 +50,7 @@ #include "keybindings.h" #include "sci_cb.h" #include "search.h" +#include "build.h" #ifdef HAVE_SOCKET # include "socket.h" @@ -597,7 +598,7 @@ gint main(gint argc, gchar **argv) idx = document_get_cur_idx(); gtk_widget_grab_focus(GTK_WIDGET(doc_list[idx].sci)); gtk_tree_model_foreach(GTK_TREE_MODEL(tv.store_openfiles), treeviews_find_node, GINT_TO_POINTER(idx)); - ui_update_build_menu(idx); + build_menu_update(idx); ui_update_tag_list(idx, FALSE); #ifdef G_OS_WIN32 diff --git a/src/ui_utils.c b/src/ui_utils.c index 3b0a7294..d938a58c 100644 --- a/src/ui_utils.c +++ b/src/ui_utils.c @@ -36,8 +36,6 @@ #include "encodings.h" #include "images.c" #include "treeviews.h" -#include "keybindings.h" -#include "build.h" static gchar *menu_item_get_text(GtkMenuItem *menu_item); @@ -48,9 +46,6 @@ static void recent_file_activate_cb (GtkMenuItem *menuitem, gpointer user_data); -static GtkWidget *create_build_menu_tex(gint idx); -static GtkWidget *create_build_menu_gen(gint idx); - /* allow_override is TRUE if text can be ignored when another message has been set * that didn't use allow_override and has not timed out. */ @@ -624,350 +619,6 @@ void ui_widget_show_hide(GtkWidget *widget, gboolean show) } -static gboolean is_c_header(const gchar *fname) -{ - gchar *ext = NULL; - - if (fname) - { - ext = strrchr(fname, '.'); - } - return (ext == NULL) ? FALSE : (*(ext + 1) == 'h'); // match *.h* -} - - -void ui_update_build_menu(gint idx) -{ - filetype *ft; - gboolean have_path; - - if (idx == -1 || doc_list[idx].file_type == NULL) - { - gtk_widget_set_sensitive(lookup_widget(app->window, "menu_build1"), FALSE); - gtk_menu_item_remove_submenu(GTK_MENU_ITEM(lookup_widget(app->window, "menu_build1"))); - gtk_widget_set_sensitive(app->compile_button, FALSE); - gtk_widget_set_sensitive(app->run_button, FALSE); - return; - } - else - gtk_widget_set_sensitive(lookup_widget(app->window, "menu_build1"), TRUE); - - ft = doc_list[idx].file_type; - -#ifdef G_OS_WIN32 - // disable compile and link under Windows until it is implemented - ft->menu_items->can_compile = FALSE; - ft->menu_items->can_link = FALSE; -#endif - - gtk_menu_item_remove_submenu(GTK_MENU_ITEM(lookup_widget(app->window, "menu_build1"))); - - if (ft->menu_items->menu == NULL) - { - ft->menu_items->menu = (ft->id == GEANY_FILETYPES_LATEX) ? - create_build_menu_tex(idx) : create_build_menu_gen(idx); - g_object_ref((gpointer)ft->menu_items->menu); // to hold it after removing - } - gtk_menu_item_set_submenu(GTK_MENU_ITEM(lookup_widget(app->window, "menu_build1")), - ft->menu_items->menu); - - have_path = (doc_list[idx].file_name != NULL); - // update the Make items - if (ft->menu_items->item_make_all != NULL) - gtk_widget_set_sensitive(ft->menu_items->item_make_all, have_path); - if (ft->menu_items->item_make_custom != NULL) - gtk_widget_set_sensitive(ft->menu_items->item_make_custom, have_path); - if (ft->menu_items->item_make_object != NULL) - gtk_widget_set_sensitive(ft->menu_items->item_make_object, have_path); - - switch (ft->id) - { - case GEANY_FILETYPES_LATEX: - { - gtk_widget_set_sensitive(app->compile_button, have_path && ft->menu_items->can_compile); - gtk_widget_set_sensitive(app->run_button, have_path && ft->menu_items->can_exec); - break; - } - case GEANY_FILETYPES_C: // intended fallthrough, C and C++ behave equal - case GEANY_FILETYPES_CPP: - { - if (ft->menu_items->can_exec) - gtk_widget_set_sensitive(ft->menu_items->item_exec, have_path); - gtk_widget_set_sensitive(app->run_button, have_path && ft->menu_items->can_exec); - - // compile and link are disabled for header files - have_path = have_path && ! is_c_header(doc_list[idx].file_name); - gtk_widget_set_sensitive(app->compile_button, have_path && ft->menu_items->can_compile); - if (ft->menu_items->can_compile) - gtk_widget_set_sensitive(ft->menu_items->item_compile, have_path); - if (ft->menu_items->can_link) - gtk_widget_set_sensitive(ft->menu_items->item_link, have_path); - break; - } - default: - { - gtk_widget_set_sensitive(app->compile_button, have_path && ft->menu_items->can_compile); - gtk_widget_set_sensitive(app->run_button, have_path && ft->menu_items->can_exec); - if (ft->menu_items->can_compile) - gtk_widget_set_sensitive(ft->menu_items->item_compile, have_path); - if (ft->menu_items->can_link) - gtk_widget_set_sensitive(ft->menu_items->item_link, have_path); - if (ft->menu_items->can_exec) - gtk_widget_set_sensitive(ft->menu_items->item_exec, have_path); - } - } -} - - -#define GEANY_ADD_WIDGET_ACCEL(gkey, menuitem) \ - if (keys[(gkey)]->key != 0) \ - 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) -{ - 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; - } - - 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; - } - - if (item != NULL) - { - 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")); - gtk_widget_show(item); - gtk_container_add(GTK_CONTAINER(menu), item); - gtk_tooltips_set_tip(tooltips, item, _("Builds the current file with the " - "make tool and the default target"), NULL); - 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; - - // build the code with make custom - item = gtk_image_menu_item_new_with_mnemonic(_("Make custom _target")); - gtk_widget_show(item); - GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKEOWNTARGET, item); - gtk_container_add(GTK_CONTAINER(menu), item); - gtk_tooltips_set_tip(tooltips, item, _("Builds the current file with the " - "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; - - // build the code with make object - item = gtk_image_menu_item_new_with_mnemonic(_("Make _object")); - gtk_widget_show(item); - GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKEOBJECT, item); - gtk_container_add(GTK_CONTAINER(menu), item); - gtk_tooltips_set_tip(tooltips, item, _("Compiles the current file using the " - "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; -#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_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; - } - - // 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); - } - - return menu; -} - - -static GtkWidget *create_build_menu_tex(gint idx) -{ - 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(); - -#ifndef G_OS_WIN32 - // DVI - item = gtk_image_menu_item_new_with_mnemonic(_("LaTeX -> DVI")); - gtk_widget_show(item); - gtk_container_add(GTK_CONTAINER(menu), item); - gtk_tooltips_set_tip(tooltips, item, _("Compiles the current file into a DVI file"), NULL); - if (keys[GEANY_KEYS_BUILD_COMPILE]->key) - gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_COMPILE]->key, - keys[GEANY_KEYS_BUILD_COMPILE]->mods, GTK_ACCEL_VISIBLE); - 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_tex_activate), GINT_TO_POINTER(0)); - - // PDF - item = gtk_image_menu_item_new_with_mnemonic(_("LaTeX -> PDF")); - gtk_widget_show(item); - gtk_container_add(GTK_CONTAINER(menu), item); - gtk_tooltips_set_tip(tooltips, item, _("Compiles the current file into a PDF file"), NULL); - if (keys[GEANY_KEYS_BUILD_LINK]->key) - gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_LINK]->key, - keys[GEANY_KEYS_BUILD_LINK]->mods, GTK_ACCEL_VISIBLE); - 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_tex_activate), GINT_TO_POINTER(1)); - - if (item != NULL) - { - 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")); - gtk_widget_show(item); - gtk_container_add(GTK_CONTAINER(menu), item); - gtk_tooltips_set_tip(tooltips, item, _("Builds the current file with the " - "make tool and the default target"), NULL); - 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; - - // build the code with make custom - item = gtk_image_menu_item_new_with_mnemonic(_("Make custom _target")); - gtk_widget_show(item); - GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKEOWNTARGET, item); - gtk_container_add(GTK_CONTAINER(menu), item); - gtk_tooltips_set_tip(tooltips, item, _("Builds the current file with the " - "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; - - if (item != NULL) - { - item = gtk_separator_menu_item_new(); - gtk_widget_show(item); - gtk_container_add(GTK_CONTAINER(menu), item); - } -#endif - - // DVI view - item = gtk_image_menu_item_new_with_mnemonic(_("View DVI file")); - gtk_widget_show(item); - gtk_container_add(GTK_CONTAINER(menu), item); - if (keys[GEANY_KEYS_BUILD_RUN]->key) - gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_RUN]->key, - keys[GEANY_KEYS_BUILD_RUN]->mods, GTK_ACCEL_VISIBLE); - gtk_tooltips_set_tip(tooltips, item, _("Compiles and view the current file"), NULL); - image = gtk_image_new_from_stock("gtk-find", 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_tex_activate), GINT_TO_POINTER(2)); - - // PDF view - item = gtk_image_menu_item_new_with_mnemonic(_("View PDF file")); - gtk_widget_show(item); - gtk_container_add(GTK_CONTAINER(menu), item); - if (keys[GEANY_KEYS_BUILD_RUN2]->key) - gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_RUN2]->key, - keys[GEANY_KEYS_BUILD_RUN2]->mods, GTK_ACCEL_VISIBLE); - gtk_tooltips_set_tip(tooltips, item, _("Compiles and view the current file"), NULL); - image = gtk_image_new_from_stock("gtk-find", 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_tex_activate), GINT_TO_POINTER(3)); - - // separator - separator = gtk_separator_menu_item_new(); - gtk_widget_show(separator); - gtk_container_add(GTK_CONTAINER(menu), separator); - gtk_widget_set_sensitive(separator, FALSE); - - // arguments - item = gtk_image_menu_item_new_with_mnemonic(_("Set Arguments")); - gtk_widget_show(item); - if (keys[GEANY_KEYS_BUILD_OPTIONS]->key) - gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_OPTIONS]->key, - keys[GEANY_KEYS_BUILD_OPTIONS]->mods, GTK_ACCEL_VISIBLE); - gtk_container_add(GTK_CONTAINER(menu), item); - gtk_tooltips_set_tip(tooltips, item, - _("Sets the program paths and arguments"), 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_tex_arguments_activate), NULL); - - gtk_window_add_accel_group(GTK_WINDOW(app->window), accel_group); - - return menu; -} - - void ui_treeviews_show_hide(gboolean force) { GtkWidget *widget; diff --git a/src/ui_utils.h b/src/ui_utils.h index 1af2a55a..7e4fdd56 100644 --- a/src/ui_utils.h +++ b/src/ui_utils.h @@ -68,8 +68,6 @@ void ui_close_buttons_toggle(); void ui_widget_show_hide(GtkWidget *widget, gboolean show); -void ui_update_build_menu(gint); - void ui_treeviews_show_hide(gboolean force); void ui_document_show_hide(gint idx);