changeset 1456:b24391991f7f

improved expanding and hiding of helper keywords
author nadvornik
date Tue, 17 Mar 2009 18:58:15 +0000
parents 2545780d4779
children 5c0ecb2ebbc5
files src/bar_keywords.c src/metadata.c
diffstat 2 files changed, 17 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/bar_keywords.c	Tue Mar 17 18:30:53 2009 +0000
+++ b/src/bar_keywords.c	Tue Mar 17 18:58:15 2009 +0000
@@ -163,12 +163,10 @@
 {
 	PaneKeywordsData *pkd = data;
 	gboolean set;
-	gboolean is_keyword;
 
-	gtk_tree_model_get(model, iter, FILTER_KEYWORD_COLUMN_TOGGLE, &set,
-					FILTER_KEYWORD_COLUMN_IS_KEYWORD, &is_keyword, -1);
+	gtk_tree_model_get(model, iter, FILTER_KEYWORD_COLUMN_TOGGLE, &set, -1);
 	
-	if (is_keyword && !set && gtk_tree_view_row_expanded(GTK_TREE_VIEW(pkd->keyword_treeview), path))
+	if (!set && gtk_tree_view_row_expanded(GTK_TREE_VIEW(pkd->keyword_treeview), path))
 		{
 		gtk_tree_view_collapse_row(GTK_TREE_VIEW(pkd->keyword_treeview), path);
 		}
--- a/src/metadata.c	Tue Mar 17 18:30:53 2009 +0000
+++ b/src/metadata.c	Tue Mar 17 18:58:15 2009 +0000
@@ -917,6 +917,20 @@
 static gboolean keyword_tree_is_set_casefold(GtkTreeModel *keyword_tree, GtkTreeIter iter, GList *casefold_list)
 {
 	if (!casefold_list) return FALSE;
+
+	if (!keyword_get_is_keyword(keyword_tree, &iter))
+		{
+		/* for the purpose of expanding and hiding, a helper is set if it has any children set */
+		GtkTreeIter child;
+		if (!gtk_tree_model_iter_children(keyword_tree, &child, &iter)) 
+			return FALSE; /* this should happen only on empty helpers */
+
+		while (TRUE)
+			{
+			if (keyword_tree_is_set_casefold(keyword_tree, child, casefold_list)) return TRUE;
+			if (!gtk_tree_model_iter_next(keyword_tree, &child)) return FALSE;
+			}
+		}
 	
 	while (TRUE)
 		{
@@ -953,8 +967,6 @@
 	GList *casefold_list = NULL;
 	GList *work;
 
-	if (!keyword_get_is_keyword(keyword_tree, iter)) return FALSE;
-	
 	work = kw_list;
 	while (work)
 		{
@@ -1130,8 +1142,7 @@
 	GtkTreeIter iter = *iter_ptr;
 	while (TRUE)
 		{
-		if (keyword_get_is_keyword(GTK_TREE_MODEL(keyword_tree), &iter) && 
-		    !keyword_tree_is_set(GTK_TREE_MODEL(keyword_tree), &iter, keywords))
+		if (!keyword_tree_is_set(GTK_TREE_MODEL(keyword_tree), &iter, keywords))
 			{
 			keyword_hide_in(keyword_tree, &iter, id);
 			/* no need to check children of hidden node */