[gnome-builder/wip/libide] libide: conform search to IdeObject and report search completion
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/libide] libide: conform search to IdeObject and report search completion
- Date: Mon, 16 Feb 2015 20:58:47 +0000 (UTC)
commit 5321a76960693796e2d58708d72ff74b91321883
Author: Christian Hergert <christian hergert me>
Date: Mon Feb 16 12:57:58 2015 -0800
libide: conform search to IdeObject and report search completion
libide/ide-search-context.c | 39 +++++++++++++++++++++++++++++++++++++++
libide/ide-search-context.h | 2 ++
libide/ide-search-engine.c | 17 ++++++++---------
libide/ide-search-result.c | 6 ------
4 files changed, 49 insertions(+), 15 deletions(-)
---
diff --git a/libide/ide-search-context.c b/libide/ide-search-context.c
index bec7430..b8c07a6 100644
--- a/libide/ide-search-context.c
+++ b/libide/ide-search-context.c
@@ -26,12 +26,14 @@ struct _IdeSearchContext
GCancellable *cancellable;
GList *providers;
+ guint in_progress;
guint executed : 1;
};
G_DEFINE_TYPE (IdeSearchContext, ide_search_context, IDE_TYPE_OBJECT)
enum {
+ COMPLETED,
COUNT_SET,
RESULT_ADDED,
RESULT_REMOVED,
@@ -40,6 +42,26 @@ enum {
static guint gSignals [LAST_SIGNAL];
+gboolean
+ide_search_context_get_completed (IdeSearchContext *self)
+{
+ g_return_val_if_fail (IDE_IS_SEARCH_CONTEXT (self), 0);
+
+ return (self->in_progress == 0);
+}
+
+void
+ide_search_context_provider_completed (IdeSearchContext *self,
+ IdeSearchProvider *provider)
+{
+ g_return_if_fail (IDE_IS_SEARCH_CONTEXT (self));
+ g_return_if_fail (IDE_IS_SEARCH_CONTEXT (provider));
+ g_return_if_fail (g_list_find (self->providers, provider));
+
+ if (--self->in_progress == 0)
+ g_signal_emit (self, gSignals [COMPLETED], 0);
+}
+
/**
* ide_search_context_get_providers:
*
@@ -102,6 +124,13 @@ ide_search_context_execute (IdeSearchContext *self,
g_return_if_fail (search_terms);
self->executed = TRUE;
+ self->in_progress = g_list_length (self->providers);
+
+ if (!self->in_progress)
+ {
+ g_signal_emit (self, gSignals [COMPLETED], 0);
+ return;
+ }
for (iter = self->providers; iter; iter = iter->next)
{
@@ -160,6 +189,16 @@ ide_search_context_class_init (IdeSearchContextClass *klass)
object_class->finalize = ide_search_context_finalize;
+ gSignals [COMPLETED] =
+ g_signal_new ("completed",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+
gSignals [COUNT_SET] =
g_signal_new ("count-set",
G_TYPE_FROM_CLASS (klass),
diff --git a/libide/ide-search-context.h b/libide/ide-search-context.h
index 6fdf83e..55fec02 100644
--- a/libide/ide-search-context.h
+++ b/libide/ide-search-context.h
@@ -28,6 +28,8 @@ G_BEGIN_DECLS
G_DECLARE_FINAL_TYPE (IdeSearchContext, ide_search_context, IDE, SEARCH_CONTEXT, IdeObject)
const GList *ide_search_context_get_providers (IdeSearchContext *self);
+void ide_search_context_provider_completed (IdeSearchContext *self,
+ IdeSearchProvider *provider);
void ide_search_context_add_result (IdeSearchContext *self,
IdeSearchProvider *provider,
IdeSearchResult *result);
diff --git a/libide/ide-search-engine.c b/libide/ide-search-engine.c
index cd4d0bd..dcefa5f 100644
--- a/libide/ide-search-engine.c
+++ b/libide/ide-search-engine.c
@@ -57,7 +57,8 @@ ide_search_engine_search (IdeSearchEngine *self,
const GList *providers,
const gchar *search_terms)
{
- IdeSearchContext *context;
+ IdeSearchContext *search_context;
+ IdeContext *context;
const GList *iter;
g_return_val_if_fail (IDE_IS_SEARCH_ENGINE (self), NULL);
@@ -66,17 +67,15 @@ ide_search_engine_search (IdeSearchEngine *self,
if (!providers)
providers = self->providers;
- if (!providers)
- return NULL;
-
- context = g_object_new (IDE_TYPE_SEARCH_CONTEXT,
- "context", context,
- NULL);
+ context = ide_object_get_context (IDE_OBJECT (self));
+ search_context = g_object_new (IDE_TYPE_SEARCH_CONTEXT,
+ "context", context,
+ NULL);
for (iter = providers; iter; iter = iter->next)
- _ide_search_context_add_provider (context, iter->data, 0);
+ _ide_search_context_add_provider (search_context, iter->data, 0);
- return context;
+ return search_context;
}
/**
diff --git a/libide/ide-search-result.c b/libide/ide-search-result.c
index a530b53..a6f4382 100644
--- a/libide/ide-search-result.c
+++ b/libide/ide-search-result.c
@@ -32,12 +32,6 @@ enum {
static GParamSpec *gParamSpecs [LAST_PROP];
-IdeSearchResult *
-ide_search_result_new (void)
-{
- return g_object_new (IDE_TYPE_SEARCH_RESULT, NULL);
-}
-
static void
ide_search_result_finalize (GObject *object)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]