[gnome-builder] libide/gui: auto-connect workbench addin action groups
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] libide/gui: auto-connect workbench addin action groups
- Date: Thu, 28 Jul 2022 08:15:07 +0000 (UTC)
commit 449df62c533d4a02d19f3e47c13bbdc9e44936ed
Author: Christian Hergert <chergert redhat com>
Date: Thu Jul 28 00:53:10 2022 -0700
libide/gui: auto-connect workbench addin action groups
This will allow workbench addins to use the action mixin and have those
auto connected to the context action group.
src/libide/gui/ide-workbench-addin.c | 23 +++++++++
src/libide/gui/ide-workbench-addin.h | 93 +++++++++++++++++++-----------------
src/libide/gui/ide-workbench.c | 10 ++++
3 files changed, 81 insertions(+), 45 deletions(-)
---
diff --git a/src/libide/gui/ide-workbench-addin.c b/src/libide/gui/ide-workbench-addin.c
index 8b0ba2ce9..59fc5a837 100644
--- a/src/libide/gui/ide-workbench-addin.c
+++ b/src/libide/gui/ide-workbench-addin.c
@@ -324,3 +324,26 @@ ide_workbench_addin_project_loaded (IdeWorkbenchAddin *self,
if (IDE_WORKBENCH_ADDIN_GET_IFACE (self)->project_loaded)
IDE_WORKBENCH_ADDIN_GET_IFACE (self)->project_loaded (self, project_info);
}
+
+/**
+ * ide_workbench_addin_ref_action_group:
+ * @self: a #IdeWorkbenchAddin
+ *
+ * Gets the action group for the addin.
+ *
+ * If provided, the action group will be registered for the addin at
+ * "context.workbench.module-name" where "module-name" is replaced with the
+ * module-name of the plugin.
+ *
+ * Returns: (transfer full) (nullable): a #GActionGroup or %NULL
+ */
+GActionGroup *
+ide_workbench_addin_ref_action_group (IdeWorkbenchAddin *self)
+{
+ g_return_val_if_fail (IDE_IS_WORKBENCH_ADDIN (self), NULL);
+
+ if (IDE_WORKBENCH_ADDIN_GET_IFACE (self)->ref_action_group)
+ return IDE_WORKBENCH_ADDIN_GET_IFACE (self)->ref_action_group (self);
+
+ return NULL;
+}
diff --git a/src/libide/gui/ide-workbench-addin.h b/src/libide/gui/ide-workbench-addin.h
index 971380058..b1ff19fbd 100644
--- a/src/libide/gui/ide-workbench-addin.h
+++ b/src/libide/gui/ide-workbench-addin.h
@@ -39,51 +39,52 @@ struct _IdeWorkbenchAddinInterface
{
GTypeInterface parent;
- void (*load) (IdeWorkbenchAddin *self,
- IdeWorkbench *workbench);
- void (*unload) (IdeWorkbenchAddin *self,
- IdeWorkbench *workbench);
- void (*load_project_async) (IdeWorkbenchAddin *self,
- IdeProjectInfo *project_info,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
- gboolean (*load_project_finish) (IdeWorkbenchAddin *self,
- GAsyncResult *result,
- GError **error);
- void (*unload_project_async) (IdeWorkbenchAddin *self,
- IdeProjectInfo *project_info,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
- gboolean (*unload_project_finish) (IdeWorkbenchAddin *self,
- GAsyncResult *result,
- GError **error);
- void (*project_loaded) (IdeWorkbenchAddin *self,
- IdeProjectInfo *project_info);
- void (*workspace_added) (IdeWorkbenchAddin *self,
- IdeWorkspace *workspace);
- void (*workspace_removed) (IdeWorkbenchAddin *self,
- IdeWorkspace *workspace);
- gboolean (*can_open) (IdeWorkbenchAddin *self,
- GFile *file,
- const gchar *content_type,
- gint *priority);
- void (*open_async) (IdeWorkbenchAddin *self,
- GFile *file,
- const gchar *content_type,
- int at_line,
- int at_line_offset,
- IdeBufferOpenFlags flags,
- IdePanelPosition *position,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
- gboolean (*open_finish) (IdeWorkbenchAddin *self,
- GAsyncResult *result,
- GError **error);
- void (*vcs_changed) (IdeWorkbenchAddin *self,
- IdeVcs *vcs);
+ void (*load) (IdeWorkbenchAddin *self,
+ IdeWorkbench *workbench);
+ void (*unload) (IdeWorkbenchAddin *self,
+ IdeWorkbench *workbench);
+ void (*load_project_async) (IdeWorkbenchAddin *self,
+ IdeProjectInfo *project_info,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+ gboolean (*load_project_finish) (IdeWorkbenchAddin *self,
+ GAsyncResult *result,
+ GError **error);
+ void (*unload_project_async) (IdeWorkbenchAddin *self,
+ IdeProjectInfo *project_info,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+ gboolean (*unload_project_finish) (IdeWorkbenchAddin *self,
+ GAsyncResult *result,
+ GError **error);
+ void (*project_loaded) (IdeWorkbenchAddin *self,
+ IdeProjectInfo *project_info);
+ void (*workspace_added) (IdeWorkbenchAddin *self,
+ IdeWorkspace *workspace);
+ void (*workspace_removed) (IdeWorkbenchAddin *self,
+ IdeWorkspace *workspace);
+ gboolean (*can_open) (IdeWorkbenchAddin *self,
+ GFile *file,
+ const gchar *content_type,
+ gint *priority);
+ void (*open_async) (IdeWorkbenchAddin *self,
+ GFile *file,
+ const gchar *content_type,
+ int at_line,
+ int at_line_offset,
+ IdeBufferOpenFlags flags,
+ IdePanelPosition *position,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+ gboolean (*open_finish) (IdeWorkbenchAddin *self,
+ GAsyncResult *result,
+ GError **error);
+ void (*vcs_changed) (IdeWorkbenchAddin *self,
+ IdeVcs *vcs);
+ GActionGroup *(*ref_action_group) (IdeWorkbenchAddin *self);
};
IDE_AVAILABLE_IN_ALL
@@ -145,6 +146,8 @@ IDE_AVAILABLE_IN_ALL
void ide_workbench_addin_vcs_changed (IdeWorkbenchAddin *self,
IdeVcs *vcs);
IDE_AVAILABLE_IN_ALL
+GActionGroup *ide_workbench_addin_ref_action_group (IdeWorkbenchAddin *self);
+IDE_AVAILABLE_IN_ALL
IdeWorkbenchAddin *ide_workbench_addin_find_by_module_name (IdeWorkbench *workbench,
const gchar *module_name);
diff --git a/src/libide/gui/ide-workbench.c b/src/libide/gui/ide-workbench.c
index c85039080..d605dc85b 100644
--- a/src/libide/gui/ide-workbench.c
+++ b/src/libide/gui/ide-workbench.c
@@ -253,6 +253,7 @@ ide_workbench_addin_added_cb (PeasExtensionSet *set,
{
IdeWorkbench *self = user_data;
IdeWorkbenchAddin *addin = (IdeWorkbenchAddin *)exten;
+ GActionGroup *action_group;
g_assert (PEAS_IS_EXTENSION_SET (set));
g_assert (plugin_info != NULL);
@@ -261,6 +262,15 @@ ide_workbench_addin_added_cb (PeasExtensionSet *set,
ide_workbench_addin_load (addin, self);
+ if ((action_group = ide_workbench_addin_ref_action_group (addin)))
+ {
+ IdeActionMuxer *muxer = ide_action_mixin_get_action_muxer (self);
+ ide_action_muxer_insert_action_group (muxer,
+ peas_plugin_info_get_module_name (plugin_info),
+ action_group);
+ g_clear_object (&action_group);
+ }
+
/* Notify of the VCS system up-front */
if (self->vcs != NULL)
ide_workbench_addin_vcs_changed (addin, self->vcs);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]