diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c index 6c115f99ff..fe41f32f0b 100644 --- a/gtk/gtkfilechooserwidget.c +++ b/gtk/gtkfilechooserwidget.c @@ -7372,6 +7372,7 @@ search_engine_hits_added_cb (GtkSearchEngine *engine, /* Callback used from GtkSearchEngine when the query is done running */ static void search_engine_finished_cb (GtkSearchEngine *engine, + gboolean got_results, gpointer data) { GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (data); @@ -7386,7 +7387,7 @@ search_engine_finished_cb (GtkSearchEngine *engine, priv->show_progress_timeout = 0; } - if (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (priv->search_model), NULL) == 0) + if (!got_results) { gtk_stack_set_visible_child_name (GTK_STACK (priv->browse_files_stack), "empty"); gtk_entry_grab_focus_without_selecting (GTK_ENTRY (priv->search_entry)); diff --git a/gtk/gtksearchengine.c b/gtk/gtksearchengine.c index 74496c9695..b30bc4c38e 100644 --- a/gtk/gtksearchengine.c +++ b/gtk/gtksearchengine.c @@ -40,6 +40,7 @@ struct _GtkSearchEnginePrivate { GtkSearchEngine *simple; gboolean simple_running; + gboolean got_results; gchar *simple_error; GtkSearchEngine *model; @@ -185,7 +186,7 @@ _gtk_search_engine_class_init (GtkSearchEngineClass *class) G_STRUCT_OFFSET (GtkSearchEngineClass, finished), NULL, NULL, NULL, - G_TYPE_NONE, 0); + G_TYPE_NONE, 1, G_TYPE_BOOLEAN); signals[ERROR] = g_signal_new (I_("error"), @@ -256,13 +257,16 @@ update_status (GtkSearchEngine *engine) else if (engine->priv->model_error) _gtk_search_engine_error (engine, engine->priv->model_error); else - _gtk_search_engine_finished (engine); + _gtk_search_engine_finished (engine, engine->priv->got_results); + + engine->priv->got_results = FALSE; } } } static void finished (GtkSearchEngine *engine, + gboolean got_results, gpointer data) { GtkSearchEngine *composite = GTK_SEARCH_ENGINE (data); @@ -274,6 +278,7 @@ finished (GtkSearchEngine *engine, else if (engine == composite->priv->model) composite->priv->model_running = FALSE; + composite->priv->got_results |= got_results; update_status (composite); } @@ -433,11 +438,12 @@ _gtk_search_engine_hits_added (GtkSearchEngine *engine, } void -_gtk_search_engine_finished (GtkSearchEngine *engine) +_gtk_search_engine_finished (GtkSearchEngine *engine, + gboolean got_results) { g_return_if_fail (GTK_IS_SEARCH_ENGINE (engine)); - g_signal_emit (engine, signals[FINISHED], 0); + g_signal_emit (engine, signals[FINISHED], 0, got_results); } void diff --git a/gtk/gtksearchengine.h b/gtk/gtksearchengine.h index c3d181274d..0c11324d04 100644 --- a/gtk/gtksearchengine.h +++ b/gtk/gtksearchengine.h @@ -82,7 +82,8 @@ void _gtk_search_engine_stop (GtkSearchEngine *engine); void _gtk_search_engine_hits_added (GtkSearchEngine *engine, GList *hits); -void _gtk_search_engine_finished (GtkSearchEngine *engine); +void _gtk_search_engine_finished (GtkSearchEngine *engine, + gboolean got_results); void _gtk_search_engine_error (GtkSearchEngine *engine, const gchar *error_message); void _gtk_search_engine_set_recursive (GtkSearchEngine *engine, diff --git a/gtk/gtksearchenginequartz.c b/gtk/gtksearchenginequartz.c index 60d7b62c22..ddf20b8aa7 100644 --- a/gtk/gtksearchenginequartz.c +++ b/gtk/gtksearchenginequartz.c @@ -130,7 +130,7 @@ G_DEFINE_TYPE_WITH_PRIVATE (GtkSearchEngineQuartz, _gtk_search_engine_quartz, GT [self submitHits:ns_query]; - _gtk_search_engine_finished (engine); + _gtk_search_engine_finished (engine, submitted_hits > 0); submitted_hits = 0; } diff --git a/gtk/gtksearchenginesimple.c b/gtk/gtksearchenginesimple.c index 2c3185d49e..07e08f2f31 100644 --- a/gtk/gtksearchenginesimple.c +++ b/gtk/gtksearchenginesimple.c @@ -40,6 +40,7 @@ typedef struct GQueue *directories; + guint got_results : 1; gint n_processed_files; GList *hits; @@ -138,7 +139,10 @@ search_thread_done_idle (gpointer user_data) data = user_data; if (!g_cancellable_is_cancelled (data->cancellable)) - _gtk_search_engine_finished (GTK_SEARCH_ENGINE (data->engine)); + { + _gtk_search_engine_finished (GTK_SEARCH_ENGINE (data->engine), + data->got_results); + } data->engine->active_search = NULL; search_thread_data_free (data); @@ -183,6 +187,7 @@ send_batch (SearchThreadData *data) id = gdk_threads_add_idle (search_thread_add_hits_idle, batch); g_source_set_name_by_id (id, "[gtk+] search_thread_add_hits_idle"); + data->got_results = TRUE; } data->hits = NULL; diff --git a/gtk/gtksearchenginetracker.c b/gtk/gtksearchenginetracker.c index 4a8188d488..7350d5e354 100644 --- a/gtk/gtksearchenginetracker.c +++ b/gtk/gtksearchenginetracker.c @@ -291,7 +291,7 @@ query_callback (GObject *object, if (!reply) { - _gtk_search_engine_finished (GTK_SEARCH_ENGINE (tracker)); + _gtk_search_engine_finished (GTK_SEARCH_ENGINE (tracker), FALSE); g_object_unref (tracker); return; } @@ -315,7 +315,7 @@ query_callback (GObject *object, } _gtk_search_engine_hits_added (GTK_SEARCH_ENGINE (tracker), hits); - _gtk_search_engine_finished (GTK_SEARCH_ENGINE (tracker)); + _gtk_search_engine_finished (GTK_SEARCH_ENGINE (tracker), i > 0); g_list_free (hits); for (i = 0; i < n; i++)