Maybe one more comment - I think it would be good to always update all children, i.e.
```diff diff --git a/src/prefs.c b/src/prefs.c index ec609e5c7..81cc3d623 100644 --- a/src/prefs.c +++ b/src/prefs.c @@ -1444,7 +1444,7 @@ static void kb_tree_update_visibility(GtkTreeStore *store, const gchar *entry_te return;
/* foreach child */ - while (!visible_parent) + while (TRUE) { gboolean visible; gchar *action_name; @@ -1459,7 +1459,7 @@ static void kb_tree_update_visibility(GtkTreeStore *store, const gchar *entry_te if (visible) visible_children = TRUE;
- gtk_tree_store_set(store, &child, KB_TREE_VISIBLE, visible, -1); + gtk_tree_store_set(store, &child, KB_TREE_VISIBLE, visible || visible_parent, -1);
if (! gtk_tree_model_iter_next(model, &child)) break; ```
When you try to search for something like "file ff", it filters out everything. But when you remove the last "f" (so the entry contins "file f"), it should again show all items from the "File" group. It doesn't happen now because children visibility was set to FALSE previously and they don't get re-updated because the while loop is skipped.