[nautilus/gnome-3-6] search-engine-model: emit finished when cancelled in-flight
- From: Cosimo Cecchi <cosimoc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus/gnome-3-6] search-engine-model: emit finished when cancelled in-flight
- Date: Thu, 18 Oct 2012 19:08:57 +0000 (UTC)
commit 152807b2bee527f942432bbda2808c52539b5f4d
Author: Cosimo Cecchi <cosimoc gnome org>
Date: Thu Oct 18 14:28:45 2012 -0400
search-engine-model: emit finished when cancelled in-flight
If we get stopped while the directory ready callback is pending, make
sure to still emit the finished signal on the provider.
libnautilus-private/nautilus-search-engine-model.c | 31 ++++++++++++++-----
1 files changed, 23 insertions(+), 8 deletions(-)
---
diff --git a/libnautilus-private/nautilus-search-engine-model.c b/libnautilus-private/nautilus-search-engine-model.c
index 9ccaf6c..8b75cbc 100644
--- a/libnautilus-private/nautilus-search-engine-model.c
+++ b/libnautilus-private/nautilus-search-engine-model.c
@@ -41,6 +41,7 @@ struct NautilusSearchEngineModelDetails {
NautilusDirectory *directory;
gboolean query_pending;
+ guint finished_id;
};
static void nautilus_search_provider_init (NautilusSearchProviderIface *iface);
@@ -63,6 +64,11 @@ finalize (GObject *object)
model->details->hits = NULL;
}
+ if (model->details->finished_id != 0) {
+ g_source_remove (model->details->finished_id);
+ model->details->finished_id = 0;
+ }
+
g_clear_object (&model->details->directory);
g_clear_object (&model->details->query);
@@ -70,10 +76,8 @@ finalize (GObject *object)
}
static gboolean
-emit_finished_idle_cb (gpointer user_data)
+search_finished (NautilusSearchEngineModel *model)
{
- NautilusSearchEngineModel *model = user_data;
-
if (model->details->hits != NULL) {
nautilus_search_provider_hits_added (NAUTILUS_SEARCH_PROVIDER (model),
model->details->hits);
@@ -89,6 +93,16 @@ emit_finished_idle_cb (gpointer user_data)
}
static void
+search_finished_idle (NautilusSearchEngineModel *model)
+{
+ if (model->details->finished_id != 0) {
+ return;
+ }
+
+ model->details->finished_id = g_idle_add ((GSourceFunc) search_finished, model);
+}
+
+static void
model_directory_ready_cb (NautilusDirectory *directory,
GList *list,
gpointer user_data)
@@ -122,7 +136,7 @@ model_directory_ready_cb (NautilusDirectory *directory,
nautilus_file_list_free (files);
model->details->hits = hits;
- emit_finished_idle_cb (model);
+ search_finished (model);
}
static void
@@ -131,18 +145,19 @@ nautilus_search_engine_model_start (NautilusSearchProvider *provider)
NautilusSearchEngineModel *model;
model = NAUTILUS_SEARCH_ENGINE_MODEL (provider);
- g_object_ref (model);
if (model->details->query_pending) {
return;
}
+ g_object_ref (model);
+ model->details->query_pending = TRUE;
+
if (model->details->directory == NULL) {
- g_idle_add (emit_finished_idle_cb, model);
+ search_finished_idle (model);
return;
}
- model->details->query_pending = TRUE;
nautilus_directory_call_when_ready (model->details->directory,
NAUTILUS_FILE_ATTRIBUTE_INFO,
TRUE, model_directory_ready_cb, model);
@@ -158,7 +173,7 @@ nautilus_search_engine_model_stop (NautilusSearchProvider *provider)
if (model->details->query_pending) {
nautilus_directory_cancel_callback (model->details->directory,
model_directory_ready_cb, model);
- model->details->query_pending = FALSE;
+ search_finished_idle (model);
}
g_clear_object (&model->details->directory);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]