[gnome-builder] editor: add IdeEditorViewAddin::load_source_view and unload_source_view
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] editor: add IdeEditorViewAddin::load_source_view and unload_source_view
- Date: Wed, 31 Aug 2016 00:45:09 +0000 (UTC)
commit 641cf886b5f50dcbaabca83723ff40f1ccd419d0
Author: Christian Hergert <chergert redhat com>
Date: Tue Aug 30 17:44:14 2016 -0700
editor: add IdeEditorViewAddin::load_source_view and unload_source_view
These vfuncs allow editor view addins to manipulate the IdeSourceView as
necessary when they are created/removed from the view. Such can happen
when a new split occurs or the creation of the primary frame when the view
is created.
libide/editor/ide-editor-view-addin-private.h | 19 +++++---
libide/editor/ide-editor-view-addin.c | 42 +++++++++++++------
libide/editor/ide-editor-view-addin.h | 16 +++++---
libide/editor/ide-editor-view.c | 54 +++++++++++++++++++++++++
4 files changed, 105 insertions(+), 26 deletions(-)
---
diff --git a/libide/editor/ide-editor-view-addin-private.h b/libide/editor/ide-editor-view-addin-private.h
index 967e985..c603641 100644
--- a/libide/editor/ide-editor-view-addin-private.h
+++ b/libide/editor/ide-editor-view-addin-private.h
@@ -19,16 +19,21 @@
#ifndef IDE_EDITOR_VIEW_ADDIN_PRIVATE_H
#define IDE_EDITOR_VIEW_ADDIN_PRIVATE_H
-#include "ide-editor-view-addin.h"
+#include "editor/ide-editor-view-addin.h"
+#include "sourceview/ide-source-view.h"
G_BEGIN_DECLS
-void ide_editor_view_addin_language_changed (IdeEditorViewAddin *self,
- const gchar *language_id);
-void ide_editor_view_addin_load (IdeEditorViewAddin *self,
- IdeEditorView *view);
-void ide_editor_view_addin_unload (IdeEditorViewAddin *self,
- IdeEditorView *view);
+void ide_editor_view_addin_language_changed (IdeEditorViewAddin *self,
+ const gchar *language_id);
+void ide_editor_view_addin_load (IdeEditorViewAddin *self,
+ IdeEditorView *view);
+void ide_editor_view_addin_unload (IdeEditorViewAddin *self,
+ IdeEditorView *view);
+void ide_editor_view_addin_load_source_view (IdeEditorViewAddin *self,
+ IdeSourceView *source_view);
+void ide_editor_view_addin_unload_source_view (IdeEditorViewAddin *self,
+ IdeSourceView *source_view);
G_END_DECLS
#endif /* IDE_EDITOR_VIEW_ADDIN_PRIVATE_H */
diff --git a/libide/editor/ide-editor-view-addin.c b/libide/editor/ide-editor-view-addin.c
index 98eb544..024f60d 100644
--- a/libide/editor/ide-editor-view-addin.c
+++ b/libide/editor/ide-editor-view-addin.c
@@ -21,44 +21,60 @@
G_DEFINE_INTERFACE (IdeEditorViewAddin, ide_editor_view_addin, G_TYPE_OBJECT)
static void
-dummy_vfunc (IdeEditorViewAddin *self,
- IdeEditorView *view)
-{
-}
-
-static void
ide_editor_view_addin_default_init (IdeEditorViewAddinInterface *iface)
{
- iface->load = dummy_vfunc;
- iface->unload = dummy_vfunc;
}
void
ide_editor_view_addin_load (IdeEditorViewAddin *self,
- IdeEditorView *view)
+ IdeEditorView *view)
{
g_return_if_fail (IDE_IS_EDITOR_VIEW_ADDIN (self));
g_return_if_fail (IDE_IS_EDITOR_VIEW (view));
- IDE_EDITOR_VIEW_ADDIN_GET_IFACE (self)->load (self, view);
+ if (IDE_EDITOR_VIEW_ADDIN_GET_IFACE (self)->load)
+ IDE_EDITOR_VIEW_ADDIN_GET_IFACE (self)->load (self, view);
}
void
ide_editor_view_addin_unload (IdeEditorViewAddin *self,
- IdeEditorView *view)
+ IdeEditorView *view)
{
g_return_if_fail (IDE_IS_EDITOR_VIEW_ADDIN (self));
g_return_if_fail (IDE_IS_EDITOR_VIEW (view));
- IDE_EDITOR_VIEW_ADDIN_GET_IFACE (self)->unload (self, view);
+ if (IDE_EDITOR_VIEW_ADDIN_GET_IFACE (self)->unload)
+ IDE_EDITOR_VIEW_ADDIN_GET_IFACE (self)->unload (self, view);
}
void
ide_editor_view_addin_language_changed (IdeEditorViewAddin *self,
- const gchar *language_id)
+ const gchar *language_id)
{
g_return_if_fail (IDE_IS_EDITOR_VIEW_ADDIN (self));
if (IDE_EDITOR_VIEW_ADDIN_GET_IFACE (self)->language_changed)
IDE_EDITOR_VIEW_ADDIN_GET_IFACE (self)->language_changed (self, language_id);
}
+
+void
+ide_editor_view_addin_load_source_view (IdeEditorViewAddin *self,
+ IdeSourceView *source_view)
+{
+ g_return_if_fail (IDE_IS_EDITOR_VIEW_ADDIN (self));
+ g_return_if_fail (IDE_IS_SOURCE_VIEW (source_view));
+
+ if (IDE_EDITOR_VIEW_ADDIN_GET_IFACE (self)->load_source_view)
+ IDE_EDITOR_VIEW_ADDIN_GET_IFACE (self)->load_source_view (self, source_view);
+}
+
+void
+ide_editor_view_addin_unload_source_view (IdeEditorViewAddin *self,
+ IdeSourceView *source_view)
+{
+ g_return_if_fail (IDE_IS_EDITOR_VIEW_ADDIN (self));
+ g_return_if_fail (IDE_IS_SOURCE_VIEW (source_view));
+
+ if (IDE_EDITOR_VIEW_ADDIN_GET_IFACE (self)->unload_source_view)
+ IDE_EDITOR_VIEW_ADDIN_GET_IFACE (self)->unload_source_view (self, source_view);
+}
diff --git a/libide/editor/ide-editor-view-addin.h b/libide/editor/ide-editor-view-addin.h
index 8622762..5593dfa 100644
--- a/libide/editor/ide-editor-view-addin.h
+++ b/libide/editor/ide-editor-view-addin.h
@@ -31,12 +31,16 @@ struct _IdeEditorViewAddinInterface
{
GTypeInterface parent;
- void (*load) (IdeEditorViewAddin *self,
- IdeEditorView *view);
- void (*unload) (IdeEditorViewAddin *self,
- IdeEditorView *view);
- void (*language_changed) (IdeEditorViewAddin *self,
- const gchar *language_id);
+ void (*load) (IdeEditorViewAddin *self,
+ IdeEditorView *view);
+ void (*unload) (IdeEditorViewAddin *self,
+ IdeEditorView *view);
+ void (*language_changed) (IdeEditorViewAddin *self,
+ const gchar *language_id);
+ void (*load_source_view) (IdeEditorViewAddin *self,
+ IdeSourceView *source_view);
+ void (*unload_source_view) (IdeEditorViewAddin *self,
+ IdeSourceView *source_view);
};
G_END_DECLS
diff --git a/libide/editor/ide-editor-view.c b/libide/editor/ide-editor-view.c
index 1365333..3bf80b2 100644
--- a/libide/editor/ide-editor-view.c
+++ b/libide/editor/ide-editor-view.c
@@ -431,6 +431,38 @@ ide_editor_view__focus_in_event (IdeEditorView *self,
}
static void
+addin_load_source_view (PeasExtensionSet *set,
+ PeasPluginInfo *plugin_info,
+ PeasExtension *exten,
+ gpointer user_data)
+{
+ IdeSourceView *source_view = user_data;
+
+ g_assert (PEAS_IS_EXTENSION_SET (set));
+ g_assert (plugin_info != NULL);
+ g_assert (IDE_IS_EDITOR_VIEW_ADDIN (exten));
+ g_assert (IDE_IS_SOURCE_VIEW (source_view));
+
+ ide_editor_view_addin_load_source_view (IDE_EDITOR_VIEW_ADDIN (exten), source_view);
+}
+
+static void
+addin_unload_source_view (PeasExtensionSet *set,
+ PeasPluginInfo *plugin_info,
+ PeasExtension *exten,
+ gpointer user_data)
+{
+ IdeSourceView *source_view = user_data;
+
+ g_assert (PEAS_IS_EXTENSION_SET (set));
+ g_assert (plugin_info != NULL);
+ g_assert (IDE_IS_EDITOR_VIEW_ADDIN (exten));
+ g_assert (IDE_IS_SOURCE_VIEW (source_view));
+
+ ide_editor_view_addin_unload_source_view (IDE_EDITOR_VIEW_ADDIN (exten), source_view);
+}
+
+static void
ide_editor_view_set_split_view (IdeLayoutView *view,
gboolean split_view)
{
@@ -467,12 +499,21 @@ ide_editor_view_set_split_view (IdeLayoutView *view,
"shrink", FALSE,
"resize", TRUE,
NULL);
+
+ peas_extension_set_foreach (self->extensions,
+ addin_load_source_view,
+ self->frame2->source_view);
+
gtk_widget_grab_focus (GTK_WIDGET (self->frame2));
}
else
{
GtkWidget *copy = GTK_WIDGET (self->frame2);
+ peas_extension_set_foreach (self->extensions,
+ addin_unload_source_view,
+ self->frame2->source_view);
+
self->frame2 = NULL;
gtk_container_remove (GTK_CONTAINER (self->paned), copy);
gtk_widget_grab_focus (GTK_WIDGET (self->frame1));
@@ -540,8 +581,15 @@ ide_editor_view__extension_added (PeasExtensionSet *set,
g_assert (IDE_IS_EDITOR_VIEW_ADDIN (addin));
g_assert (IDE_IS_EDITOR_VIEW (self));
+ /* Initialize the addin */
ide_editor_view_addin_load (addin, self);
+ /* Allow the addin to track the source views */
+ ide_editor_view_addin_load_source_view (addin, self->frame1->source_view);
+ if (self->frame2)
+ ide_editor_view_addin_load_source_view (addin, self->frame2->source_view);
+
+ /* Notify the addin of the current language */
if (self->document != NULL)
{
GtkSourceLanguage *language;
@@ -572,6 +620,12 @@ ide_editor_view__extension_removed (PeasExtensionSet *set,
g_assert (IDE_IS_EDITOR_VIEW_ADDIN (addin));
g_assert (IDE_IS_EDITOR_VIEW (self));
+ if (self->frame2 && self->frame2->source_view)
+ ide_editor_view_addin_unload_source_view (addin, self->frame2->source_view);
+
+ if (self->frame1 && self->frame1->source_view)
+ ide_editor_view_addin_unload_source_view (addin, self->frame1->source_view);
+
ide_editor_view_addin_unload (addin, self);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]