gtksearchengine: Add "got_results" argument to ::finished
The filechooser tries to figure out whether it got results by poking the model, but all files might go through the async GFileInfo querying state. Make all search engines (and the composite one) just notify about this fact, so the file chooser can behave appropriately without waiting for the async operations to finish.
This commit is contained in:
parent
85473d942c
commit
99031f885e
@ -7372,6 +7372,7 @@ search_engine_hits_added_cb (GtkSearchEngine *engine,
|
|||||||
/* Callback used from GtkSearchEngine when the query is done running */
|
/* Callback used from GtkSearchEngine when the query is done running */
|
||||||
static void
|
static void
|
||||||
search_engine_finished_cb (GtkSearchEngine *engine,
|
search_engine_finished_cb (GtkSearchEngine *engine,
|
||||||
|
gboolean got_results,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (data);
|
GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (data);
|
||||||
@ -7386,7 +7387,7 @@ search_engine_finished_cb (GtkSearchEngine *engine,
|
|||||||
priv->show_progress_timeout = 0;
|
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_stack_set_visible_child_name (GTK_STACK (priv->browse_files_stack), "empty");
|
||||||
gtk_entry_grab_focus_without_selecting (GTK_ENTRY (priv->search_entry));
|
gtk_entry_grab_focus_without_selecting (GTK_ENTRY (priv->search_entry));
|
||||||
|
@ -40,6 +40,7 @@ struct _GtkSearchEnginePrivate {
|
|||||||
|
|
||||||
GtkSearchEngine *simple;
|
GtkSearchEngine *simple;
|
||||||
gboolean simple_running;
|
gboolean simple_running;
|
||||||
|
gboolean got_results;
|
||||||
gchar *simple_error;
|
gchar *simple_error;
|
||||||
|
|
||||||
GtkSearchEngine *model;
|
GtkSearchEngine *model;
|
||||||
@ -185,7 +186,7 @@ _gtk_search_engine_class_init (GtkSearchEngineClass *class)
|
|||||||
G_STRUCT_OFFSET (GtkSearchEngineClass, finished),
|
G_STRUCT_OFFSET (GtkSearchEngineClass, finished),
|
||||||
NULL, NULL,
|
NULL, NULL,
|
||||||
NULL,
|
NULL,
|
||||||
G_TYPE_NONE, 0);
|
G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
|
||||||
|
|
||||||
signals[ERROR] =
|
signals[ERROR] =
|
||||||
g_signal_new (I_("error"),
|
g_signal_new (I_("error"),
|
||||||
@ -256,13 +257,16 @@ update_status (GtkSearchEngine *engine)
|
|||||||
else if (engine->priv->model_error)
|
else if (engine->priv->model_error)
|
||||||
_gtk_search_engine_error (engine, engine->priv->model_error);
|
_gtk_search_engine_error (engine, engine->priv->model_error);
|
||||||
else
|
else
|
||||||
_gtk_search_engine_finished (engine);
|
_gtk_search_engine_finished (engine, engine->priv->got_results);
|
||||||
|
|
||||||
|
engine->priv->got_results = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
finished (GtkSearchEngine *engine,
|
finished (GtkSearchEngine *engine,
|
||||||
|
gboolean got_results,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
GtkSearchEngine *composite = GTK_SEARCH_ENGINE (data);
|
GtkSearchEngine *composite = GTK_SEARCH_ENGINE (data);
|
||||||
@ -274,6 +278,7 @@ finished (GtkSearchEngine *engine,
|
|||||||
else if (engine == composite->priv->model)
|
else if (engine == composite->priv->model)
|
||||||
composite->priv->model_running = FALSE;
|
composite->priv->model_running = FALSE;
|
||||||
|
|
||||||
|
composite->priv->got_results |= got_results;
|
||||||
update_status (composite);
|
update_status (composite);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -433,11 +438,12 @@ _gtk_search_engine_hits_added (GtkSearchEngine *engine,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
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_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
|
void
|
||||||
|
@ -82,7 +82,8 @@ void _gtk_search_engine_stop (GtkSearchEngine *engine);
|
|||||||
|
|
||||||
void _gtk_search_engine_hits_added (GtkSearchEngine *engine,
|
void _gtk_search_engine_hits_added (GtkSearchEngine *engine,
|
||||||
GList *hits);
|
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,
|
void _gtk_search_engine_error (GtkSearchEngine *engine,
|
||||||
const gchar *error_message);
|
const gchar *error_message);
|
||||||
void _gtk_search_engine_set_recursive (GtkSearchEngine *engine,
|
void _gtk_search_engine_set_recursive (GtkSearchEngine *engine,
|
||||||
|
@ -130,7 +130,7 @@ G_DEFINE_TYPE_WITH_PRIVATE (GtkSearchEngineQuartz, _gtk_search_engine_quartz, GT
|
|||||||
|
|
||||||
[self submitHits:ns_query];
|
[self submitHits:ns_query];
|
||||||
|
|
||||||
_gtk_search_engine_finished (engine);
|
_gtk_search_engine_finished (engine, submitted_hits > 0);
|
||||||
submitted_hits = 0;
|
submitted_hits = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,6 +40,7 @@ typedef struct
|
|||||||
|
|
||||||
GQueue *directories;
|
GQueue *directories;
|
||||||
|
|
||||||
|
guint got_results : 1;
|
||||||
gint n_processed_files;
|
gint n_processed_files;
|
||||||
GList *hits;
|
GList *hits;
|
||||||
|
|
||||||
@ -138,7 +139,10 @@ search_thread_done_idle (gpointer user_data)
|
|||||||
data = user_data;
|
data = user_data;
|
||||||
|
|
||||||
if (!g_cancellable_is_cancelled (data->cancellable))
|
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;
|
data->engine->active_search = NULL;
|
||||||
search_thread_data_free (data);
|
search_thread_data_free (data);
|
||||||
@ -183,6 +187,7 @@ send_batch (SearchThreadData *data)
|
|||||||
|
|
||||||
id = gdk_threads_add_idle (search_thread_add_hits_idle, batch);
|
id = gdk_threads_add_idle (search_thread_add_hits_idle, batch);
|
||||||
g_source_set_name_by_id (id, "[gtk+] search_thread_add_hits_idle");
|
g_source_set_name_by_id (id, "[gtk+] search_thread_add_hits_idle");
|
||||||
|
data->got_results = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
data->hits = NULL;
|
data->hits = NULL;
|
||||||
|
@ -291,7 +291,7 @@ query_callback (GObject *object,
|
|||||||
|
|
||||||
if (!reply)
|
if (!reply)
|
||||||
{
|
{
|
||||||
_gtk_search_engine_finished (GTK_SEARCH_ENGINE (tracker));
|
_gtk_search_engine_finished (GTK_SEARCH_ENGINE (tracker), FALSE);
|
||||||
g_object_unref (tracker);
|
g_object_unref (tracker);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -315,7 +315,7 @@ query_callback (GObject *object,
|
|||||||
}
|
}
|
||||||
|
|
||||||
_gtk_search_engine_hits_added (GTK_SEARCH_ENGINE (tracker), hits);
|
_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);
|
g_list_free (hits);
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
|
Loading…
Reference in New Issue
Block a user