Revision: 821 http://svn.sourceforge.net/geany/?rev=821&view=rev Author: ntrel Date: 2006-09-17 14:53:47 -0700 (Sun, 17 Sep 2006)
Log Message: ----------- Only reorder recent files menu when recent file loaded correctly. Reorder the recent file menu instead of recreating it.
Modified Paths: -------------- trunk/ChangeLog trunk/src/ui_utils.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2006-09-17 20:40:15 UTC (rev 820) +++ trunk/ChangeLog 2006-09-17 21:53:47 UTC (rev 821) @@ -5,6 +5,9 @@ * src/sci_cb.c: Fix sign comparison warning. * src/utils.c, src/msgwindow.c: Improve utils_get_current_time_string(). + * src/ui_utils.c: + Only reorder recent files menu when recent file loaded correctly. + Reorder the recent file menu instead of recreating it.
2006-09-15 Nick Treleaven nick.treleaven@btinternet.com
Modified: trunk/src/ui_utils.c =================================================================== --- trunk/src/ui_utils.c 2006-09-17 20:40:15 UTC (rev 820) +++ trunk/src/ui_utils.c 2006-09-17 21:53:47 UTC (rev 821) @@ -39,8 +39,9 @@ #include "keybindings.h"
+static const gchar *menu_item_get_text(GtkMenuItem *menu_item); + 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, @@ -1217,8 +1218,8 @@ { 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); + if (document_open_file(-1, locale_filename, 0, FALSE, NULL, NULL) > -1) + recent_file_loaded((gchar*) user_data);
g_free(locale_filename); } @@ -1239,20 +1240,60 @@ }
+static const gchar *menu_item_get_text(GtkMenuItem *menu_item) +{ + const gchar *text = NULL; + + if (GTK_BIN (menu_item)->child) + { + GtkWidget *child = GTK_BIN (menu_item)->child; + + if (GTK_IS_LABEL (child)) + text = gtk_label_get_text(GTK_LABEL(child)); + } + return text; +} + + static void recent_file_loaded(const gchar *utf8_filename) { - GList *item = - g_queue_find_custom(app->recent_queue, utf8_filename, (GCompareFunc) strcmp); - gchar *data; + GList *item, *children; + void *data; + GtkWidget *recent_menu, *tmp;
+ // first reorder the queue + item = g_queue_find_custom(app->recent_queue, utf8_filename, (GCompareFunc) strcmp); 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(); + // 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)) + { + const gchar *menu_text; + + data = item->data; + if (! GTK_IS_MENU_ITEM(data)) continue; + menu_text = menu_item_get_text(GTK_MENU_ITEM(data)); + + if (g_str_equal(menu_text, utf8_filename)) + { + gtk_widget_destroy(GTK_WIDGET(data)); + break; + } + } + // now prepend a new menuitem for the filename + tmp = gtk_menu_item_new_with_label(utf8_filename); + gtk_widget_show(tmp); + gtk_menu_shell_prepend(GTK_MENU_SHELL(recent_menu), tmp); + g_signal_connect((gpointer) tmp, "activate", + G_CALLBACK(recent_file_activate_cb), (gpointer) utf8_filename); }
@@ -1295,25 +1336,6 @@ }
-static void recreate_recent_menu() -{ - GList *item, *children; - void *data; - GtkWidget *recent_menu = lookup_widget(app->window, "recent_files1_menu"); - - children = gtk_container_get_children(GTK_CONTAINER(recent_menu)); - - // remove all menu items (but not the list elements) - for (item = children; item != NULL; item = g_list_next(item)) - { - data = item->data; - if (! GTK_IS_MENU_ITEM(data)) continue; - gtk_widget_destroy(GTK_WIDGET(data)); - } - ui_create_recent_menu(); -} - - void ui_show_markers_margin() { gint i, idx, max = gtk_notebook_get_n_pages(GTK_NOTEBOOK(app->notebook));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.