SF.net SVN: geany:[3258] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Thu Nov 20 16:52:46 UTC 2008


Revision: 3258
          http://geany.svn.sourceforge.net/geany/?rev=3258&view=rev
Author:   ntrel
Date:     2008-11-20 16:52:46 +0000 (Thu, 20 Nov 2008)

Log Message:
-----------
Use radio buttons for symbol list popup menu sort items.

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

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2008-11-19 18:41:37 UTC (rev 3257)
+++ trunk/ChangeLog	2008-11-20 16:52:46 UTC (rev 3258)
@@ -1,3 +1,9 @@
+2008-11-20  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
+
+ * src/documentprivate.h, src/symbols.c:
+   Use radio buttons for symbol list popup menu sort items.
+
+
 2008-11-19  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>
 
  * src/search.c:

Modified: trunk/src/documentprivate.h
===================================================================
--- trunk/src/documentprivate.h	2008-11-19 18:41:37 UTC (rev 3257)
+++ trunk/src/documentprivate.h	2008-11-20 16:52:46 UTC (rev 3258)
@@ -66,6 +66,7 @@
 	FileEncoding	 saved_encoding;
 	gboolean		colourise_needed;	/* use document.c:queue_colourise() instead */
 	gint			line_count;			/* Number of lines in the document. */
+	gint			symbol_list_sort_mode;
 }
 GeanyDocumentPrivate;
 

Modified: trunk/src/symbols.c
===================================================================
--- trunk/src/symbols.c	2008-11-19 18:41:37 UTC (rev 3257)
+++ trunk/src/symbols.c	2008-11-20 16:52:46 UTC (rev 3258)
@@ -91,7 +91,14 @@
 
 static GPtrArray *top_level_iter_names = NULL;
 
+static struct
+{
+	GtkWidget *sort_by_name;
+	GtkWidget *sort_by_appearance;
+}
+symbol_menu = {NULL, NULL};
 
+
 static void html_tags_loaded(void);
 static void load_user_tags(filetype_id ft_id);
 
@@ -1169,6 +1176,7 @@
 		prev_sort_mode = sort_mode;
 
 	sort_tree(doc->priv->tag_store, sort_mode == SYMBOLS_SORT_BY_NAME);
+	doc->priv->symbol_list_sort_mode = sort_mode;
 
 	/* Re-attach model to view */
 	gtk_tree_view_set_model(GTK_TREE_VIEW(doc->priv->tag_tree),
@@ -1662,34 +1670,60 @@
 }
 
 
-static void on_taglist_tree_popup_clicked(GtkMenuItem *menuitem, gpointer user_data)
+static void on_symbol_tree_sort_clicked(GtkMenuItem *menuitem, gpointer user_data)
 {
 	gint sort_mode = GPOINTER_TO_INT(user_data);
 	GeanyDocument *doc = document_get_current();
 
+	if (ignore_callback)
+		return;
+
 	if (doc != NULL)
 		doc->has_tags = symbols_recreate_tag_list(doc, sort_mode);
 }
 
 
+static void on_symbol_tree_menu_show(GtkWidget *widget,
+		gpointer user_data)
+{
+	GeanyDocument *doc = document_get_current();
+
+	if (!doc)
+		return;
+
+	ignore_callback = TRUE;
+
+	if (doc->priv->symbol_list_sort_mode == SYMBOLS_SORT_BY_NAME)
+		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(symbol_menu.sort_by_name), TRUE);
+	else
+		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(symbol_menu.sort_by_appearance), TRUE);
+
+	ignore_callback = FALSE;
+}
+
+
 static void create_taglist_popup_menu(void)
 {
-	GtkWidget *item;
+	GtkWidget *item, *menu;
 
-	tv.popup_taglist = gtk_menu_new();
+	tv.popup_taglist = menu = gtk_menu_new();
 
-	item = gtk_menu_item_new_with_mnemonic(_("Sort by _Name"));
+	symbol_menu.sort_by_name = item = gtk_radio_menu_item_new_with_mnemonic(NULL,
+		_("Sort by _Name"));
 	gtk_widget_show(item);
 	gtk_container_add(GTK_CONTAINER(tv.popup_taglist), item);
-	g_signal_connect(item, "activate", G_CALLBACK(on_taglist_tree_popup_clicked),
+	g_signal_connect(item, "activate", G_CALLBACK(on_symbol_tree_sort_clicked),
 			GINT_TO_POINTER(SYMBOLS_SORT_BY_NAME));
 
-	item = gtk_menu_item_new_with_mnemonic(_("Sort by _Appearance"));
+	symbol_menu.sort_by_appearance = item = gtk_radio_menu_item_new_with_mnemonic_from_widget(
+		GTK_RADIO_MENU_ITEM(item), _("Sort by _Appearance"));
 	gtk_widget_show(item);
 	gtk_container_add(GTK_CONTAINER(tv.popup_taglist), item);
-	g_signal_connect(item, "activate", G_CALLBACK(on_taglist_tree_popup_clicked),
+	g_signal_connect(item, "activate", G_CALLBACK(on_symbol_tree_sort_clicked),
 			GINT_TO_POINTER(SYMBOLS_SORT_BY_APPEARANCE));
 
+	g_signal_connect(menu, "show", G_CALLBACK(on_symbol_tree_menu_show), NULL);
+
 	sidebar_add_common_menu_items(GTK_MENU(tv.popup_taglist));
 }
 


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