[gnome-builder] libide/gui: add toggle panel actions
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] libide/gui: add toggle panel actions
- Date: Sat, 16 Jul 2022 17:12:01 +0000 (UTC)
commit 241ff59f2545d9cd8abc97ffac8d665302105ec9
Author: Christian Hergert <chergert redhat com>
Date: Sat Jul 16 10:09:52 2022 -0700
libide/gui: add toggle panel actions
src/libide/editor/ide-editor-workspace.c | 41 ++++++++++++++++++++++++++++++++
src/libide/gui/ide-primary-workspace.c | 41 ++++++++++++++++++++++++++++++++
2 files changed, 82 insertions(+)
---
diff --git a/src/libide/editor/ide-editor-workspace.c b/src/libide/editor/ide-editor-workspace.c
index aaa29c236..bba9da5d9 100644
--- a/src/libide/editor/ide-editor-workspace.c
+++ b/src/libide/editor/ide-editor-workspace.c
@@ -193,6 +193,43 @@ ide_editor_workspace_foreach_page (IdeWorkspace *workspace,
ide_grid_foreach_page (IDE_EDITOR_WORKSPACE (workspace)->grid, callback, user_data);
}
+static void
+toggle_panel_action (GtkWidget *widget,
+ const char *action_name,
+ GVariant *param)
+{
+ IdeEditorWorkspace *self = (IdeEditorWorkspace *)widget;
+ g_autofree char *can_property = NULL;
+ const char *property = NULL;
+ gboolean reveal;
+ gboolean can_reveal;
+
+ g_assert (IDE_IS_EDITOR_WORKSPACE (self));
+
+ if (ide_str_equal0 (action_name, "panel.toggle-start"))
+ property = "reveal-start";
+ else if (ide_str_equal0 (action_name, "panel.toggle-end"))
+ property = "reveal-end";
+ else if (ide_str_equal0 (action_name, "panel.toggle-bottom"))
+ property = "reveal-bottom";
+ else
+ return;
+
+ can_property = g_strconcat ("can-", property, NULL);
+
+ g_object_get (self->dock,
+ can_property, &can_reveal,
+ property, &reveal,
+ NULL);
+
+ reveal = !reveal;
+
+ if (reveal && can_reveal)
+ g_object_set (self->dock, property, TRUE, NULL);
+ else
+ g_object_set (self->dock, property, FALSE, NULL);
+}
+
static void
ide_editor_workspace_dispose (GObject *object)
{
@@ -239,6 +276,10 @@ ide_editor_workspace_class_init (IdeEditorWorkspaceClass *klass)
gtk_widget_class_bind_template_child (widget_class, IdeEditorWorkspace, header_bar);
gtk_widget_class_bind_template_child (widget_class, IdeEditorWorkspace, project_title);
+ gtk_widget_class_install_action (widget_class, "panel.toggle-start", NULL, toggle_panel_action);
+ gtk_widget_class_install_action (widget_class, "panel.toggle-end", NULL, toggle_panel_action);
+ gtk_widget_class_install_action (widget_class, "panel.toggle-bottom", NULL, toggle_panel_action);
+
g_type_ensure (IDE_TYPE_GRID);
g_type_ensure (IDE_TYPE_NOTIFICATIONS_BUTTON);
g_type_ensure (IDE_TYPE_OMNI_BAR);
diff --git a/src/libide/gui/ide-primary-workspace.c b/src/libide/gui/ide-primary-workspace.c
index 4735b19af..1dceceb91 100644
--- a/src/libide/gui/ide-primary-workspace.c
+++ b/src/libide/gui/ide-primary-workspace.c
@@ -207,6 +207,43 @@ ide_primary_workspace_foreach_page (IdeWorkspace *workspace,
ide_grid_foreach_page (IDE_PRIMARY_WORKSPACE (workspace)->grid, callback, user_data);
}
+static void
+toggle_panel_action (GtkWidget *widget,
+ const char *action_name,
+ GVariant *param)
+{
+ IdePrimaryWorkspace *self = (IdePrimaryWorkspace *)widget;
+ g_autofree char *can_property = NULL;
+ const char *property = NULL;
+ gboolean reveal;
+ gboolean can_reveal;
+
+ g_assert (IDE_IS_PRIMARY_WORKSPACE (self));
+
+ if (ide_str_equal0 (action_name, "panel.toggle-start"))
+ property = "reveal-start";
+ else if (ide_str_equal0 (action_name, "panel.toggle-end"))
+ property = "reveal-end";
+ else if (ide_str_equal0 (action_name, "panel.toggle-bottom"))
+ property = "reveal-bottom";
+ else
+ return;
+
+ can_property = g_strconcat ("can-", property, NULL);
+
+ g_object_get (self->dock,
+ can_property, &can_reveal,
+ property, &reveal,
+ NULL);
+
+ reveal = !reveal;
+
+ if (reveal && can_reveal)
+ g_object_set (self->dock, property, TRUE, NULL);
+ else
+ g_object_set (self->dock, property, FALSE, NULL);
+}
+
static void
ide_primary_workspace_dispose (GObject *object)
{
@@ -261,6 +298,10 @@ ide_primary_workspace_class_init (IdePrimaryWorkspaceClass *klass)
gtk_widget_class_add_binding_action (widget_class, GDK_KEY_Return, GDK_CONTROL_MASK,
"workbench.global-search", NULL);
+ gtk_widget_class_install_action (widget_class, "panel.toggle-start", NULL, toggle_panel_action);
+ gtk_widget_class_install_action (widget_class, "panel.toggle-end", NULL, toggle_panel_action);
+ gtk_widget_class_install_action (widget_class, "panel.toggle-bottom", NULL, toggle_panel_action);
+
g_type_ensure (IDE_TYPE_GRID);
g_type_ensure (IDE_TYPE_NOTIFICATIONS_BUTTON);
g_type_ensure (IDE_TYPE_OMNI_BAR);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]