[gnome-builder] libide/gui: add "workspace." actions with action mixin
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] libide/gui: add "workspace." actions with action mixin
- Date: Thu, 28 Jul 2022 08:15:07 +0000 (UTC)
commit 4cd796c93abf15de5495a9fc4cf89c1d2bf0444b
Author: Christian Hergert <chergert redhat com>
Date: Thu Jul 28 01:14:52 2022 -0700
libide/gui: add "workspace." actions with action mixin
This doesn't seem like much now, but it will allow us to merge in actions
from various places like addins and have them merge in cleanly like we
do for context actions.
"workspace.sysprof.run" would indicate "run" action of "sysprof" plugin
that is a workspace-addin.
src/libide/greeter/gtk/menus.ui | 2 +-
src/libide/gui/ide-workspace-actions.c | 12 -----------
src/libide/gui/ide-workspace-private.h | 1 -
src/libide/gui/ide-workspace.c | 37 ++++++++++++++++++++++++++++++----
src/libide/gui/ide-workspace.h | 2 ++
src/libide/gui/meson.build | 1 -
src/libide/terminal/gtk/menus.ui | 2 +-
7 files changed, 37 insertions(+), 20 deletions(-)
---
diff --git a/src/libide/greeter/gtk/menus.ui b/src/libide/greeter/gtk/menus.ui
index 4c8b216f1..50c6d548f 100644
--- a/src/libide/greeter/gtk/menus.ui
+++ b/src/libide/greeter/gtk/menus.ui
@@ -18,7 +18,7 @@
<item>
<attribute name="id">ide-greeter-workspace-menu-close</attribute>
<attribute name="label" translatable="yes">Close</attribute>
- <attribute name="action">win.close</attribute>
+ <attribute name="action">workspace.close</attribute>
</item>
</section>
<section id="ide-greeter-workspace-menu-app">
diff --git a/src/libide/gui/ide-workspace-actions.c b/src/libide/gui/ide-workspace-actions.c
index 106e39a36..f2d712c37 100644
--- a/src/libide/gui/ide-workspace-actions.c
+++ b/src/libide/gui/ide-workspace-actions.c
@@ -25,18 +25,6 @@
#include "ide-gui-global.h"
#include "ide-workspace-private.h"
-static void
-ide_workspace_actions_close (GSimpleAction *action,
- GVariant *param,
- gpointer user_data)
-{
- IdeWorkspace *self = user_data;
-
- g_assert (G_IS_SIMPLE_ACTION (action));
- g_assert (IDE_IS_WORKSPACE (self));
-
- gtk_window_close (GTK_WINDOW (self));
-}
static const GActionEntry actions[] = {
{ "close", ide_workspace_actions_close },
diff --git a/src/libide/gui/ide-workspace-private.h b/src/libide/gui/ide-workspace-private.h
index 691d303ba..9f52c8987 100644
--- a/src/libide/gui/ide-workspace-private.h
+++ b/src/libide/gui/ide-workspace-private.h
@@ -26,7 +26,6 @@
G_BEGIN_DECLS
-void _ide_workspace_init_actions (IdeWorkspace *self);
GList *_ide_workspace_get_mru_link (IdeWorkspace *self);
void _ide_workspace_add_page_mru (IdeWorkspace *self,
GList *mru_link);
diff --git a/src/libide/gui/ide-workspace.c b/src/libide/gui/ide-workspace.c
index 92b180436..8dcb3571f 100644
--- a/src/libide/gui/ide-workspace.c
+++ b/src/libide/gui/ide-workspace.c
@@ -493,6 +493,36 @@ ide_workspace_real_get_header_bar (IdeWorkspace *workspace)
return NULL;
}
+static void
+ide_workspace_action_close (gpointer instance,
+ const char *action_name,
+ GVariant *param)
+{
+ IdeWorkspace *self = instance;
+
+ g_assert (IDE_IS_WORKSPACE (self));
+
+ gtk_window_close (GTK_WINDOW (self));
+}
+
+static void
+ide_workspace_constructed (GObject *object)
+{
+ IdeWorkspace *self = (IdeWorkspace *)object;
+ IdeActionMuxer *muxer;
+
+ G_OBJECT_CLASS (ide_workspace_parent_class)->constructed (object);
+
+ /* TODO: Connect addins to muxer */
+ /* TODO: Make sure we can get subclasses working (needs a fix
+ * for when/what/who should call ide_action_muxer_init() as you
+ * currently need to call that again in subclass.
+ */
+ ide_action_mixin_constructed (&IDE_WORKSPACE_GET_CLASS (self)->action_mixin, object);
+ muxer = ide_action_mixin_get_action_muxer (self);
+ gtk_widget_insert_action_group (GTK_WIDGET (self), "workspace", G_ACTION_GROUP (muxer));
+}
+
static void
ide_workspace_dispose (GObject *object)
{
@@ -565,6 +595,7 @@ ide_workspace_class_init (IdeWorkspaceClass *klass)
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
GtkWindowClass *window_class = GTK_WINDOW_CLASS (klass);
+ object_class->constructed = ide_workspace_constructed;
object_class->dispose = ide_workspace_dispose;
object_class->finalize = ide_workspace_finalize;
object_class->get_property = ide_workspace_get_property;
@@ -599,7 +630,8 @@ ide_workspace_class_init (IdeWorkspaceClass *klass)
g_object_class_install_properties (object_class, N_PROPS, properties);
- gtk_widget_class_add_binding_action (widget_class, GDK_KEY_comma, GDK_CONTROL_MASK, "app.preferences",
NULL);
+ ide_action_mixin_init (&klass->action_mixin, object_class);
+ ide_action_mixin_install_action (&klass->action_mixin, "close", NULL, ide_workspace_action_close);
}
static void
@@ -637,9 +669,6 @@ ide_workspace_init (IdeWorkspace *self)
"notify::focus-widget",
G_CALLBACK (ide_workspace_notify_focus_widget),
NULL);
-
- /* Initialize GActions for workspace */
- _ide_workspace_init_actions (self);
}
GList *
diff --git a/src/libide/gui/ide-workspace.h b/src/libide/gui/ide-workspace.h
index 8c27a2d4a..f9e558ecd 100644
--- a/src/libide/gui/ide-workspace.h
+++ b/src/libide/gui/ide-workspace.h
@@ -49,6 +49,8 @@ struct _IdeWorkspaceClass
{
AdwApplicationWindowClass parent_class;
+ IdeActionMixin action_mixin;
+
const gchar *kind;
guint has_statusbar : 1;
diff --git a/src/libide/gui/meson.build b/src/libide/gui/meson.build
index 8f318edec..68a5853cc 100644
--- a/src/libide/gui/meson.build
+++ b/src/libide/gui/meson.build
@@ -82,7 +82,6 @@ libide_gui_private_sources = [
'ide-shortcut-manager.c',
'ide-support.c',
'ide-style-variant-preview.c',
- 'ide-workspace-actions.c',
]
libide_gui_public_sources = [
diff --git a/src/libide/terminal/gtk/menus.ui b/src/libide/terminal/gtk/menus.ui
index f1684de20..a4b277292 100644
--- a/src/libide/terminal/gtk/menus.ui
+++ b/src/libide/terminal/gtk/menus.ui
@@ -15,7 +15,7 @@
<item>
<attribute name="id">ide-terminal-workspace-menu-close</attribute>
<attribute name="label" translatable="yes">Close</attribute>
- <attribute name="action">win.close</attribute>
+ <attribute name="action">workspace.close</attribute>
</item>
</section>
</menu>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]