[gnome-builder] libide/gui: add toggle panel actions



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]