static void bar_pane_keywords_hide_cb(GtkWidget *menu_widget, gpointer data) { PaneKeywordsData *pkd = data; GtkTreeModel *model; GtkTreeIter iter; GtkTreeModel *keyword_tree; GtkTreeIter kw_iter; if (!pkd->click_tpath) return; model = gtk_tree_view_get_model(GTK_TREE_VIEW(pkd->keyword_treeview)); keyword_tree = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(model)); if (!gtk_tree_model_get_iter(model, &iter, pkd->click_tpath)) return; gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model), &kw_iter, &iter); keyword_hide_in(GTK_TREE_STORE(keyword_tree), &kw_iter, model); }
static void keyword_hide_unset_in_recursive(GtkTreeStore *keyword_tree, GtkTreeIter *iter_ptr, gpointer id, GList *keywords) { GtkTreeIter iter = *iter_ptr; while (TRUE) { 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 */ } else { GtkTreeIter child; if (gtk_tree_model_iter_children(GTK_TREE_MODEL(keyword_tree), &child, &iter)) { keyword_hide_unset_in_recursive(keyword_tree, &child, id, keywords); } } if (!gtk_tree_model_iter_next(GTK_TREE_MODEL(keyword_tree), &iter)) return; } }