[gnome-builder] hover: ensure that hover providers are (un)loaded
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] hover: ensure that hover providers are (un)loaded
- Date: Fri, 20 Jul 2018 05:40:30 +0000 (UTC)
commit 30a7bc594e777761723ef2aecb2444b87175009a
Author: Christian Hergert <chergert redhat com>
Date: Wed Jul 18 14:43:25 2018 -0700
hover: ensure that hover providers are (un)loaded
src/libide/hover/ide-hover.c | 64 +++++++++++++++++++++++++++++++++++++++-----
1 file changed, 58 insertions(+), 6 deletions(-)
---
diff --git a/src/libide/hover/ide-hover.c b/src/libide/hover/ide-hover.c
index 832c513c2..514053720 100644
--- a/src/libide/hover/ide-hover.c
+++ b/src/libide/hover/ide-hover.c
@@ -660,15 +660,42 @@ ide_hover_init (IdeHover *self)
G_CONNECT_SWAPPED);
}
-IdeHover *
-_ide_hover_new (IdeSourceView *view)
+static void
+ide_hover_extension_added_cb (IdeExtensionSetAdapter *set,
+ PeasPluginInfo *plugin_info,
+ PeasExtension *exten,
+ gpointer user_data)
{
- IdeHover *self;
+ IdeHover *self = user_data;
+ IdeHoverProvider *provider = (IdeHoverProvider *)exten;
+ IdeSourceView *view;
- self = g_object_new (IDE_TYPE_HOVER, NULL);
- dzl_signal_group_set_target (self->signals, view);
+ g_assert (IDE_IS_EXTENSION_SET_ADAPTER (set));
+ g_assert (IDE_IS_HOVER (self));
+ g_assert (plugin_info != NULL);
+ g_assert (IDE_IS_HOVER_PROVIDER (provider));
- return self;
+ view = dzl_signal_group_get_target (self->signals);
+ ide_hover_provider_load (provider, view);
+}
+
+static void
+ide_hover_extension_removed_cb (IdeExtensionSetAdapter *set,
+ PeasPluginInfo *plugin_info,
+ PeasExtension *exten,
+ gpointer user_data)
+{
+ IdeHover *self = user_data;
+ IdeHoverProvider *provider = (IdeHoverProvider *)exten;
+ IdeSourceView *view;
+
+ g_assert (IDE_IS_EXTENSION_SET_ADAPTER (set));
+ g_assert (IDE_IS_HOVER (self));
+ g_assert (plugin_info != NULL);
+ g_assert (IDE_IS_HOVER_PROVIDER (provider));
+
+ view = dzl_signal_group_get_target (self->signals);
+ ide_hover_provider_unload (provider, view);
}
void
@@ -686,6 +713,20 @@ _ide_hover_set_context (IdeHover *self,
IDE_TYPE_HOVER_PROVIDER,
"Hover-Provider-Languages",
NULL);
+
+ g_signal_connect (self->providers,
+ "extension-added",
+ G_CALLBACK (ide_hover_extension_added_cb),
+ self);
+
+ g_signal_connect (self->providers,
+ "extension-removed",
+ G_CALLBACK (ide_hover_extension_removed_cb),
+ self);
+
+ ide_extension_set_adapter_foreach (self->providers,
+ ide_hover_extension_added_cb,
+ self);
}
void
@@ -697,3 +738,14 @@ _ide_hover_set_language (IdeHover *self,
if (self->providers != NULL)
ide_extension_set_adapter_set_value (self->providers, language);
}
+
+IdeHover *
+_ide_hover_new (IdeSourceView *view)
+{
+ IdeHover *self;
+
+ self = g_object_new (IDE_TYPE_HOVER, NULL);
+ dzl_signal_group_set_target (self->signals, view);
+
+ return self;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]