Revision: 807 http://svn.sourceforge.net/geany/?rev=807&view=rev Author: ntrel Date: 2006-09-09 07:36:15 -0700 (Sat, 09 Sep 2006)
Log Message: ----------- Move on_recent_file_activate, dialogs_create_recent_menu, dialogs_create_build_menu_gen, dialogs_create_build_menu_tex to ui_utils.c. Also make some functions static.
Modified Paths: -------------- trunk/ChangeLog trunk/src/callbacks.c trunk/src/callbacks.h trunk/src/dialogs.c trunk/src/dialogs.h trunk/src/main.c trunk/src/ui_utils.c trunk/src/ui_utils.h
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2006-09-09 14:26:54 UTC (rev 806) +++ trunk/ChangeLog 2006-09-09 14:36:15 UTC (rev 807) @@ -3,6 +3,12 @@ * src/document.c, src/ui_utils.c: Reorder the recent files list if necessary when a file is (re)opened - closes #1552178. + * src/msgwindow.c: Check msgwin visible before scrolling. + * src/ui_utils.h, src/ui_utils.c, src/callbacks.c, + src/callbacks.h, src/dialogs.c, src/dialogs.h, src/main.c: + Move on_recent_file_activate, dialogs_create_recent_menu, + dialogs_create_build_menu_gen, dialogs_create_build_menu_tex to + ui_utils.c. Also make some functions static.
2006-09-08 Nick Treleaven nick.treleaven@btinternet.com
Modified: trunk/src/callbacks.c =================================================================== --- trunk/src/callbacks.c 2006-09-09 14:26:54 UTC (rev 806) +++ trunk/src/callbacks.c 2006-09-09 14:36:15 UTC (rev 807) @@ -2310,19 +2310,6 @@
void -on_recent_file_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - gchar *locale_filename = utils_get_locale_from_utf8((gchar*) user_data); - - document_open_file(-1, locale_filename, 0, FALSE, NULL, NULL); - ui_recent_file_loaded((gchar*) user_data); - - g_free(locale_filename); -} - - -void on_file_open_check_hidden_toggled (GtkToggleButton *togglebutton, gpointer user_data) {
Modified: trunk/src/callbacks.h =================================================================== --- trunk/src/callbacks.h 2006-09-09 14:26:54 UTC (rev 806) +++ trunk/src/callbacks.h 2006-09-09 14:36:15 UTC (rev 807) @@ -467,10 +467,6 @@ gpointer user_data);
void -on_recent_file_activate (GtkMenuItem *menuitem, - gpointer user_data); - -void on_file_open_selection_changed (GtkFileChooser *filechooser, gpointer user_data);
Modified: trunk/src/dialogs.c =================================================================== --- trunk/src/dialogs.c 2006-09-09 14:26:54 UTC (rev 806) +++ trunk/src/dialogs.c 2006-09-09 14:36:15 UTC (rev 807) @@ -46,6 +46,9 @@ #include "keybindings.h"
+static GtkWidget *add_file_open_extra_widget(); + + /* This shows the file selection dialog to open a file. */ void dialogs_show_open_file () { @@ -90,7 +93,7 @@
// add checkboxes and filename entry gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(app->open_filesel), - dialogs_add_file_open_extra_widget()); + add_file_open_extra_widget()); combo = lookup_widget(app->open_filesel, "filetype_combo");
// add FileFilters(start with "All Files") @@ -149,6 +152,71 @@ }
+static GtkWidget *add_file_open_extra_widget() +{ + GtkWidget *vbox; + GtkWidget *lbox; + GtkWidget *ebox; + GtkWidget *hbox; + GtkWidget *file_entry; + GtkSizeGroup *size_group; + GtkWidget *align; + GtkWidget *check_hidden; + GtkWidget *filetype_label; + GtkWidget *filetype_combo; + GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(app->window, "tooltips")); + + vbox = gtk_vbox_new(FALSE, 6); + + align = gtk_alignment_new(1.0, 0.0, 0.0, 0.0); + check_hidden = gtk_check_button_new_with_mnemonic(_("Show _hidden files")); + gtk_widget_show(check_hidden); + gtk_container_add(GTK_CONTAINER(align), check_hidden); + gtk_box_pack_start(GTK_BOX(vbox), align, FALSE, FALSE, 0); + gtk_button_set_focus_on_click(GTK_BUTTON(check_hidden), FALSE); + + lbox = gtk_hbox_new(FALSE, 12); + file_entry = gtk_entry_new(); + gtk_widget_show(file_entry); + gtk_box_pack_start(GTK_BOX(lbox), file_entry, TRUE, TRUE, 0); + //gtk_editable_set_editable(GTK_EDITABLE(file_entry), FALSE); + gtk_entry_set_activates_default(GTK_ENTRY(file_entry), TRUE); + + // the ebox is for the tooltip, because gtk_combo_box doesn't show a tooltip for unknown reason + ebox = gtk_event_box_new(); + hbox = gtk_hbox_new(FALSE, 6); + filetype_label = gtk_label_new(_("Set filetype:")); + filetype_combo = gtk_combo_box_new_text(); + gtk_tooltips_set_tip(tooltips, ebox, + _("Explicitly defines a filetype for the file, if it would not be detected by filename extension.\nNote if you choose multiple files, they will all be opened with the chosen filetype."), NULL); + gtk_box_pack_start(GTK_BOX(hbox), filetype_label, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox), filetype_combo, FALSE, FALSE, 0); + gtk_container_add(GTK_CONTAINER(ebox), hbox); + gtk_box_pack_start(GTK_BOX(lbox), ebox, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), lbox, FALSE, FALSE, 0); + gtk_widget_show_all(vbox); + + size_group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); + gtk_size_group_add_widget(GTK_SIZE_GROUP(size_group), check_hidden); + gtk_size_group_add_widget(GTK_SIZE_GROUP(size_group), filetype_combo); + g_object_unref(G_OBJECT(size_group)); // auto destroy the size group + + g_signal_connect((gpointer) file_entry, "activate", + G_CALLBACK(on_file_open_entry_activate), NULL); + g_signal_connect((gpointer) check_hidden, "toggled", + G_CALLBACK(on_file_open_check_hidden_toggled), NULL); + + g_object_set_data_full(G_OBJECT(app->open_filesel), "file_entry", + gtk_widget_ref(file_entry), (GDestroyNotify)gtk_widget_unref); + g_object_set_data_full(G_OBJECT(app->open_filesel), "check_hidden", + gtk_widget_ref(check_hidden), (GDestroyNotify)gtk_widget_unref); + g_object_set_data_full(G_OBJECT(app->open_filesel), "filetype_combo", + gtk_widget_ref(filetype_combo), (GDestroyNotify)gtk_widget_unref); + + return vbox; +} + + /* This shows the file selection dialog to save a file. */ void dialogs_show_save_as() { @@ -332,7 +400,7 @@
/* This shows the font selection dialog to choose a font. */ -void dialogs_show_open_font(void) +void dialogs_show_open_font() { #ifdef G_OS_WIN32 win32_show_font_dialog(); @@ -367,7 +435,7 @@ }
-void dialogs_show_word_count(void) +void dialogs_show_word_count() { GtkWidget *dialog, *label; gint idx; @@ -454,256 +522,6 @@ }
-#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) - -GtkWidget *dialogs_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(); - - 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(0)); - - // build the code with make - 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(1)); - - // 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(2)); - - 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; -} - - -GtkWidget *dialogs_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")); - - menu = gtk_menu_new(); - - // 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)); - - // build the code with make all - item = gtk_image_menu_item_new_with_mnemonic(_("Build with "make"")); - 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); - if (keys[GEANY_KEYS_BUILD_MAKE]->key) - gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_MAKE]->key, - keys[GEANY_KEYS_BUILD_MAKE]->mods, GTK_ACCEL_VISIBLE); - g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_make_activate), GINT_TO_POINTER(0)); - - // build the code with make - item = gtk_image_menu_item_new_with_mnemonic(_("Build with make (custom target)")); - gtk_widget_show(item); - if (keys[GEANY_KEYS_BUILD_MAKEOWNTARGET]->key) - gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_MAKEOWNTARGET]->key, - keys[GEANY_KEYS_BUILD_MAKEOWNTARGET]->mods, GTK_ACCEL_VISIBLE); - 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(1)); - - // 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 dialogs_create_recent_menu(void) -{ - GtkWidget *recent_menu = lookup_widget(app->window, "recent_files1_menu"); - GtkWidget *tmp; - guint i; - gchar *filename; - - if (g_queue_get_length(app->recent_queue) == 0) - { - gtk_widget_set_sensitive(lookup_widget(app->window, "recent_files1"), FALSE); - return; - } - - for (i = 0; i < MIN(app->mru_length, g_queue_get_length(app->recent_queue)); - i++) - { - filename = g_queue_peek_nth(app->recent_queue, i); - tmp = gtk_menu_item_new_with_label(filename); - gtk_widget_show(tmp); - gtk_menu_shell_append(GTK_MENU_SHELL(recent_menu), tmp); - g_signal_connect((gpointer) tmp, "activate", - G_CALLBACK(on_recent_file_activate), (gpointer) filename); - } -} - - void dialogs_show_input(const gchar *title, const gchar *label_text, const gchar *default_text, GCallback cb_dialog, GCallback cb_entry) { @@ -735,7 +553,7 @@ }
-void dialogs_show_goto_line(void) +void dialogs_show_goto_line() { GtkWidget *dialog, *label, *entry;
@@ -760,7 +578,7 @@ }
-void dialogs_show_includes_arguments_tex(void) +void dialogs_show_includes_arguments_tex() { GtkWidget *dialog, *label, *entries[4]; gint idx = document_get_cur_idx(); @@ -867,7 +685,7 @@ }
-void dialogs_show_includes_arguments_gen(void) +void dialogs_show_includes_arguments_gen() { GtkWidget *dialog, *label, *entries[3]; gint idx = document_get_cur_idx(); @@ -961,71 +779,6 @@ }
-GtkWidget *dialogs_add_file_open_extra_widget(void) -{ - GtkWidget *vbox; - GtkWidget *lbox; - GtkWidget *ebox; - GtkWidget *hbox; - GtkWidget *file_entry; - GtkSizeGroup *size_group; - GtkWidget *align; - GtkWidget *check_hidden; - GtkWidget *filetype_label; - GtkWidget *filetype_combo; - GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(app->window, "tooltips")); - - vbox = gtk_vbox_new(FALSE, 6); - - align = gtk_alignment_new(1.0, 0.0, 0.0, 0.0); - check_hidden = gtk_check_button_new_with_mnemonic(_("Show _hidden files")); - gtk_widget_show(check_hidden); - gtk_container_add(GTK_CONTAINER(align), check_hidden); - gtk_box_pack_start(GTK_BOX(vbox), align, FALSE, FALSE, 0); - gtk_button_set_focus_on_click(GTK_BUTTON(check_hidden), FALSE); - - lbox = gtk_hbox_new(FALSE, 12); - file_entry = gtk_entry_new(); - gtk_widget_show(file_entry); - gtk_box_pack_start(GTK_BOX(lbox), file_entry, TRUE, TRUE, 0); - //gtk_editable_set_editable(GTK_EDITABLE(file_entry), FALSE); - gtk_entry_set_activates_default(GTK_ENTRY(file_entry), TRUE); - - // the ebox is for the tooltip, because gtk_combo_box doesn't show a tooltip for unknown reason - ebox = gtk_event_box_new(); - hbox = gtk_hbox_new(FALSE, 6); - filetype_label = gtk_label_new(_("Set filetype:")); - filetype_combo = gtk_combo_box_new_text(); - gtk_tooltips_set_tip(tooltips, ebox, - _("Explicitly defines a filetype for the file, if it would not be detected by filename extension.\nNote if you choose multiple files, they will all be opened with the chosen filetype."), NULL); - gtk_box_pack_start(GTK_BOX(hbox), filetype_label, FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(hbox), filetype_combo, FALSE, FALSE, 0); - gtk_container_add(GTK_CONTAINER(ebox), hbox); - gtk_box_pack_start(GTK_BOX(lbox), ebox, FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(vbox), lbox, FALSE, FALSE, 0); - gtk_widget_show_all(vbox); - - size_group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); - gtk_size_group_add_widget(GTK_SIZE_GROUP(size_group), check_hidden); - gtk_size_group_add_widget(GTK_SIZE_GROUP(size_group), filetype_combo); - g_object_unref(G_OBJECT(size_group)); // auto destroy the size group - - g_signal_connect((gpointer) file_entry, "activate", - G_CALLBACK(on_file_open_entry_activate), NULL); - g_signal_connect((gpointer) check_hidden, "toggled", - G_CALLBACK(on_file_open_check_hidden_toggled), NULL); - - g_object_set_data_full(G_OBJECT(app->open_filesel), "file_entry", - gtk_widget_ref(file_entry), (GDestroyNotify)gtk_widget_unref); - g_object_set_data_full(G_OBJECT(app->open_filesel), "check_hidden", - gtk_widget_ref(check_hidden), (GDestroyNotify)gtk_widget_unref); - g_object_set_data_full(G_OBJECT(app->open_filesel), "filetype_combo", - gtk_widget_ref(filetype_combo), (GDestroyNotify)gtk_widget_unref); - - return vbox; -} - - void dialogs_show_file_properties(gint idx) { GtkWidget *dialog, *label, *table, *hbox, *image, *perm_table, *check; @@ -1456,7 +1209,7 @@ }
-void dialogs_show_keyboard_shortcuts(void) +void dialogs_show_keyboard_shortcuts() { GtkWidget *dialog, *hbox, *label1, *label2, *label3, *swin; GString *text_names = g_string_sized_new(600);
Modified: trunk/src/dialogs.h =================================================================== --- trunk/src/dialogs.h 2006-09-09 14:26:54 UTC (rev 806) +++ trunk/src/dialogs.h 2006-09-09 14:36:15 UTC (rev 807) @@ -25,7 +25,7 @@ #define GEANY_DIALOGS_H 1
/* This shows the file selection dialog to open a file. */ -void dialogs_show_open_file(void); +void dialogs_show_open_file();
/* This shows the file selection dialog to save a file. */ void dialogs_show_save_as(); @@ -37,29 +37,21 @@ gboolean dialogs_show_unsaved_file(gint idx);
/* This shows the font selection dialog to choose a font. */ -void dialogs_show_open_font(void); +void dialogs_show_open_font();
-void dialogs_show_word_count(void); +void dialogs_show_word_count();
void dialogs_show_color(gchar *colour);
-GtkWidget *dialogs_create_build_menu_gen(gint idx); - -GtkWidget *dialogs_create_build_menu_tex(gint idx); - void dialogs_show_input(const gchar *title, const gchar *label_text, const gchar *default_text, GCallback cb_dialog, GCallback cb_entry);
-void dialogs_show_goto_line(void); +void dialogs_show_goto_line();
-void dialogs_show_includes_arguments_gen(void); +void dialogs_show_includes_arguments_gen();
-void dialogs_show_includes_arguments_tex(void); +void dialogs_show_includes_arguments_tex();
-void dialogs_create_recent_menu(void); - -GtkWidget *dialogs_add_file_open_extra_widget(void); - void dialogs_show_file_properties(gint idx);
gboolean dialogs_show_question(const gchar *text, ...); @@ -68,6 +60,6 @@ gboolean dialogs_show_question_full(const gchar *yes_btn, const gchar *no_btn, const gchar *extra_text, const gchar *main_text, ...);
-void dialogs_show_keyboard_shortcuts(void); +void dialogs_show_keyboard_shortcuts();
#endif
Modified: trunk/src/main.c =================================================================== --- trunk/src/main.c 2006-09-09 14:26:54 UTC (rev 806) +++ trunk/src/main.c 2006-09-09 14:36:15 UTC (rev 807) @@ -550,7 +550,7 @@ #ifdef HAVE_VTE vte_init(); #endif - dialogs_create_recent_menu(); + ui_create_recent_menu();
msgwin_status_add(_("This is Geany %s."), VERSION); if (config_dir_result != 0)
Modified: trunk/src/ui_utils.c =================================================================== --- trunk/src/ui_utils.c 2006-09-09 14:26:54 UTC (rev 806) +++ trunk/src/ui_utils.c 2006-09-09 14:36:15 UTC (rev 807) @@ -34,14 +34,20 @@ #include "utils.h" #include "callbacks.h" #include "encodings.h" -#include "dialogs.h" #include "images.c" #include "treeviews.h" +#include "keybindings.h"
-static void ui_update_recent_menu(); +static void update_recent_menu(); +static void recreate_recent_menu(); +static void recent_file_loaded(const gchar *utf8_filename); +static void +recent_file_activate_cb (GtkMenuItem *menuitem, + gpointer user_data);
-static void ui_recreate_recent_menu(); +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 @@ -651,7 +657,7 @@ { if (ft->menu_items->menu == NULL) { - ft->menu_items->menu = dialogs_create_build_menu_gen(idx); + ft->menu_items->menu = create_build_menu_gen(idx); g_object_ref((gpointer)ft->menu_items->menu); // to hold it after removing
} @@ -687,7 +693,7 @@ { if (ft->menu_items->menu == NULL) { - ft->menu_items->menu = dialogs_create_build_menu_tex(idx); + ft->menu_items->menu = create_build_menu_tex(idx); g_object_ref((gpointer)ft->menu_items->menu); // to hold it after removing } if (doc_list[idx].file_name == NULL) @@ -711,7 +717,7 @@ { if (ft->menu_items->menu == NULL) { - ft->menu_items->menu = dialogs_create_build_menu_gen(idx); + ft->menu_items->menu = create_build_menu_gen(idx); g_object_ref((gpointer)ft->menu_items->menu); // to hold it after removing } if (doc_list[idx].file_name == NULL) @@ -745,6 +751,230 @@ }
+#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(); + + 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(0)); + + // build the code with make + 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(1)); + + // 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(2)); + + 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")); + + menu = gtk_menu_new(); + + // 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)); + + // build the code with make all + item = gtk_image_menu_item_new_with_mnemonic(_("Build with "make"")); + 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); + if (keys[GEANY_KEYS_BUILD_MAKE]->key) + gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_MAKE]->key, + keys[GEANY_KEYS_BUILD_MAKE]->mods, GTK_ACCEL_VISIBLE); + g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_make_activate), GINT_TO_POINTER(0)); + + // build the code with make + item = gtk_image_menu_item_new_with_mnemonic(_("Build with make (custom target)")); + gtk_widget_show(item); + if (keys[GEANY_KEYS_BUILD_MAKEOWNTARGET]->key) + gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_MAKEOWNTARGET]->key, + keys[GEANY_KEYS_BUILD_MAKEOWNTARGET]->mods, GTK_ACCEL_VISIBLE); + 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(1)); + + // 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; @@ -934,23 +1164,79 @@ }
-void ui_add_recent_file(const gchar *filename) +void ui_create_recent_menu() { - if (g_queue_find_custom(app->recent_queue, filename, (GCompareFunc) strcmp) == NULL) + GtkWidget *recent_menu = lookup_widget(app->window, "recent_files1_menu"); + GtkWidget *tmp; + guint i; + gchar *filename; + + if (g_queue_get_length(app->recent_queue) == 0) { - g_queue_push_head(app->recent_queue, g_strdup(filename)); + gtk_widget_set_sensitive(lookup_widget(app->window, "recent_files1"), FALSE); + return; + } + + for (i = 0; i < MIN(app->mru_length, g_queue_get_length(app->recent_queue)); + i++) + { + filename = g_queue_peek_nth(app->recent_queue, i); + tmp = gtk_menu_item_new_with_label(filename); + gtk_widget_show(tmp); + gtk_menu_shell_append(GTK_MENU_SHELL(recent_menu), tmp); + g_signal_connect((gpointer) tmp, "activate", + G_CALLBACK(recent_file_activate_cb), (gpointer) filename); + } +} + + +static void +recent_file_activate_cb (GtkMenuItem *menuitem, + gpointer user_data) +{ + gchar *locale_filename = utils_get_locale_from_utf8((gchar*) user_data); + + document_open_file(-1, locale_filename, 0, FALSE, NULL, NULL); + recent_file_loaded((gchar*) user_data); + + g_free(locale_filename); +} + + +void ui_add_recent_file(const gchar *utf8_filename) +{ + if (g_queue_find_custom(app->recent_queue, utf8_filename, (GCompareFunc) strcmp) == NULL) + { + g_queue_push_head(app->recent_queue, g_strdup(utf8_filename)); if (g_queue_get_length(app->recent_queue) > app->mru_length) { g_free(g_queue_pop_tail(app->recent_queue)); } - ui_update_recent_menu(); + update_recent_menu(); } - else ui_recent_file_loaded(filename); // filename already in recent list + else recent_file_loaded(utf8_filename); // filename already in recent list }
-static void ui_update_recent_menu() +static void recent_file_loaded(const gchar *utf8_filename) { + GList *item = + g_queue_find_custom(app->recent_queue, utf8_filename, (GCompareFunc) strcmp); + gchar *data; + + g_return_if_fail(item != NULL); + // first reorder the queue + data = item->data; + g_queue_remove(app->recent_queue, data); + g_queue_push_head(app->recent_queue, data); + + // now recreate the recent files menu + recreate_recent_menu(); +} + + +static void update_recent_menu() +{ GtkWidget *recent_menu = lookup_widget(app->window, "recent_files1_menu"); GtkWidget *recent_files_item = lookup_widget(app->window, "recent_files1"); GtkWidget *tmp; @@ -984,11 +1270,11 @@ gtk_widget_show(tmp); gtk_menu_shell_prepend(GTK_MENU_SHELL(recent_menu), tmp); g_signal_connect((gpointer) tmp, "activate", - G_CALLBACK(on_recent_file_activate), (gpointer) filename); + G_CALLBACK(recent_file_activate_cb), (gpointer) filename); }
-static void ui_recreate_recent_menu() +static void recreate_recent_menu() { GList *item, *children; void *data; @@ -1003,27 +1289,10 @@ if (! GTK_IS_MENU_ITEM(data)) continue; gtk_widget_destroy(GTK_WIDGET(data)); } - dialogs_create_recent_menu(); + ui_create_recent_menu(); }
-void ui_recent_file_loaded(const gchar *filename) -{ - GList *item = - g_queue_find_custom(app->recent_queue, filename, (GCompareFunc) strcmp); - gchar *data; - - g_return_if_fail(item != NULL); - // first reorder the queue - data = item->data; - g_queue_remove(app->recent_queue, data); - g_queue_push_head(app->recent_queue, data); - - // now recreate the recent files menu - ui_recreate_recent_menu(); -} - - void ui_show_markers_margin() { gint i, idx, max = gtk_notebook_get_n_pages(GTK_NOTEBOOK(app->notebook));
Modified: trunk/src/ui_utils.h =================================================================== --- trunk/src/ui_utils.h 2006-09-09 14:26:54 UTC (rev 806) +++ trunk/src/ui_utils.h 2006-09-09 14:36:15 UTC (rev 807) @@ -85,9 +85,9 @@ GtkWidget *ui_new_image_from_inline(gint img, gboolean small_img);
-void ui_add_recent_file(const gchar *filename); +void ui_create_recent_menu();
-void ui_recent_file_loaded(const gchar *filename); +void ui_add_recent_file(const gchar *utf8_filename);
void ui_show_markers_margin();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.