diff options
author | Matthias Clasen <mclasen@redhat.com> | 2020-07-12 23:16:35 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2020-07-12 23:16:35 +0000 |
commit | 4a8330fda071bc3001a03f2007500579195ef0a7 (patch) | |
tree | b87f56b8b41c548743548681b878beb19fc70790 | |
parent | 032302c358bc126cbb48d7e1566a28d41c94e60a (diff) | |
parent | b4096cee640002e5a63a3d6bb26cb07b7dd7621d (diff) | |
download | gtk+-4a8330fda071bc3001a03f2007500579195ef0a7.tar.gz |
Merge branch 'matthiasc/for-master' into 'master'
gtk-demo: Work harder to filter the tree
See merge request GNOME/gtk!2234
-rw-r--r-- | demos/gtk-demo/main.c | 53 |
1 files changed, 40 insertions, 13 deletions
diff --git a/demos/gtk-demo/main.c b/demos/gtk-demo/main.c index 5bad5e80aa..880dcbaf1b 100644 --- a/demos/gtk-demo/main.c +++ b/demos/gtk-demo/main.c @@ -966,11 +966,32 @@ selection_cb (GtkSingleSelection *sel, } static gboolean +filter_demo (GtkDemo *demo) +{ + int i; + + /* Show only if the name maches every needle */ + for (i = 0; search_needle[i]; i++) + { + if (!demo->title) + return FALSE; + + if (g_str_match_string (search_needle[i], demo->title, TRUE)) + continue; + + return FALSE; + } + + return TRUE; +} + +static gboolean demo_filter_by_name (GtkTreeListRow *row, GtkFilterListModel *model) { + GListModel *children; GtkDemo *demo; - guint i; + guint i, n; /* Show all items if search is empty */ if (!search_needle || !search_needle[0] || !*search_needle[0]) @@ -979,22 +1000,28 @@ demo_filter_by_name (GtkTreeListRow *row, g_assert (GTK_IS_TREE_LIST_ROW (row)); g_assert (GTK_IS_FILTER_LIST_MODEL (model)); - demo = gtk_tree_list_row_get_item (row); - g_assert (GTK_IS_DEMO (demo)); - - /* Show only if the name maches every needle */ - for (i = 0; search_needle[i]; i++) + children = gtk_tree_list_row_get_children (row); + if (children) { - if (!demo->title) - return FALSE; - - if (g_str_match_string (search_needle[i], demo->title, TRUE)) - continue; + n = g_list_model_get_n_items (children); + for (i = 0; i < n; i++) + { + demo = g_list_model_get_item (children, i); + g_assert (GTK_IS_DEMO (demo)); - return FALSE; + if (filter_demo (demo)) + { + g_object_unref (demo); + return TRUE; + } + g_object_unref (demo); + } } - return TRUE; + demo = gtk_tree_list_row_get_item (row); + g_assert (GTK_IS_DEMO (demo)); + + return filter_demo (demo); } static void |