comparison src/metadata.c @ 1456:b24391991f7f

improved expanding and hiding of helper keywords
author nadvornik
date Tue, 17 Mar 2009 18:58:15 +0000
parents b106af9689db
children 5c0ecb2ebbc5
comparison
equal deleted inserted replaced
1455:2545780d4779 1456:b24391991f7f
915 915
916 916
917 static gboolean keyword_tree_is_set_casefold(GtkTreeModel *keyword_tree, GtkTreeIter iter, GList *casefold_list) 917 static gboolean keyword_tree_is_set_casefold(GtkTreeModel *keyword_tree, GtkTreeIter iter, GList *casefold_list)
918 { 918 {
919 if (!casefold_list) return FALSE; 919 if (!casefold_list) return FALSE;
920
921 if (!keyword_get_is_keyword(keyword_tree, &iter))
922 {
923 /* for the purpose of expanding and hiding, a helper is set if it has any children set */
924 GtkTreeIter child;
925 if (!gtk_tree_model_iter_children(keyword_tree, &child, &iter))
926 return FALSE; /* this should happen only on empty helpers */
927
928 while (TRUE)
929 {
930 if (keyword_tree_is_set_casefold(keyword_tree, child, casefold_list)) return TRUE;
931 if (!gtk_tree_model_iter_next(keyword_tree, &child)) return FALSE;
932 }
933 }
920 934
921 while (TRUE) 935 while (TRUE)
922 { 936 {
923 GtkTreeIter parent; 937 GtkTreeIter parent;
924 938
951 { 965 {
952 gboolean ret; 966 gboolean ret;
953 GList *casefold_list = NULL; 967 GList *casefold_list = NULL;
954 GList *work; 968 GList *work;
955 969
956 if (!keyword_get_is_keyword(keyword_tree, iter)) return FALSE;
957
958 work = kw_list; 970 work = kw_list;
959 while (work) 971 while (work)
960 { 972 {
961 const gchar *kw = work->data; 973 const gchar *kw = work->data;
962 work = work->next; 974 work = work->next;
1128 static void keyword_hide_unset_in_recursive(GtkTreeStore *keyword_tree, GtkTreeIter *iter_ptr, gpointer id, GList *keywords) 1140 static void keyword_hide_unset_in_recursive(GtkTreeStore *keyword_tree, GtkTreeIter *iter_ptr, gpointer id, GList *keywords)
1129 { 1141 {
1130 GtkTreeIter iter = *iter_ptr; 1142 GtkTreeIter iter = *iter_ptr;
1131 while (TRUE) 1143 while (TRUE)
1132 { 1144 {
1133 if (keyword_get_is_keyword(GTK_TREE_MODEL(keyword_tree), &iter) && 1145 if (!keyword_tree_is_set(GTK_TREE_MODEL(keyword_tree), &iter, keywords))
1134 !keyword_tree_is_set(GTK_TREE_MODEL(keyword_tree), &iter, keywords))
1135 { 1146 {
1136 keyword_hide_in(keyword_tree, &iter, id); 1147 keyword_hide_in(keyword_tree, &iter, id);
1137 /* no need to check children of hidden node */ 1148 /* no need to check children of hidden node */
1138 } 1149 }
1139 else 1150 else