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