Revision: 1041 http://svn.sourceforge.net/geany/?rev=1041&view=rev Author: eht16 Date: 2006-12-01 10:44:35 -0800 (Fri, 01 Dec 2006)
Log Message: ----------- Removed invisible place holder menu item in recent files menu. Create separate sub menu for the recent files menu in the toolbar to prevent GTK warnings when using GTK >= 2.10.
Modified Paths: -------------- trunk/ChangeLog trunk/geany.glade trunk/src/geany.h trunk/src/interface.c trunk/src/main.c trunk/src/ui_utils.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2006-12-01 12:51:33 UTC (rev 1040) +++ trunk/ChangeLog 2006-12-01 18:44:35 UTC (rev 1041) @@ -1,3 +1,12 @@ +2006-12-01 Enrico Tröger enrico.troeger@uvena.de + + * geany.glade, src/interface.c, src/geany.h, src/main.c, + src/ui_utils.c: + Removed invisible place holder menu item in recent files menu. + Create separate sub menu for the recent files menu in the toolbar to + prevent GTK warnings when using GTK >= 2.10. + + 2006-12-01 Nick Treleaven nick.treleaven@btinternet.com
* src/vte.c:
Modified: trunk/geany.glade =================================================================== --- trunk/geany.glade 2006-12-01 12:51:33 UTC (rev 1040) +++ trunk/geany.glade 2006-12-01 18:44:35 UTC (rev 1041) @@ -18,6 +18,7 @@ <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property> <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> <property name="focus_on_map">True</property> + <property name="urgency_hint">False</property> <accessibility> <atkproperty name="AtkObject::accessible_name" translatable="yes">Geany</atkproperty> </accessibility> @@ -31,6 +32,8 @@ <child> <widget class="GtkMenuBar" id="menubar1"> <property name="visible">True</property> + <property name="pack_direction">GTK_PACK_DIRECTION_LTR</property> + <property name="child_pack_direction">GTK_PACK_DIRECTION_LTR</property>
<child> <widget class="GtkMenuItem" id="menuitem1"> @@ -105,13 +108,6 @@
<child> <widget class="GtkMenu" id="recent_files1_menu"> - - <child> - <widget class="GtkMenuItem" id="invisible5"> - <property name="label" translatable="yes">invisible</property> - <property name="use_underline">True</property> - </widget> - </child> </widget> </child> </widget> @@ -2658,6 +2654,7 @@ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property> <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> <property name="focus_on_map">True</property> + <property name="urgency_hint">False</property> <property name="has_separator">True</property>
<child internal-child="vbox">
Modified: trunk/src/geany.h =================================================================== --- trunk/src/geany.h 2006-12-01 12:51:33 UTC (rev 1040) +++ trunk/src/geany.h 2006-12-01 18:44:35 UTC (rev 1041) @@ -160,6 +160,8 @@ GtkWidget *popup_menu; GtkWidget *toolbar_menu; GtkWidget *new_file_menu; + GtkWidget *recent_files_menubar; + GtkWidget *recent_files_toolbar; GtkWidget *menu_insert_include_item[2]; GtkWidget *popup_goto_items[3]; GtkWidget *popup_items[5];
Modified: trunk/src/interface.c =================================================================== --- trunk/src/interface.c 2006-12-01 12:51:33 UTC (rev 1040) +++ trunk/src/interface.c 2006-12-01 18:44:35 UTC (rev 1041) @@ -44,7 +44,6 @@ GtkWidget *menu_open1; GtkWidget *recent_files1; GtkWidget *recent_files1_menu; - GtkWidget *invisible5; GtkWidget *separator13; GtkWidget *menu_save1; GtkWidget *menu_save_as1; @@ -293,9 +292,6 @@ recent_files1_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (recent_files1), recent_files1_menu);
- invisible5 = gtk_menu_item_new_with_mnemonic (_("invisible")); - gtk_container_add (GTK_CONTAINER (recent_files1_menu), invisible5); - separator13 = gtk_separator_menu_item_new (); gtk_widget_show (separator13); gtk_container_add (GTK_CONTAINER (menuitem1_menu), separator13); @@ -1408,7 +1404,6 @@ GLADE_HOOKUP_OBJECT (window1, menu_open1, "menu_open1"); GLADE_HOOKUP_OBJECT (window1, recent_files1, "recent_files1"); GLADE_HOOKUP_OBJECT (window1, recent_files1_menu, "recent_files1_menu"); - GLADE_HOOKUP_OBJECT (window1, invisible5, "invisible5"); GLADE_HOOKUP_OBJECT (window1, separator13, "separator13"); GLADE_HOOKUP_OBJECT (window1, menu_save1, "menu_save1"); GLADE_HOOKUP_OBJECT (window1, menu_save_as1, "menu_save_as1");
Modified: trunk/src/main.c =================================================================== --- trunk/src/main.c 2006-12-01 12:51:33 UTC (rev 1040) +++ trunk/src/main.c 2006-12-01 18:44:35 UTC (rev 1041) @@ -207,12 +207,8 @@ // connect the toolbar dropdown menus gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON( lookup_widget(app->window, "menutoolbutton1")), app->new_file_menu); -#if 0 - // gtk2.10 doesn't like doubly attached menus gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON( - lookup_widget(app->window, "toolbutton9")), - lookup_widget(app->window, "recent_files1_menu")); -#endif + lookup_widget(app->window, "toolbutton9")), app->recent_files_toolbar);
// set the tab placements of the notebooks gtk_notebook_set_tab_pos(GTK_NOTEBOOK(app->notebook), app->tab_pos_editor); @@ -247,6 +243,7 @@
app->window = create_window1(); app->new_file_menu = gtk_menu_new(); + app->recent_files_toolbar = gtk_menu_new();
// store important pointers in the MyApp structure app->toolbar = lookup_widget(app->window, "toolbar1"); @@ -258,6 +255,7 @@ app->toolbar_menu = create_toolbar_popup_menu1(); app->compile_button = lookup_widget(app->window, "toolbutton13"); app->run_button = lookup_widget(app->window, "toolbutton26"); + app->recent_files_menubar = lookup_widget(app->window, "recent_files1_menu"); app->popup_goto_items[0] = lookup_widget(app->popup_menu, "goto_tag_definition1"); app->popup_goto_items[1] = lookup_widget(app->popup_menu, "goto_tag_declaration1"); app->popup_goto_items[2] = lookup_widget(app->popup_menu, "find_usage1");
Modified: trunk/src/ui_utils.c =================================================================== --- trunk/src/ui_utils.c 2006-12-01 12:51:33 UTC (rev 1040) +++ trunk/src/ui_utils.c 2006-12-01 18:44:35 UTC (rev 1041) @@ -830,26 +830,32 @@
void ui_create_recent_menu() { - 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); + gtk_widget_set_sensitive(app->recent_files_menubar, FALSE); + gtk_widget_set_sensitive(app->recent_files_toolbar, FALSE); return; }
- for (i = 0; i < MIN(app->mru_length, g_queue_get_length(app->recent_queue)); - i++) + 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); + // create menu item for the recent files menu in the menu bar tmp = gtk_menu_item_new_with_label(filename); gtk_widget_show(tmp); - gtk_menu_shell_append(GTK_MENU_SHELL(recent_menu), tmp); + gtk_menu_shell_append(GTK_MENU_SHELL(app->recent_files_menubar), tmp); g_signal_connect((gpointer) tmp, "activate", G_CALLBACK(recent_file_activate_cb), NULL); + // create menu item for the recent files menu in the toolbar bar + tmp = gtk_menu_item_new_with_label(filename); + gtk_widget_show(tmp); + gtk_menu_shell_append(GTK_MENU_SHELL(app->recent_files_toolbar), tmp); + g_signal_connect((gpointer) tmp, "activate", + G_CALLBACK(recent_file_activate_cb), NULL); } }
@@ -889,11 +895,11 @@ { const gchar *text = NULL;
- if (GTK_BIN (menu_item)->child) + if (GTK_BIN(menu_item)->child) { - GtkWidget *child = GTK_BIN (menu_item)->child; + GtkWidget *child = GTK_BIN(menu_item)->child;
- if (GTK_IS_LABEL (child)) + if (GTK_IS_LABEL(child)) text = gtk_label_get_text(GTK_LABEL(child)); } // GTK owns text so it's much safer to return a copy of it in case the memory is reallocated @@ -901,11 +907,26 @@ }
+static gint find_recent_file_item(gconstpointer list_data, gconstpointer user_data) +{ + gchar *menu_text = menu_item_get_text(GTK_MENU_ITEM(list_data)); + gint result; + + if (g_str_equal(menu_text, user_data)) + result = 0; + else + result = 1; + + g_free(menu_text); + return result; +} + + static void recent_file_loaded(const gchar *utf8_filename) { GList *item, *children; void *data; - GtkWidget *recent_menu, *tmp; + GtkWidget *tmp;
// first reorder the queue item = g_queue_find_custom(app->recent_queue, utf8_filename, (GCompareFunc) strcmp); @@ -915,43 +936,36 @@ g_queue_remove(app->recent_queue, data); g_queue_push_head(app->recent_queue, data);
- // now reorder the recent files menu - recent_menu = lookup_widget(app->window, "recent_files1_menu"); - children = gtk_container_get_children(GTK_CONTAINER(recent_menu)); - // remove the old menuitem for the filename - for (item = children; item != NULL; item = g_list_next(item)) - { - gchar *menu_text; + children = gtk_container_get_children(GTK_CONTAINER(app->recent_files_menubar)); + item = g_list_find_custom(children, utf8_filename, (GCompareFunc) find_recent_file_item); + if (item != NULL) gtk_widget_destroy(GTK_WIDGET(item->data));
- data = item->data; - if (! GTK_IS_MENU_ITEM(data)) continue; - menu_text = menu_item_get_text(GTK_MENU_ITEM(data)); + children = gtk_container_get_children(GTK_CONTAINER(app->recent_files_toolbar)); + item = g_list_find_custom(children, utf8_filename, (GCompareFunc) find_recent_file_item); + if (item != NULL) gtk_widget_destroy(GTK_WIDGET(item->data));
- if (g_str_equal(menu_text, utf8_filename)) - { - gtk_widget_destroy(GTK_WIDGET(data)); - g_free(menu_text); - break; - } - g_free(menu_text); - } - // now prepend a new menuitem for the filename + // now prepend a new menuitem for the filename, first for the recent files menu in the menu bar tmp = gtk_menu_item_new_with_label(utf8_filename); gtk_widget_show(tmp); - gtk_menu_shell_prepend(GTK_MENU_SHELL(recent_menu), tmp); + gtk_menu_shell_prepend(GTK_MENU_SHELL(app->recent_files_menubar), tmp); g_signal_connect((gpointer) tmp, "activate", G_CALLBACK(recent_file_activate_cb), NULL); + // then for the recent files menu in the tool bar + tmp = gtk_menu_item_new_with_label(utf8_filename); + gtk_widget_show(tmp); + gtk_menu_shell_prepend(GTK_MENU_SHELL(app->recent_files_toolbar), tmp); + g_signal_connect((gpointer) tmp, "activate", + G_CALLBACK(recent_file_activate_cb), NULL); }
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; gchar *filename; - GList *children; + GList *children, *item;
if (g_queue_get_length(app->recent_queue) == 0) { @@ -963,11 +977,11 @@ gtk_widget_set_sensitive(recent_files_item, TRUE); }
- // clean the MRU list before adding an item - children = gtk_container_get_children(GTK_CONTAINER(recent_menu)); + // clean the MRU list before adding an item (menubar) + children = gtk_container_get_children(GTK_CONTAINER(app->recent_files_menubar)); if (g_list_length(children) > app->mru_length - 1) { - GList *item = g_list_nth(children, app->mru_length - 1); + item = g_list_nth(children, app->mru_length - 1); while (item != NULL) { if (GTK_IS_MENU_ITEM(item->data)) gtk_widget_destroy(GTK_WIDGET(item->data)); @@ -975,12 +989,31 @@ } }
+ // clean the MRU list before adding an item (toolbar) + children = gtk_container_get_children(GTK_CONTAINER(app->recent_files_toolbar)); + if (g_list_length(children) > app->mru_length - 1) + { + item = g_list_nth(children, app->mru_length - 1); + while (item != NULL) + { + if (GTK_IS_MENU_ITEM(item->data)) gtk_widget_destroy(GTK_WIDGET(item->data)); + item = g_list_next(item); + } + } + filename = g_queue_peek_head(app->recent_queue); + // create item for the menu bar menu tmp = gtk_menu_item_new_with_label(filename); gtk_widget_show(tmp); - gtk_menu_shell_prepend(GTK_MENU_SHELL(recent_menu), tmp); + gtk_menu_shell_prepend(GTK_MENU_SHELL(app->recent_files_menubar), tmp); g_signal_connect((gpointer) tmp, "activate", G_CALLBACK(recent_file_activate_cb), NULL); + // create item for the tool bar menu + tmp = gtk_menu_item_new_with_label(filename); + gtk_widget_show(tmp); + gtk_menu_shell_prepend(GTK_MENU_SHELL(app->recent_files_toolbar), tmp); + g_signal_connect((gpointer) tmp, "activate", + G_CALLBACK(recent_file_activate_cb), NULL); }
@@ -1117,7 +1150,7 @@ if (equal) return; // don't prepend duplicate
gtk_combo_box_prepend_text(combo, text); - + // limit history path = gtk_tree_path_new_from_indices(history_len, -1); if (gtk_tree_model_get_iter(model, &iter, path))
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.