[gnome-builder] devhelp: port devhelp search provider
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] devhelp: port devhelp search provider
- Date: Mon, 21 Dec 2015 07:52:55 +0000 (UTC)
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]