SF.net SVN: geany: [1802] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Wed Aug 15 17:58:58 UTC 2007


Revision: 1802
          http://geany.svn.sourceforge.net/geany/?rev=1802&view=rev
Author:   eht16
Date:     2007-08-15 10:58:58 -0700 (Wed, 15 Aug 2007)

Log Message:
-----------
Add menu items for different sorting of the symbol list to the symbol list popup menu.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/symbols.c
    trunk/src/symbols.h
    trunk/src/treeviews.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2007-08-15 16:00:43 UTC (rev 1801)
+++ trunk/ChangeLog	2007-08-15 17:58:58 UTC (rev 1802)
@@ -1,3 +1,10 @@
+2007-08-15  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>
+
+ * src/symbols.c, src/symbols.h, src/treeviews.c:
+   Add menu items for different sorting of the symbol list to the symbol
+   list popup menu.
+
+
 2007-08-15  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
 
  * src/plugindata.h, src/plugins.c:

Modified: trunk/src/symbols.c
===================================================================
--- trunk/src/symbols.c	2007-08-15 16:00:43 UTC (rev 1801)
+++ trunk/src/symbols.c	2007-08-15 17:58:58 UTC (rev 1802)
@@ -320,8 +320,7 @@
 }
 
 
-static const GList *
-get_tag_list(gint idx, guint tag_types)
+static const GList *get_tag_list(gint idx, guint tag_types, gboolean sort_by_name)
 {
 	static GList *tag_names = NULL;
 
@@ -385,7 +384,9 @@
 				if (! doc_is_utf8) g_free(utf8_name);
 			}
 		}
-		tag_names = g_list_sort(tag_names, (GCompareFunc) compare_symbol);
+		if (sort_by_name)
+			tag_names = g_list_sort(tag_names, (GCompareFunc) compare_symbol);
+
 		return tag_names;
 	}
 	else
@@ -688,7 +689,7 @@
 }
 
 
-gboolean symbols_recreate_tag_list(gint idx)
+gboolean symbols_recreate_tag_list(gint idx, gboolean sort_by_name)
 {
 	GList *tmp;
 	const GList *tags;
@@ -697,8 +698,9 @@
 
 	g_return_val_if_fail(DOC_IDX_VALID(idx), FALSE);
 
-	tags = get_tag_list(idx, tm_tag_max_t);
-	if (doc_list[idx].tm_file == NULL || tags == NULL) return FALSE;
+	tags = get_tag_list(idx, tm_tag_max_t, sort_by_name);
+	if (doc_list[idx].tm_file == NULL || tags == NULL)
+		return FALSE;
 
 	gtk_tree_store_clear(doc_list[idx].tag_store);
 	// unref the store to speed up the filling(from TreeView Tutorial)

Modified: trunk/src/symbols.h
===================================================================
--- trunk/src/symbols.h	2007-08-15 16:00:43 UTC (rev 1801)
+++ trunk/src/symbols.h	2007-08-15 17:58:58 UTC (rev 1802)
@@ -44,9 +44,9 @@
 
 void symbols_finalize();
 
-gboolean symbols_recreate_tag_list(gint idx);
+gboolean symbols_recreate_tag_list(gint idx, gboolean sort_by_name);
 
-int symbols_generate_global_tags(int argc, char **argv);
+gint symbols_generate_global_tags(gint argc, gchar **argv);
 
 void symbols_show_load_tags_dialog();
 

Modified: trunk/src/treeviews.c
===================================================================
--- trunk/src/treeviews.c	2007-08-15 16:00:43 UTC (rev 1801)
+++ trunk/src/treeviews.c	2007-08-15 17:58:58 UTC (rev 1802)
@@ -52,6 +52,8 @@
 	OPENFILES_ACTION_RELOAD,
 	OPENFILES_ACTION_HIDE,
 	OPENFILES_ACTION_HIDE_ALL,
+	SYMBOL_ACTION_SORT_BY_NAME,
+	SYMBOL_ACTION_SORT_BY_APPEARANCE,
 	SYMBOL_ACTION_HIDE,
 	SYMBOL_ACTION_HIDE_ALL
 };
@@ -164,7 +166,7 @@
 			g_object_ref((gpointer)doc_list[idx].tag_tree);	// to hold it after removing
 		}
 
-		doc_list[idx].has_tags = symbols_recreate_tag_list(idx);
+		doc_list[idx].has_tags = symbols_recreate_tag_list(idx, TRUE); // sort by name by default
 	}
 
 	if (doc_list[idx].has_tags)
@@ -291,6 +293,24 @@
 
 	tv.popup_taglist = gtk_menu_new();
 
+	item = gtk_menu_item_new_with_label(_("Sort by name"));
+	gtk_widget_show(item);
+	gtk_container_add(GTK_CONTAINER(tv.popup_taglist), item);
+	g_signal_connect((gpointer) item, "activate",
+				G_CALLBACK(on_taglist_tree_popup_clicked),
+				GINT_TO_POINTER(SYMBOL_ACTION_SORT_BY_NAME));
+
+	item = gtk_menu_item_new_with_label(_("Sort by appearance"));
+	gtk_widget_show(item);
+	gtk_container_add(GTK_CONTAINER(tv.popup_taglist), item);
+	g_signal_connect((gpointer) item, "activate",
+				G_CALLBACK(on_taglist_tree_popup_clicked),
+				GINT_TO_POINTER(SYMBOL_ACTION_SORT_BY_APPEARANCE));
+
+	item = gtk_separator_menu_item_new();
+	gtk_widget_show(item);
+	gtk_container_add(GTK_CONTAINER(tv.popup_taglist), item);
+
 	item = gtk_image_menu_item_new_with_label(_("Hide"));
 	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item),
 		gtk_image_new_from_stock("gtk-close", GTK_ICON_SIZE_MENU));
@@ -465,6 +485,20 @@
 {
 	switch (GPOINTER_TO_INT(user_data))
 	{
+		case SYMBOL_ACTION_SORT_BY_NAME:
+		{
+			gint idx = document_get_cur_idx();
+			if (DOC_IDX_VALID(idx))
+				doc_list[idx].has_tags = symbols_recreate_tag_list(idx, TRUE);
+			break;
+		}
+		case SYMBOL_ACTION_SORT_BY_APPEARANCE:
+		{
+			gint idx = document_get_cur_idx();
+			if (DOC_IDX_VALID(idx))
+				doc_list[idx].has_tags = symbols_recreate_tag_list(idx, FALSE);
+			break;
+		}
 		case SYMBOL_ACTION_HIDE:
 		{
 			app->sidebar_symbol_visible = FALSE;


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