diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c index 51ba79e2e6..c9d4b57c1f 100644 --- a/gtk/gtkfilechooserwidget.c +++ b/gtk/gtkfilechooserwidget.c @@ -6125,27 +6125,38 @@ search_engine_hits_added_cb (GtkSearchEngine *engine, GList *hits, GtkFileChooserWidget *impl) { - GList *l, *files; + GList *l, *files, *files_with_info, *infos; GFile *file; files = NULL; + files_with_info = NULL; + infos = NULL; for (l = hits; l; l = l->next) { GtkSearchHit *hit = (GtkSearchHit *)l->data; file = g_file_new_for_uri (hit->uri); if (!file) continue; - files = g_list_prepend (files, file); + if (hit->info) + { + files_with_info = g_list_prepend (files_with_info, file); + infos = g_list_prepend (infos, g_object_ref (hit->info)); + } + else + files = g_list_prepend (files, file); } - if (files) + if (files || files_with_info) impl->priv->search_model_empty = FALSE; + _gtk_file_system_model_update_files (impl->priv->search_model, + files_with_info, infos); _gtk_file_system_model_add_and_query_files (impl->priv->search_model, - files, - MODEL_ATTRIBUTES); + files, MODEL_ATTRIBUTES); g_list_free_full (files, g_object_unref); + g_list_free_full (files_with_info, g_object_unref); + g_list_free_full (infos, g_object_unref); } /* Callback used from GtkSearchEngine when the query is done running */ diff --git a/gtk/gtkfilesystemmodel.c b/gtk/gtkfilesystemmodel.c index 096836bb64..3f7e7b1d24 100644 --- a/gtk/gtkfilesystemmodel.c +++ b/gtk/gtkfilesystemmodel.c @@ -1962,6 +1962,23 @@ _gtk_file_system_model_update_file (GtkFileSystemModel *model, emit_row_changed_for_node (model, id); } +void +_gtk_file_system_model_update_files (GtkFileSystemModel *model, + GList *files, + GList *infos) +{ + GList *l, *i; + + g_return_if_fail (GTK_IS_FILE_SYSTEM_MODEL (model)); + + freeze_updates (model); + + for (l = files, i = infos; l; l = l->next, i = i->next) + _gtk_file_system_model_update_file (model, (GFile *)l->data, (GFileInfo *)i->data); + + thaw_updates (model); +} + /** * _gtk_file_system_model_set_filter: * @mode: a #GtkFileSystemModel diff --git a/gtk/gtkfilesystemmodel.h b/gtk/gtkfilesystemmodel.h index 5a2c8b1eb3..b39be612ba 100644 --- a/gtk/gtkfilesystemmodel.h +++ b/gtk/gtkfilesystemmodel.h @@ -75,6 +75,9 @@ void _gtk_file_system_model_add_and_query_files (GtkFileSystemMod void _gtk_file_system_model_update_file (GtkFileSystemModel *model, GFile *file, GFileInfo *info); +void _gtk_file_system_model_update_files (GtkFileSystemModel *model, + GList *files, + GList *infos); void _gtk_file_system_model_set_show_hidden (GtkFileSystemModel *model, gboolean show_hidden);