[geany/geany] 0c311c: Use per-document filter for symbol tree

Jiří Techet git-noreply at xxxxx
Sun Jan 23 16:44:14 UTC 2022


Branch:      refs/heads/master
Author:      Jiří Techet <techet at gmail.com>
Committer:   Jiří Techet <techet at gmail.com>
Date:        Sun, 23 Jan 2022 16:44:14 UTC
Commit:      0c311c02fd3f1b527d777ca21a5f83f198d57537
             https://github.com/geany/geany/commit/0c311c02fd3f1b527d777ca21a5f83f198d57537

Log Message:
-----------
Use per-document filter for symbol tree


Modified Paths:
--------------
    src/callbacks.c
    src/document.c
    src/documentprivate.h
    src/symbols.c

Modified: src/callbacks.c
16 lines changed, 15 insertions(+), 1 deletions(-)
===================================================================
@@ -440,10 +440,15 @@ void on_toolbutton_search_clicked(GtkAction *action, gpointer user_data)
 void on_entry_tagfilter_changed(GtkAction *action, gpointer user_data)
 {
 	GeanyDocument *doc = document_get_current();
+	GtkEntry *filter_entry;
 
 	if (!doc)
 		return;
 
+	filter_entry = GTK_ENTRY(ui_lookup_widget(main_widgets.window, "entry_tagfilter"));
+	g_free(doc->priv->tag_filter);
+	doc->priv->tag_filter = g_strdup(gtk_entry_get_text(filter_entry));
+
 	/* make sure the tree is fully re-created so it appears correctly
 	 * after applying filter */
 	if (doc->priv->tag_store)
@@ -524,14 +529,23 @@ static void on_notebook1_switch_page_after(GtkNotebook *notebook, gpointer page,
 
 	if (doc != NULL)
 	{
+		GtkEntry *filter_entry = GTK_ENTRY(ui_lookup_widget(main_widgets.window, "entry_tagfilter"));
+		const gchar *entry_text = gtk_entry_get_text(filter_entry);
+
 		sidebar_select_openfiles_item(doc);
 		ui_save_buttons_toggle(doc->changed);
 		ui_set_window_title(doc);
 		ui_update_statusbar(doc, -1);
 		ui_update_popup_reundo_items(doc);
 		ui_document_show_hide(doc); /* update the document menu */
 		build_menu_update(doc);
-		sidebar_update_tag_list(doc, TRUE);
+		if (g_strcmp0(entry_text, doc->priv->tag_filter) != 0)
+		{
+			/* calls sidebar_update_tag_list() in on_entry_tagfilter_changed() */
+			gtk_entry_set_text(filter_entry, doc->priv->tag_filter);
+		}
+		else
+			sidebar_update_tag_list(doc, TRUE);
 		document_highlight_tags(doc);
 
 		document_check_disk_status(doc, TRUE);


Modified: src/document.c
2 lines changed, 2 insertions(+), 0 deletions(-)
===================================================================
@@ -647,6 +647,7 @@ static GeanyDocument *document_create(const gchar *utf8_filename)
 
 	/* initialize default document settings */
 	doc->priv = g_new0(GeanyDocumentPrivate, 1);
+	doc->priv->tag_filter = g_strdup("");
 	doc->id = ++doc_id_counter;
 	doc->index = new_idx;
 	doc->file_name = g_strdup(utf8_filename);
@@ -734,6 +735,7 @@ static gboolean remove_page(guint page_num)
 	}
 	g_free(doc->encoding);
 	g_free(doc->priv->saved_encoding.encoding);
+	g_free(doc->priv->tag_filter);
 	g_free(doc->file_name);
 	g_free(doc->real_path);
 	if (doc->tm_file)


Modified: src/documentprivate.h
2 lines changed, 2 insertions(+), 0 deletions(-)
===================================================================
@@ -112,6 +112,8 @@ typedef struct GeanyDocumentPrivate
 	GtkWidget		*info_bars[NUM_MSG_TYPES];
 	/* Keyed Data List to attach arbitrary data to the document */
 	GData			*data;
+	/* Text used for filtering symbol tree. */
+	gchar			*tag_filter;
 }
 GeanyDocumentPrivate;
 


Modified: src/symbols.c
4 lines changed, 1 insertions(+), 3 deletions(-)
===================================================================
@@ -320,16 +320,14 @@ static GList *get_tag_list(GeanyDocument *doc, TMTagType tag_types)
 {
 	GList *tag_names = NULL;
 	guint i, j;
-	GtkEntry *tf_entry;
 	gchar **tf_strv;
 
 	g_return_val_if_fail(doc, NULL);
 
 	if (! doc->tm_file || ! doc->tm_file->tags_array)
 		return NULL;
 
-	tf_entry = GTK_ENTRY(ui_lookup_widget(main_widgets.window, "entry_tagfilter"));
-	tf_strv = g_strsplit_set(gtk_entry_get_text(tf_entry), " ", -1);
+	tf_strv = g_strsplit_set(doc->priv->tag_filter, " ", -1);
 
 	for (i = 0; i < doc->tm_file->tags_array->len; ++i)
 	{



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Commits mailing list