[gnome-builder] devhelp: port devhelp search provider



commit 94e5b53b97e3adb4559df3da8b48a1ec952c5869
Author: Christian Hergert <chergert redhat com>
Date:   Tue Nov 24 02:13:34 2015 -0800

    devhelp: port devhelp search provider

 data/theme/Adwaita-shared.css                 |    2 +-
 libide/util/ide-gtk.c                         |   46 +++++
 libide/util/ide-gtk.h                         |    2 +
 plugins/devhelp/Makefile.am                   |    4 +
 plugins/devhelp/gbp-devhelp-panel.c           |   28 ++-
 plugins/devhelp/gbp-devhelp-panel.h           |    3 +
 plugins/devhelp/gbp-devhelp-plugin.c          |    4 +
 plugins/devhelp/gbp-devhelp-search-provider.c |  231 +++++++++++++++++++++++++
 plugins/devhelp/gbp-devhelp-search-provider.h |   32 ++++
 plugins/devhelp/gbp-devhelp-search-result.c   |  110 ++++++++++++
 plugins/devhelp/gbp-devhelp-search-result.h   |   32 ++++
 11 files changed, 484 insertions(+), 10 deletions(-)
---
diff --git a/data/theme/Adwaita-shared.css b/data/theme/Adwaita-shared.css
index 80a8814..041ce1c 100644
--- a/data/theme/Adwaita-shared.css
+++ b/data/theme/Adwaita-shared.css
@@ -118,7 +118,7 @@ layoutpane layoutstack box.header.notebook GtkSeparator.vertical {
 /*
  * Adjust devhelp styling.
  */
-DhSidebar entry {
+devhelppanel entry:first-child {
   border-left: none;
   border-right: none;
   border-top: none;
diff --git a/libide/util/ide-gtk.c b/libide/util/ide-gtk.c
index 3618458..cf87ae4 100644
--- a/libide/util/ide-gtk.c
+++ b/libide/util/ide-gtk.c
@@ -220,3 +220,49 @@ ide_widget_get_workbench (GtkWidget *widget)
 
   return NULL;
 }
+
+static void
+ide_widget_find_child_typed_cb (GtkWidget *widget,
+                                gpointer   user_data)
+{
+  struct {
+    gpointer ret;
+    GType type;
+  } *state = user_data;
+
+  if (state->ret != NULL)
+    return;
+
+  if (g_type_is_a (G_OBJECT_TYPE (widget), state->type))
+    {
+      state->ret = widget;
+    }
+  else if (GTK_IS_CONTAINER (widget))
+    {
+      gtk_container_foreach (GTK_CONTAINER (widget),
+                             ide_widget_find_child_typed_cb,
+                             state);
+    }
+}
+
+gpointer
+ide_widget_find_child_typed (GtkWidget *widget,
+                             GType      child_type)
+{
+  struct {
+    gpointer ret;
+    GType type;
+  } state;
+
+  g_return_val_if_fail (GTK_IS_CONTAINER (widget), NULL);
+  g_return_val_if_fail (g_type_is_a (child_type, GTK_TYPE_WIDGET), NULL);
+
+  state.ret = NULL;
+  state.type = child_type;
+
+  gtk_container_foreach (GTK_CONTAINER (widget),
+                         ide_widget_find_child_typed_cb,
+                         &state);
+
+  return state.ret;
+}
diff --git a/libide/util/ide-gtk.h b/libide/util/ide-gtk.h
index d10cea3..866fbe6 100644
--- a/libide/util/ide-gtk.h
+++ b/libide/util/ide-gtk.h
@@ -38,6 +38,8 @@ void          ide_widget_set_context_handler (gpointer                 widget,
 void          ide_widget_hide_with_fade      (GtkWidget               *widget);
 void          ide_widget_show_with_fade      (GtkWidget               *widget);
 IdeWorkbench *ide_widget_get_workbench       (GtkWidget               *widget);
+gpointer      ide_widget_find_child_typed    (GtkWidget               *widget,
+                                              GType                    type);
 
 G_END_DECLS
 
diff --git a/plugins/devhelp/Makefile.am b/plugins/devhelp/Makefile.am
index cf116f8..16dfe2b 100644
--- a/plugins/devhelp/Makefile.am
+++ b/plugins/devhelp/Makefile.am
@@ -13,6 +13,10 @@ libdevhelp_plugin_la_SOURCES = \
        gbp-devhelp-panel.c \
        gbp-devhelp-panel.h \
        gbp-devhelp-plugin.c \
+       gbp-devhelp-search-provider.c \
+       gbp-devhelp-search-provider.h \
+       gbp-devhelp-search-result.c \
+       gbp-devhelp-search-result.h \
        gbp-devhelp-view.c \
        gbp-devhelp-view.h \
        gbp-devhelp-workbench-addin.c \
diff --git a/plugins/devhelp/gbp-devhelp-panel.c b/plugins/devhelp/gbp-devhelp-panel.c
index 39fa0c5..06181d2 100644
--- a/plugins/devhelp/gbp-devhelp-panel.c
+++ b/plugins/devhelp/gbp-devhelp-panel.c
@@ -40,14 +40,6 @@ enum {
 static GParamSpec *properties [LAST_PROP];
 
 static void
-fixup_box_border_width (GtkWidget *widget,
-                        gpointer   user_data)
-{
-  if (GTK_IS_BOX (widget))
-    gtk_container_set_border_width (GTK_CONTAINER (widget), 0);
-}
-
-static void
 gbp_devhelp_panel_find_view (GtkWidget *widget,
                              gpointer   user_data)
 {
@@ -95,17 +87,32 @@ gbp_devhelp_panel_link_selected (GbpDevhelpPanel *self,
   g_free (uri);
 }
 
+void
+gbp_devhelp_panel_set_uri (GbpDevhelpPanel *self,
+                           const gchar     *uri)
+{
+  g_return_if_fail (GBP_IS_DEVHELP_PANEL (self));
+  g_return_if_fail (uri != NULL);
+
+  dh_sidebar_select_uri (self->sidebar, uri);
+}
+
 static void
 gbp_devhelp_panel_constructed (GObject *object)
 {
   GbpDevhelpPanel *self = (GbpDevhelpPanel *)object;
+  GtkWidget *entry;
 
   G_OBJECT_CLASS (gbp_devhelp_panel_parent_class)->constructed (object);
 
   g_assert (self->books != NULL);
 
   self->sidebar = DH_SIDEBAR (dh_sidebar_new (self->books));
-  gtk_container_foreach (GTK_CONTAINER (self->sidebar), fixup_box_border_width, NULL);
+
+  entry = ide_widget_find_child_typed (GTK_WIDGET (self->sidebar), GTK_TYPE_ENTRY);
+  if (entry != NULL)
+    g_object_set (entry, "margin", 0, NULL);
+
   gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (self->sidebar));
   gtk_widget_show (GTK_WIDGET (self->sidebar));
 
@@ -149,11 +156,14 @@ static void
 gbp_devhelp_panel_class_init (GbpDevhelpPanelClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
 
   object_class->constructed = gbp_devhelp_panel_constructed;
   object_class->finalize = gbp_devhelp_panel_finalize;
   object_class->set_property = gbp_devhelp_panel_set_property;
 
+  gtk_widget_class_set_css_name (widget_class, "devhelppanel");
+
   properties [PROP_BOOK_MANAGER] =
     g_param_spec_object ("book-manager",
                          "Book Manager",
diff --git a/plugins/devhelp/gbp-devhelp-panel.h b/plugins/devhelp/gbp-devhelp-panel.h
index 858a3ef..50437d8 100644
--- a/plugins/devhelp/gbp-devhelp-panel.h
+++ b/plugins/devhelp/gbp-devhelp-panel.h
@@ -27,6 +27,9 @@ G_BEGIN_DECLS
 
 G_DECLARE_FINAL_TYPE (GbpDevhelpPanel, gbp_devhelp_panel, GBP, DEVHELP_PANEL, GtkBin)
 
+void gbp_devhelp_panel_set_uri (GbpDevhelpPanel *self,
+                                const gchar     *uri);
+
 G_END_DECLS
 
 #endif /* GBP_DEVHELP_PANEL_H */
diff --git a/plugins/devhelp/gbp-devhelp-plugin.c b/plugins/devhelp/gbp-devhelp-plugin.c
index 60f9add..3d2a158 100644
--- a/plugins/devhelp/gbp-devhelp-plugin.c
+++ b/plugins/devhelp/gbp-devhelp-plugin.c
@@ -19,6 +19,7 @@
 #include <ide.h>
 #include <libpeas/peas.h>
 
+#include "gbp-devhelp-search-provider.h"
 #include "gbp-devhelp-workbench-addin.h"
 
 void
@@ -27,4 +28,7 @@ peas_register_types (PeasObjectModule *module)
   peas_object_module_register_extension_type (module,
                                               IDE_TYPE_WORKBENCH_ADDIN,
                                               GBP_TYPE_DEVHELP_WORKBENCH_ADDIN);
+  peas_object_module_register_extension_type (module,
+                                              IDE_TYPE_SEARCH_PROVIDER,
+                                              GBP_TYPE_DEVHELP_SEARCH_PROVIDER);
 }
diff --git a/plugins/devhelp/gbp-devhelp-search-provider.c b/plugins/devhelp/gbp-devhelp-search-provider.c
new file mode 100644
index 0000000..e5a5d21
--- /dev/null
+++ b/plugins/devhelp/gbp-devhelp-search-provider.c
@@ -0,0 +1,231 @@
+/* gbp-devhelp-search-provider.c
+ *
+ * Copyright (C) 2015 Erick Pérez Castellanos <erick red gmail com>
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This file 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define G_LOG_DOMAIN "devhelp-search"
+
+#include <ctype.h>
+#include <devhelp/devhelp.h>
+#include <glib/gi18n.h>
+#include <ide.h>
+#include <libpeas/peas.h>
+
+#include "gbp-devhelp-panel.h"
+#include "gbp-devhelp-search-provider.h"
+#include "gbp-devhelp-search-result.h"
+
+struct _GbpDevhelpSearchProvider
+{
+  IdeObject          parent;
+
+  DhBookManager     *book_manager;
+  DhKeywordModel    *keywords_model;
+};
+
+static void search_provider_iface_init (IdeSearchProviderInterface *iface);
+
+G_DEFINE_TYPE_EXTENDED (GbpDevhelpSearchProvider,
+                        gbp_devhelp_search_provider,
+                        IDE_TYPE_OBJECT,
+                        0,
+                        G_IMPLEMENT_INTERFACE (IDE_TYPE_SEARCH_PROVIDER,
+                                               search_provider_iface_init))
+
+static void
+gbp_devhelp_search_provider_populate (IdeSearchProvider *provider,
+                                      IdeSearchContext  *context,
+                                      const gchar       *search_terms,
+                                      gsize              max_results,
+                                      GCancellable      *cancellable)
+{
+  GbpDevhelpSearchProvider *self = (GbpDevhelpSearchProvider *)provider;
+  g_auto(IdeSearchReducer) reducer = { 0 };
+  IdeContext *idecontext;
+  GtkTreeIter iter;
+  gboolean valid;
+  gint count = 0;
+  gint total;
+
+  g_assert (GBP_IS_DEVHELP_SEARCH_PROVIDER (self));
+  g_assert (IDE_IS_SEARCH_CONTEXT (context));
+  g_assert (search_terms);
+  g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
+
+  if (search_terms [0] == '\0')
+    {
+      ide_search_context_provider_completed (context, provider);
+      return;
+    }
+
+  idecontext = ide_object_get_context (IDE_OBJECT (provider));
+
+  dh_keyword_model_filter (self->keywords_model, search_terms, NULL, NULL);
+
+  ide_search_reducer_init (&reducer, context, provider, max_results);
+
+  valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->keywords_model), &iter);
+  total = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (self->keywords_model), NULL);
+
+  while (valid)
+    {
+      g_autoptr(IdeSearchResult) result = NULL;
+      g_autofree gchar *name = NULL;
+      DhLink *link = NULL;
+      gfloat score = (total - count) / (gfloat)total;
+
+      gtk_tree_model_get (GTK_TREE_MODEL (self->keywords_model), &iter,
+                          DH_KEYWORD_MODEL_COL_NAME, &name,
+                          DH_KEYWORD_MODEL_COL_LINK, &link,
+                          -1);
+
+      valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (self->keywords_model), &iter);
+
+      /* we traverse from best to worst, so just break */
+      if (!ide_search_reducer_accepts (&reducer, score))
+        break;
+
+      count++;
+
+      if ((dh_link_get_flags (link) & DH_LINK_FLAGS_DEPRECATED) != 0)
+        {
+          gchar *italic_name = g_strdup_printf ("<i>%s</i>", name);
+          g_free (name);
+          name = italic_name;
+        }
+
+      result = g_object_new (GBP_TYPE_DEVHELP_SEARCH_RESULT,
+                             "context", idecontext,
+                             "provider", provider,
+                             "title", name,
+                             "subtitle", dh_link_get_book_name (link),
+                             "score", score,
+                             "uri", dh_link_get_uri (link),
+                             NULL);
+
+      ide_search_reducer_push (&reducer, result);
+    }
+
+  ide_search_context_provider_completed (context, provider);
+}
+
+static const gchar *
+gbp_devhelp_search_provider_get_verb (IdeSearchProvider *provider)
+{
+  return _("Documentation");
+}
+
+static void
+gbp_devhelp_search_provider_constructed (GObject *object)
+{
+  GbpDevhelpSearchProvider *self = GBP_DEVHELP_SEARCH_PROVIDER (object);
+
+  dh_book_manager_populate (self->book_manager);
+  dh_keyword_model_set_words (self->keywords_model, self->book_manager);
+}
+
+static GtkWidget *
+gbp_devhelp_search_provider_create_row (IdeSearchProvider *provider,
+                                       IdeSearchResult   *result)
+{
+  g_assert (IDE_IS_SEARCH_PROVIDER (provider));
+  g_assert (IDE_IS_SEARCH_RESULT (result));
+
+  return g_object_new (IDE_TYPE_OMNI_SEARCH_ROW,
+                       "icon-name", "devhelp-symbolic",
+                       "result", result,
+                       "visible", TRUE,
+                       NULL);
+}
+
+static void
+gbp_devhelp_search_provider_activate (IdeSearchProvider *provider,
+                                      GtkWidget         *row,
+                                      IdeSearchResult   *result)
+{
+  IdePerspective *editor;
+  GbpDevhelpPanel *panel;
+  GtkWidget *toplevel;
+  GtkWidget *pane;
+  gchar *uri;
+
+  g_return_if_fail (GBP_IS_DEVHELP_SEARCH_PROVIDER (provider));
+  g_return_if_fail (GTK_IS_WIDGET (row));
+  g_return_if_fail (IDE_IS_SEARCH_RESULT (result));
+
+  toplevel = gtk_widget_get_toplevel (row);
+
+  if (!IDE_IS_WORKBENCH (toplevel))
+    return;
+
+  editor = ide_workbench_get_perspective_by_name (IDE_WORKBENCH (toplevel), "editor");
+  g_assert (editor != NULL);
+
+  pane = ide_layout_get_right_pane (IDE_LAYOUT (editor));
+  g_assert (pane != NULL);
+
+  panel = ide_widget_find_child_typed (pane, GBP_TYPE_DEVHELP_PANEL);
+  g_assert (pane != NULL);
+
+  g_object_get (result, "uri", &uri, NULL);
+
+  if (panel != NULL)
+    gbp_devhelp_panel_set_uri (panel, uri);
+
+  g_free (uri);
+}
+
+static gint
+gbp_devhelp_search_provider_get_priority (IdeSearchProvider *provider)
+{
+  return 100;
+}
+
+static void
+gbp_devhelp_search_provider_finalize (GObject *object)
+{
+  GbpDevhelpSearchProvider *self = GBP_DEVHELP_SEARCH_PROVIDER (object);
+
+  g_clear_object (&self->book_manager);
+
+  G_OBJECT_CLASS (gbp_devhelp_search_provider_parent_class)->finalize (object);
+}
+
+static void
+gbp_devhelp_search_provider_class_init (GbpDevhelpSearchProviderClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->constructed = gbp_devhelp_search_provider_constructed;
+  object_class->finalize = gbp_devhelp_search_provider_finalize;
+}
+
+static void
+gbp_devhelp_search_provider_init (GbpDevhelpSearchProvider *self)
+{
+  self->book_manager = dh_book_manager_new ();
+  self->keywords_model = dh_keyword_model_new ();
+}
+
+static void
+search_provider_iface_init (IdeSearchProviderInterface *iface)
+{
+  iface->create_row = gbp_devhelp_search_provider_create_row;
+  iface->get_verb = gbp_devhelp_search_provider_get_verb;
+  iface->populate = gbp_devhelp_search_provider_populate;
+  iface->activate = gbp_devhelp_search_provider_activate;
+  iface->get_priority = gbp_devhelp_search_provider_get_priority;
+}
diff --git a/plugins/devhelp/gbp-devhelp-search-provider.h b/plugins/devhelp/gbp-devhelp-search-provider.h
new file mode 100644
index 0000000..e8effb4
--- /dev/null
+++ b/plugins/devhelp/gbp-devhelp-search-provider.h
@@ -0,0 +1,32 @@
+/* gbp-devhelp-search-provider.h
+ *
+ * Copyright (C) 2015 Erick Pérez Castellanos <erick red gmail com>
+ *
+ * This file is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This file 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GBP_DEVHELP_SEARCH_PROVIDER_H
+#define GBP_DEVHELP_SEARCH_PROVIDER_H
+
+#include "ide-search-provider.h"
+
+G_BEGIN_DECLS
+
+#define GBP_TYPE_DEVHELP_SEARCH_PROVIDER (gbp_devhelp_search_provider_get_type())
+
+G_DECLARE_FINAL_TYPE (GbpDevhelpSearchProvider, gbp_devhelp_search_provider, GBP, DEVHELP_SEARCH_PROVIDER, 
IdeObject)
+
+G_END_DECLS
+
+#endif /* GBP_DEVHELP_SEARCH_PROVIDER_H */
diff --git a/plugins/devhelp/gbp-devhelp-search-result.c b/plugins/devhelp/gbp-devhelp-search-result.c
new file mode 100644
index 0000000..e667e00
--- /dev/null
+++ b/plugins/devhelp/gbp-devhelp-search-result.c
@@ -0,0 +1,110 @@
+/* gbp-devhelp-search-result.c
+ *
+ * Copyright (C) 2015 Christian Hergert <christian hergert me>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glib/gi18n.h>
+
+#include "gbp-devhelp-search-result.h"
+
+struct _GbpDevhelpSearchResult
+{
+  IdeSearchResult  parent_instance;
+  gchar           *uri;
+};
+
+enum
+{
+  PROP_0,
+  PROP_URI,
+  LAST_PROP
+};
+
+G_DEFINE_TYPE (GbpDevhelpSearchResult, gbp_devhelp_search_result, IDE_TYPE_SEARCH_RESULT)
+
+static GParamSpec *properties [LAST_PROP];
+
+static void
+gbp_devhelp_search_result_finalize (GObject *object)
+{
+  GbpDevhelpSearchResult *self = (GbpDevhelpSearchResult *)object;
+
+  g_clear_pointer (&self->uri, g_free);
+
+  G_OBJECT_CLASS (gbp_devhelp_search_result_parent_class)->finalize (object);
+}
+
+static void
+gbp_devhelp_search_result_get_property (GObject    *object,
+                                       guint       prop_id,
+                                       GValue     *value,
+                                       GParamSpec *pspec)
+{
+  GbpDevhelpSearchResult *self = GBP_DEVHELP_SEARCH_RESULT (object);
+
+  switch (prop_id)
+    {
+    case PROP_URI:
+      g_value_set_string (value, self->uri);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+    }
+}
+
+static void
+gbp_devhelp_search_result_set_property (GObject      *object,
+                                       guint         prop_id,
+                                       const GValue *value,
+                                       GParamSpec   *pspec)
+{
+  GbpDevhelpSearchResult *self = GBP_DEVHELP_SEARCH_RESULT (object);
+
+  switch (prop_id)
+    {
+    case PROP_URI:
+      self->uri = g_value_dup_string (value);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+    }
+}
+
+static void
+gbp_devhelp_search_result_class_init (GbpDevhelpSearchResultClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->finalize = gbp_devhelp_search_result_finalize;
+  object_class->get_property = gbp_devhelp_search_result_get_property;
+  object_class->set_property = gbp_devhelp_search_result_set_property;
+
+  properties [PROP_URI] =
+    g_param_spec_string ("uri",
+                         "URI",
+                         "The URI to the Devhelp document.",
+                         NULL,
+                         (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_properties (object_class, LAST_PROP, properties);
+}
+
+static void
+gbp_devhelp_search_result_init (GbpDevhelpSearchResult *result)
+{
+}
diff --git a/plugins/devhelp/gbp-devhelp-search-result.h b/plugins/devhelp/gbp-devhelp-search-result.h
new file mode 100644
index 0000000..8519925
--- /dev/null
+++ b/plugins/devhelp/gbp-devhelp-search-result.h
@@ -0,0 +1,32 @@
+/* gbp-devhelp-search-result.h
+ *
+ * Copyright (C) 2015 Christian Hergert <christian hergert me>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GBP_DEVHELP_SEARCH_RESULT_H
+#define GBP_DEVHELP_SEARCH_RESULT_H
+
+#include "ide-search-result.h"
+
+G_BEGIN_DECLS
+
+#define GBP_TYPE_DEVHELP_SEARCH_RESULT (gbp_devhelp_search_result_get_type())
+
+G_DECLARE_FINAL_TYPE (GbpDevhelpSearchResult, gbp_devhelp_search_result, GBP, DEVHELP_SEARCH_RESULT, 
IdeSearchResult)
+
+G_END_DECLS
+
+#endif /* GBP_DEVHELP_SEARCH_RESULT_H */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]