summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2020-07-12 23:16:35 +0000
committerMatthias Clasen <mclasen@redhat.com>2020-07-12 23:16:35 +0000
commit4a8330fda071bc3001a03f2007500579195ef0a7 (patch)
treeb87f56b8b41c548743548681b878beb19fc70790
parent032302c358bc126cbb48d7e1566a28d41c94e60a (diff)
parentb4096cee640002e5a63a3d6bb26cb07b7dd7621d (diff)
downloadgtk+-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.c53
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