SF.net SVN: geany: [821] trunk
ntrel at users.sourceforge.net
ntrel at xxxxx
Sun Sep 17 21:53:53 UTC 2006
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 at 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.
More information about the Commits
mailing list