From 3ade071f273aaa973e44bf95d6b1d4913a18f03b Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:39:48 +0200 Subject: Adding upstream version 43.2. Signed-off-by: Daniel Baumann --- src/nautilus-search-provider.h | 101 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 src/nautilus-search-provider.h (limited to 'src/nautilus-search-provider.h') diff --git a/src/nautilus-search-provider.h b/src/nautilus-search-provider.h new file mode 100644 index 0000000..a1ff6f3 --- /dev/null +++ b/src/nautilus-search-provider.h @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2012 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, see . + */ + +#pragma once + +#include +#include "nautilus-query.h" +#include "nautilus-search-hit.h" + +G_BEGIN_DECLS + +typedef enum { + NAUTILUS_SEARCH_PROVIDER_STATUS_NORMAL, + NAUTILUS_SEARCH_PROVIDER_STATUS_RESTARTING +} NautilusSearchProviderStatus; + +typedef enum { + NAUTILUS_SEARCH_ENGINE_ALL_ENGINES, + NAUTILUS_SEARCH_ENGINE_TRACKER_ENGINE, + NAUTILUS_SEARCH_ENGINE_RECENT_ENGINE, + NAUTILUS_SEARCH_ENGINE_MODEL_ENGINE, + NAUTILUS_SEARCH_ENGINE_SIMPLE_ENGINE, +} NautilusSearchEngineTarget; + +#define NAUTILUS_TYPE_SEARCH_PROVIDER (nautilus_search_provider_get_type ()) + +G_DECLARE_INTERFACE (NautilusSearchProvider, nautilus_search_provider, NAUTILUS, SEARCH_PROVIDER, GObject) + +struct _NautilusSearchProviderInterface { + GTypeInterface g_iface; + + /* VTable */ + void (*set_query) (NautilusSearchProvider *provider, NautilusQuery *query); + void (*start) (NautilusSearchProvider *provider); + void (*stop) (NautilusSearchProvider *provider); + + /* Signals */ + void (*hits_added) (NautilusSearchProvider *provider, GList *hits); + /* This signal has a status parameter because it's necesary to discern + * when the search engine finished normally or wheter it finished in a + * different situation that will cause the engine to do some action after + * finishing. + * + * For example, the search engine restarts itself if the client starts a + * new search before all the search providers finished its current ongoing search. + * + * A real use case of this is when the user change quickly the query of the search, + * the search engine stops all the search providers, but given that each search + * provider has its own thread it will be actually stopped in a unknown time. + * To fix that, the search engine marks itself for restarting if the client + * starts a new search and not all providers finished. Then it will emit + * its finished signal and restart all providers with the new search. + * + * That can cause that when the search engine emits its finished signal, + * it actually relates to old searchs that it stopped and not the one + * the client started lately. + * The client doesn't have a way to know wheter the finished signal + * relates to its current search or with an old search. + * + * To fix this situation, provide with the signal a status parameter, that + * provides a hint of how the search engine stopped or if it is going to realize + * some action afterwards, like restarting. + */ + void (*finished) (NautilusSearchProvider *provider, + NautilusSearchProviderStatus status); + void (*error) (NautilusSearchProvider *provider, const char *error_message); + gboolean (*is_running) (NautilusSearchProvider *provider); +}; + +GType nautilus_search_provider_get_type (void) G_GNUC_CONST; + +/* Interface Functions */ +void nautilus_search_provider_set_query (NautilusSearchProvider *provider, + NautilusQuery *query); +void nautilus_search_provider_start (NautilusSearchProvider *provider); +void nautilus_search_provider_stop (NautilusSearchProvider *provider); + +void nautilus_search_provider_hits_added (NautilusSearchProvider *provider, + GList *hits); +void nautilus_search_provider_finished (NautilusSearchProvider *provider, + NautilusSearchProviderStatus status); +void nautilus_search_provider_error (NautilusSearchProvider *provider, + const char *error_message); + +gboolean nautilus_search_provider_is_running (NautilusSearchProvider *provider); + +G_END_DECLS \ No newline at end of file -- cgit v1.2.3