[gnome-builder] libide/editor: automatically connect editor-page-addin actions
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] libide/editor: automatically connect editor-page-addin actions
- Date: Thu, 28 Jul 2022 23:52:32 +0000 (UTC)
commit 24e1860644c8104214d455664d7d5eef0418f60e
Author: Christian Hergert <chergert redhat com>
Date: Thu Jul 28 16:49:00 2022 -0700
libide/editor: automatically connect editor-page-addin actions
src/libide/editor/ide-editor-page-addin.c | 17 +++++++++++++++++
src/libide/editor/ide-editor-page-addin.h | 19 +++++++++++--------
src/libide/editor/ide-editor-page.c | 12 ++++++++++++
3 files changed, 40 insertions(+), 8 deletions(-)
---
diff --git a/src/libide/editor/ide-editor-page-addin.c b/src/libide/editor/ide-editor-page-addin.c
index d90974935..2347295e1 100644
--- a/src/libide/editor/ide-editor-page-addin.c
+++ b/src/libide/editor/ide-editor-page-addin.c
@@ -77,6 +77,23 @@ ide_editor_page_addin_frame_set (IdeEditorPageAddin *self,
IDE_EDITOR_PAGE_ADDIN_GET_IFACE (self)->frame_set (self, frame);
}
+/**
+ * ide_editor_page_addin_ref_action_group:
+ * @self: a #IdeEditorPageAddin
+ *
+ * Returns: (transfer full) (nullable): a #GActionGroup or %NULL
+ */
+GActionGroup *
+ide_editor_page_addin_ref_action_group (IdeEditorPageAddin *self)
+{
+ g_return_val_if_fail (IDE_IS_EDITOR_PAGE_ADDIN (self), NULL);
+
+ if (IDE_EDITOR_PAGE_ADDIN_GET_IFACE (self)->ref_action_group)
+ return IDE_EDITOR_PAGE_ADDIN_GET_IFACE (self)->ref_action_group (self);
+
+ return NULL;
+}
+
/**
* ide_editor_page_addin_find_by_module_name:
* @page: an #IdeEditorPage
diff --git a/src/libide/editor/ide-editor-page-addin.h b/src/libide/editor/ide-editor-page-addin.h
index e0fd9ebfe..610be65a9 100644
--- a/src/libide/editor/ide-editor-page-addin.h
+++ b/src/libide/editor/ide-editor-page-addin.h
@@ -40,14 +40,15 @@ struct _IdeEditorPageAddinInterface
{
GTypeInterface parent;
- void (*load) (IdeEditorPageAddin *self,
- IdeEditorPage *page);
- void (*unload) (IdeEditorPageAddin *self,
- IdeEditorPage *page);
- void (*language_changed) (IdeEditorPageAddin *self,
- const gchar *language_id);
- void (*frame_set) (IdeEditorPageAddin *self,
- IdeFrame *frame);
+ void (*load) (IdeEditorPageAddin *self,
+ IdeEditorPage *page);
+ void (*unload) (IdeEditorPageAddin *self,
+ IdeEditorPage *page);
+ void (*language_changed) (IdeEditorPageAddin *self,
+ const gchar *language_id);
+ void (*frame_set) (IdeEditorPageAddin *self,
+ IdeFrame *frame);
+ GActionGroup *(*ref_action_group) (IdeEditorPageAddin *self);
};
IDE_AVAILABLE_IN_ALL
@@ -63,6 +64,8 @@ IDE_AVAILABLE_IN_ALL
void ide_editor_page_addin_language_changed (IdeEditorPageAddin *self,
const gchar *language_id);
IDE_AVAILABLE_IN_ALL
+GActionGroup *ide_editor_page_addin_ref_action_group (IdeEditorPageAddin *self);
+IDE_AVAILABLE_IN_ALL
IdeEditorPageAddin *ide_editor_page_addin_find_by_module_name (IdeEditorPage *page,
const gchar *module_name);
diff --git a/src/libide/editor/ide-editor-page.c b/src/libide/editor/ide-editor-page.c
index c5d6f06cb..2479eca32 100644
--- a/src/libide/editor/ide-editor-page.c
+++ b/src/libide/editor/ide-editor-page.c
@@ -32,6 +32,8 @@
#include "ide-editor-print-operation.h"
#include "ide-editor-save-delegate.h"
+G_DEFINE_AUTOPTR_CLEANUP_FUNC (GActionGroup, g_object_unref)
+
enum {
PROP_0,
PROP_BUFFER,
@@ -220,6 +222,7 @@ ide_editor_page_addin_added (IdeExtensionSetAdapter *set,
{
IdeEditorPage *self = user_data;
IdeEditorPageAddin *addin = (IdeEditorPageAddin *)exten;
+ g_autoptr(GActionGroup) action_group = NULL;
g_assert (IDE_IS_EXTENSION_SET_ADAPTER (set));
g_assert (plugin_info != NULL);
@@ -227,6 +230,11 @@ ide_editor_page_addin_added (IdeExtensionSetAdapter *set,
g_assert (IDE_IS_EDITOR_PAGE (self));
ide_editor_page_addin_load (addin, self);
+
+ if ((action_group = ide_editor_page_addin_ref_action_group (addin)))
+ panel_widget_insert_action_group (PANEL_WIDGET (self),
+ peas_plugin_info_get_module_name (plugin_info),
+ action_group);
}
static void
@@ -243,6 +251,10 @@ ide_editor_page_addin_removed (IdeExtensionSetAdapter *set,
g_assert (IDE_IS_EDITOR_PAGE_ADDIN (addin));
g_assert (IDE_IS_EDITOR_PAGE (self));
+ panel_widget_insert_action_group (PANEL_WIDGET (self),
+ peas_plugin_info_get_module_name (plugin_info),
+ NULL);
+
ide_editor_page_addin_unload (addin, self);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]