[gnome-builder] libide/sourceview: use IdeExtensionAdapter for indenter
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] libide/sourceview: use IdeExtensionAdapter for indenter
- Date: Sat, 23 Jul 2022 22:43:48 +0000 (UTC)
commit 000190b40f8b9b3c306729717f4feb9dad164c5a
Author: Christian Hergert <chergert redhat com>
Date: Sat Jul 23 15:43:42 2022 -0700
libide/sourceview: use IdeExtensionAdapter for indenter
We only want one indenter, and for it to be prioritized by plugin
priority metadata.
src/libide/sourceview/ide-source-view-addins.c | 87 +++++++------------------
src/libide/sourceview/ide-source-view-private.h | 2 +-
src/libide/sourceview/ide-source-view.c | 2 +-
3 files changed, 26 insertions(+), 65 deletions(-)
---
diff --git a/src/libide/sourceview/ide-source-view-addins.c b/src/libide/sourceview/ide-source-view-addins.c
index af408bd7d..c6140cfea 100644
--- a/src/libide/sourceview/ide-source-view-addins.c
+++ b/src/libide/sourceview/ide-source-view-addins.c
@@ -135,54 +135,21 @@ ide_source_view_hover_provider_removed_cb (IdeExtensionSetAdapter *adapter,
}
static void
-ide_source_view_indenter_added_cb (IdeExtensionSetAdapter *adapter,
- PeasPluginInfo *plugin_info,
- PeasExtension *exten,
- gpointer user_data)
+on_indenter_extension_changed_cb (IdeSourceView *self,
+ GParamSpec *pspec,
+ IdeExtensionAdapter *adapter)
{
- GtkSourceIndenter *indenter = (GtkSourceIndenter *)exten;
- IdeSourceView *self = user_data;
-
- IDE_ENTRY;
-
- g_assert (IDE_IS_EXTENSION_SET_ADAPTER (adapter));
- g_assert (plugin_info != NULL);
- g_assert (GTK_SOURCE_IS_INDENTER (indenter));
- g_assert (IDE_IS_SOURCE_VIEW (self));
-
- g_debug ("Adding indenter %s from module %s",
- G_OBJECT_TYPE_NAME (indenter),
- peas_plugin_info_get_module_name (plugin_info));
-
- // TODO: how to handle multiple indenters?
- gtk_source_view_set_indenter (GTK_SOURCE_VIEW (self), indenter);
-
- IDE_EXIT;
-}
-
-static void
-ide_source_view_indenter_removed_cb (IdeExtensionSetAdapter *adapter,
- PeasPluginInfo *plugin_info,
- PeasExtension *exten,
- gpointer user_data)
-{
- GtkSourceIndenter *indenter = (GtkSourceIndenter *)exten;
- IdeSourceView *self = user_data;
+ PeasExtension *indenter;
IDE_ENTRY;
- g_assert (IDE_IS_EXTENSION_SET_ADAPTER (adapter));
- g_assert (plugin_info != NULL);
- g_assert (GTK_SOURCE_IS_INDENTER (indenter));
+ g_assert (IDE_IS_MAIN_THREAD ());
g_assert (IDE_IS_SOURCE_VIEW (self));
+ g_assert (IDE_IS_EXTENSION_ADAPTER (adapter));
- g_debug ("Removing indenter %s from module %s",
- G_OBJECT_TYPE_NAME (indenter),
- peas_plugin_info_get_module_name (plugin_info));
-
- // TODO: how to handle multiple indenters?
- if (indenter == gtk_source_view_get_indenter (GTK_SOURCE_VIEW (self)))
- gtk_source_view_set_indenter (GTK_SOURCE_VIEW (self), NULL);
+ indenter = ide_extension_adapter_get_extension (adapter);
+ gtk_source_view_set_indenter (GTK_SOURCE_VIEW (self),
+ GTK_SOURCE_INDENTER (indenter));
IDE_EXIT;
}
@@ -248,24 +215,18 @@ _ide_source_view_addins_init (IdeSourceView *self,
ide_source_view_hover_provider_added_cb,
self);
- /* Create our hover providers and attach them */
- self->indenters =
- ide_extension_set_adapter_new (IDE_OBJECT (parent),
- peas_engine_get_default (),
- GTK_SOURCE_TYPE_INDENTER,
- "Indenter-Languages",
- language_id);
- g_signal_connect (self->indenters,
- "extension-added",
- G_CALLBACK (ide_source_view_indenter_added_cb),
- self);
- g_signal_connect (self->indenters,
- "extension-removed",
- G_CALLBACK (ide_source_view_indenter_removed_cb),
- self);
- ide_extension_set_adapter_foreach (self->indenters,
- ide_source_view_indenter_added_cb,
- self);
+ /* Create our indenter and attach it */
+ self->indenter =
+ ide_extension_adapter_new (IDE_OBJECT (parent),
+ peas_engine_get_default (),
+ GTK_SOURCE_TYPE_INDENTER,
+ "Indenter-Languages",
+ language_id);
+ g_signal_connect_swapped (self->indenter,
+ "notify::extension",
+ G_CALLBACK (on_indenter_extension_changed_cb),
+ self);
+ on_indenter_extension_changed_cb (self, NULL, self->indenter);
IDE_EXIT;
}
@@ -279,7 +240,7 @@ _ide_source_view_addins_shutdown (IdeSourceView *self)
ide_clear_and_destroy_object (&self->completion_providers);
ide_clear_and_destroy_object (&self->hover_providers);
- ide_clear_and_destroy_object (&self->indenters);
+ ide_clear_and_destroy_object (&self->indenter);
IDE_EXIT;
}
@@ -296,7 +257,7 @@ _ide_source_view_addins_set_language (IdeSourceView *self,
g_return_if_fail (!language || GTK_SOURCE_IS_LANGUAGE (language));
g_return_if_fail (self->completion_providers != NULL);
g_return_if_fail (self->hover_providers != NULL);
- g_return_if_fail (self->indenters != NULL);
+ g_return_if_fail (self->indenter != NULL);
if (language != NULL)
language_id = gtk_source_language_get_id (language);
@@ -305,7 +266,7 @@ _ide_source_view_addins_set_language (IdeSourceView *self,
ide_extension_set_adapter_set_value (self->completion_providers, language_id);
ide_extension_set_adapter_set_value (self->hover_providers, language_id);
- ide_extension_set_adapter_set_value (self->indenters, language_id);
+ ide_extension_adapter_set_value (self->indenter, language_id);
IDE_EXIT;
}
diff --git a/src/libide/sourceview/ide-source-view-private.h b/src/libide/sourceview/ide-source-view-private.h
index aa33c12d4..d1699a2a7 100644
--- a/src/libide/sourceview/ide-source-view-private.h
+++ b/src/libide/sourceview/ide-source-view-private.h
@@ -61,7 +61,7 @@ struct _IdeSourceView
*/
IdeExtensionSetAdapter *completion_providers;
IdeExtensionSetAdapter *hover_providers;
- IdeExtensionSetAdapter *indenters;
+ IdeExtensionAdapter *indenter;
/* Mouse click position */
double click_x;
diff --git a/src/libide/sourceview/ide-source-view.c b/src/libide/sourceview/ide-source-view.c
index 3fd77271c..f3d45d10c 100644
--- a/src/libide/sourceview/ide-source-view.c
+++ b/src/libide/sourceview/ide-source-view.c
@@ -671,7 +671,7 @@ ide_source_view_dispose (GObject *object)
g_assert (self->completion_providers == NULL);
g_assert (self->hover_providers == NULL);
- g_assert (self->indenters == NULL);
+ g_assert (self->indenter == NULL);
G_OBJECT_CLASS (ide_source_view_parent_class)->dispose (object);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]