SF.net SVN: geany: [1041] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Fri Dec 1 18:44:35 UTC 2006


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 at 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 at 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.



More information about the Commits mailing list