From: Georges Basile Stavracas Neto Date: Sun, 9 Oct 2022 20:21:29 +0000 (-0300) Subject: searchenginemodel: Use GListModel API to filter X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~9^2~143^2~42 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=0a8743843227d24875908fb5ffa18e95e3eff7be;p=gtk4.git searchenginemodel: Use GListModel API to filter We now start a mini-series of commits that will ultimately remove the GtkTreeModel implementation of GtkFileSystemModel. As a first step, port GtkSearchEngineModel iter through the files using GListModel API. --- diff --git a/gtk/gtksearchenginemodel.c b/gtk/gtksearchenginemodel.c index 3923ea6813..18fde279bc 100644 --- a/gtk/gtksearchenginemodel.c +++ b/gtk/gtksearchenginemodel.c @@ -81,37 +81,37 @@ static gboolean do_search (gpointer data) { GtkSearchEngineModel *model = data; - GtkTreeIter iter; GList *hits = NULL; gboolean got_results = FALSE; - if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (model->model), &iter)) + for (guint i = 0; i < g_list_model_get_n_items (G_LIST_MODEL (model->model)); i++) { - do - { - GFileInfo *info; - - info = _gtk_file_system_model_get_info (model->model, &iter); - if (info_matches_query (model->query, info)) - { - GFile *file; - GtkSearchHit *hit; - - file = _gtk_file_system_model_get_file (model->model, &iter); - hit = g_new (GtkSearchHit, 1); - hit->file = g_object_ref (file); - hit->info = g_object_ref (info); - hits = g_list_prepend (hits, hit); - } - } - while (gtk_tree_model_iter_next (GTK_TREE_MODEL (model->model), &iter)); + GtkFileSystemItem *item; + GFileInfo *info; - if (hits) + item = g_list_model_get_item (G_LIST_MODEL (model->model), i); + info = _gtk_file_system_item_get_file_info (item); + + if (info_matches_query (model->query, info)) { - _gtk_search_engine_hits_added (GTK_SEARCH_ENGINE (model), hits); - g_list_free_full (hits, (GDestroyNotify)_gtk_search_hit_free); - got_results = TRUE; + GFile *file; + GtkSearchHit *hit; + + file = _gtk_file_system_item_get_file (item); + hit = g_new (GtkSearchHit, 1); + hit->file = g_object_ref (file); + hit->info = g_object_ref (info); + hits = g_list_prepend (hits, hit); } + + g_clear_object (&item); + } + + if (hits) + { + _gtk_search_engine_hits_added (GTK_SEARCH_ENGINE (model), hits); + g_list_free_full (hits, (GDestroyNotify)_gtk_search_hit_free); + got_results = TRUE; } model->idle = 0;