[gnome-builder] libide/editor: automatically connect editor-page-addin actions



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]