summaryrefslogtreecommitdiff
path: root/gtk/gtksearchenginesimple.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2015-06-19 00:11:01 -0400
committerMatthias Clasen <mclasen@redhat.com>2015-06-19 00:11:01 -0400
commitc7d86ef4e404e4a0e9ee9c48fa0d5e15c3f6fb6e (patch)
treed24bba46a819eba05e198ad2bffab704433ea860 /gtk/gtksearchenginesimple.c
parent33e2d12e908ad29f1d16505e591547abb4fb8d95 (diff)
downloadgtk+-c7d86ef4e404e4a0e9ee9c48fa0d5e15c3f6fb6e.tar.gz
GtkSearchEngine: Avoid crawling indexed locations
Add a framework to the simple engine that allows to skip locations which are indexed by the native engine.
Diffstat (limited to 'gtk/gtksearchenginesimple.c')
-rw-r--r--gtk/gtksearchenginesimple.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/gtk/gtksearchenginesimple.c b/gtk/gtksearchenginesimple.c
index 769dd04dc2..b405aef976 100644
--- a/gtk/gtksearchenginesimple.c
+++ b/gtk/gtksearchenginesimple.c
@@ -54,6 +54,9 @@ struct _GtkSearchEngineSimplePrivate
SearchThreadData *active_search;
gboolean query_finished;
+
+ GtkSearchEngineSimpleIsIndexed is_indexed_callback;
+ gpointer is_indexed_data;
};
@@ -179,6 +182,25 @@ send_batch (SearchThreadData *data)
data->hits = NULL;
}
+static gboolean
+is_indexed (GtkSearchEngineSimple *engine,
+ GFile *location)
+{
+ if (engine->priv->is_indexed_callback)
+ {
+ if (engine->priv->is_indexed_callback (location, engine->priv->is_indexed_data))
+ {
+ gchar *uri = g_file_get_uri (location);
+ g_debug ("Simple search engine: Skipping indexed location: %s\n", uri);
+ g_free (uri);
+
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
static void
visit_directory (GFile *dir, SearchThreadData *data)
{
@@ -227,7 +249,9 @@ visit_directory (GFile *dir, SearchThreadData *data)
if (data->n_processed_files > BATCH_SIZE)
send_batch (data);
- if (data->recursive && g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY)
+ if (data->recursive &&
+ g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY &&
+ !is_indexed (data->engine, child))
g_queue_push_tail (data->directories, g_object_ref (child));
}
@@ -337,3 +361,12 @@ _gtk_search_engine_simple_new (void)
{
return g_object_new (GTK_TYPE_SEARCH_ENGINE_SIMPLE, NULL);
}
+
+void
+_gtk_search_engine_simple_set_indexed_cb (GtkSearchEngineSimple *engine,
+ GtkSearchEngineSimpleIsIndexed callback,
+ gpointer data)
+{
+ engine->priv->is_indexed_callback = callback;
+ engine->priv->is_indexed_data = data;
+}