[gnome-builder] libide: conform search to IdeObject and report search completion



commit 814166a7d9ea2cabfd6de872c0b34f5c12b8e0aa
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]