[nautilus] search-directory: simplify start/stop search code
- From: Cosimo Cecchi <cosimoc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus] search-directory: simplify start/stop search code
- Date: Mon, 15 Oct 2012 14:03:23 +0000 (UTC)
commit dc0572d7c973491d3d152c946d5156ccadc653ee
Author: Cosimo Cecchi <cosimoc gnome org>
Date: Fri Oct 12 18:47:27 2012 -0400
search-directory: simplify start/stop search code
Keep code to start and stop the search engine in a single place, create
it together with the directory and simplify start/stop invariants.
libnautilus-private/nautilus-search-directory.c | 137 +++++++++++------------
1 files changed, 65 insertions(+), 72 deletions(-)
---
diff --git a/libnautilus-private/nautilus-search-directory.c b/libnautilus-private/nautilus-search-directory.c
index ff56e5b..47e987c 100644
--- a/libnautilus-private/nautilus-search-directory.c
+++ b/libnautilus-private/nautilus-search-directory.c
@@ -49,7 +49,6 @@ struct NautilusSearchDirectoryDetails {
gboolean search_finished;
GList *files;
- GHashTable *file_hash;
GList *monitor_list;
GList *callback_list;
@@ -97,26 +96,6 @@ static void search_callback_file_ready_callback (NautilusFile *file, gpointer da
static void file_changed (NautilusFile *file, NautilusSearchDirectory *search);
static void
-ensure_search_engine (NautilusSearchDirectory *search)
-{
- if (!search->details->engine) {
- search->details->engine = nautilus_search_engine_new ();
- g_signal_connect (search->details->engine, "hits-added",
- G_CALLBACK (search_engine_hits_added),
- search);
- g_signal_connect (search->details->engine, "hits-subtracted",
- G_CALLBACK (search_engine_hits_subtracted),
- search);
- g_signal_connect (search->details->engine, "finished",
- G_CALLBACK (search_engine_finished),
- search);
- g_signal_connect (search->details->engine, "error",
- G_CALLBACK (search_engine_error),
- search);
- }
-}
-
-static void
reset_file_list (NautilusSearchDirectory *search)
{
GList *list, *monitor_list;
@@ -143,37 +122,48 @@ reset_file_list (NautilusSearchDirectory *search)
}
static void
-start_or_stop_search_engine (NautilusSearchDirectory *search, gboolean adding)
+start_search (NautilusSearchDirectory *search)
{
- if (adding && (search->details->monitor_list ||
- search->details->pending_callback_list) &&
- search->details->query &&
- !search->details->search_running) {
- NautilusSearchEngineModel *model_provider;
+ NautilusSearchEngineModel *model_provider;
- /* We need to start the search engine */
- search->details->search_running = TRUE;
- search->details->search_finished = FALSE;
- ensure_search_engine (search);
- nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (search->details->engine),
- search->details->query);
+ if (!search->details->query) {
+ return;
+ }
- model_provider = nautilus_search_engine_get_model_provider (search->details->engine);
- nautilus_search_engine_model_set_model (model_provider, search->details->base_model);
+ if (search->details->search_running) {
+ return;
+ }
- reset_file_list (search);
+ if (!search->details->monitor_list && !search->details->pending_callback_list) {
+ return;
+ }
+
+ /* We need to start the search engine */
+ search->details->search_running = TRUE;
+ search->details->search_finished = FALSE;
- nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (search->details->engine));
- } else if (!adding && (!search->details->monitor_list ||
- !search->details->pending_callback_list) &&
- search->details->engine &&
- search->details->search_running) {
- search->details->search_running = FALSE;
- nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (search->details->engine));
+ nautilus_search_provider_set_query (NAUTILUS_SEARCH_PROVIDER (search->details->engine),
+ search->details->query);
- reset_file_list (search);
+ model_provider = nautilus_search_engine_get_model_provider (search->details->engine);
+ nautilus_search_engine_model_set_model (model_provider, search->details->base_model);
+
+ reset_file_list (search);
+
+ nautilus_search_provider_start (NAUTILUS_SEARCH_PROVIDER (search->details->engine));
+}
+
+static void
+stop_search (NautilusSearchDirectory *search)
+{
+ if (!search->details->search_running) {
+ return;
}
+ search->details->search_running = FALSE;
+ nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (search->details->engine));
+
+ reset_file_list (search);
}
static void
@@ -220,7 +210,7 @@ search_monitor_add (NautilusDirectory *directory,
nautilus_file_monitor_add (file, monitor, file_attributes);
}
- start_or_stop_search_engine (search, TRUE);
+ start_search (search);
}
static void
@@ -266,7 +256,9 @@ search_monitor_remove (NautilusDirectory *directory,
}
}
- start_or_stop_search_engine (search, FALSE);
+ if (!search->details->monitor_list) {
+ stop_search (search);
+ }
}
static void
@@ -430,7 +422,7 @@ search_call_when_ready (NautilusDirectory *directory,
g_list_prepend (search->details->pending_callback_list, search_callback);
/* We might need to start the search engine */
- start_or_stop_search_engine (search, TRUE);
+ start_search (search);
} else {
search_callback->file_list = nautilus_file_list_copy (search->details->files);
search_callback->non_ready_hash = file_list_to_hash_table (search->details->files);
@@ -474,8 +466,9 @@ search_cancel_callback (NautilusDirectory *directory,
search_callback_destroy (search_callback);
- /* We might need to stop the search engine now */
- start_or_stop_search_engine (search, FALSE);
+ if (!search->details->pending_callback_list) {
+ stop_search (search);
+ }
}
}
@@ -621,17 +614,9 @@ search_force_reload (NautilusDirectory *directory)
search->details->search_finished = FALSE;
- if (!search->details->engine) {
- return;
- }
-
/* Remove file monitors */
reset_file_list (search);
-
- if (search->details->search_running) {
- nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (search->details->engine));
- search->details->search_running = FALSE;
- }
+ stop_search (search);
}
static gboolean
@@ -764,15 +749,9 @@ search_dispose (GObject *object)
}
g_clear_object (&search->details->query);
+ stop_search (search);
- if (search->details->engine) {
- if (search->details->search_running) {
- nautilus_search_provider_stop (NAUTILUS_SEARCH_PROVIDER (search->details->engine));
- }
-
- g_object_unref (search->details->engine);
- search->details->engine = NULL;
- }
+ g_clear_object (&search->details->engine);
G_OBJECT_CLASS (nautilus_search_directory_parent_class)->dispose (object);
}
@@ -793,6 +772,20 @@ nautilus_search_directory_init (NautilusSearchDirectory *search)
{
search->details = G_TYPE_INSTANCE_GET_PRIVATE (search, NAUTILUS_TYPE_SEARCH_DIRECTORY,
NautilusSearchDirectoryDetails);
+
+ search->details->engine = nautilus_search_engine_new ();
+ g_signal_connect (search->details->engine, "hits-added",
+ G_CALLBACK (search_engine_hits_added),
+ search);
+ g_signal_connect (search->details->engine, "hits-subtracted",
+ G_CALLBACK (search_engine_hits_subtracted),
+ search);
+ g_signal_connect (search->details->engine, "finished",
+ G_CALLBACK (search_engine_finished),
+ search);
+ g_signal_connect (search->details->engine, "error",
+ G_CALLBACK (search_engine_error),
+ search);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]