[gnome-builder] sidebar: add statefull toggle for sidebar



commit abd85621542f2aa093c1c645c2a1575b1f3130c1
Author: Christian Hergert <christian hergert me>
Date:   Mon Mar 30 14:50:08 2015 -0700

    sidebar: add statefull toggle for sidebar

 data/gtk/menus.ui                        |   12 +++++++++
 src/editor/gb-editor-workspace-actions.c |   37 +++++++++++++++++++++++++----
 src/workbench/gb-workbench.c             |    5 ++++
 3 files changed, 49 insertions(+), 5 deletions(-)
---
diff --git a/data/gtk/menus.ui b/data/gtk/menus.ui
index 74fd04d..5e9143a 100644
--- a/data/gtk/menus.ui
+++ b/data/gtk/menus.ui
@@ -76,6 +76,18 @@
     <section>
       <attribute name="id">edit-section-1</attribute>
     </section>
+    <section>
+      <submenu>
+        <attribute name="label" translatable="yes">_View</attribute>
+        <section>
+          <attribute name="id">view-section</attribute>
+          <item>
+            <attribute name="label" translatable="yes">Display Side _Panel</attribute>
+            <attribute name="action">workspace.show-sidebar</attribute>
+          </item>
+        </section>
+      </submenu>
+    </section>
 <!--
     <section>
       <attribute name="id">close-section</attribute>
diff --git a/src/editor/gb-editor-workspace-actions.c b/src/editor/gb-editor-workspace-actions.c
index 6141358..09f2fc7 100644
--- a/src/editor/gb-editor-workspace-actions.c
+++ b/src/editor/gb-editor-workspace-actions.c
@@ -24,13 +24,18 @@
 #define ANIMATION_DURATION_MSEC 250
 
 static void
-gb_editor_workspace_actions_toggle_sidebar (GSimpleAction *action,
-                                            GVariant      *variant,
-                                            gpointer       user_data)
+gb_editor_workspace_actions_show_sidebar (GSimpleAction *action,
+                                          GVariant      *variant,
+                                          gpointer       user_data)
 {
   GbEditorWorkspace *self = user_data;
+  gboolean visible;
+
+  g_assert (GB_IS_EDITOR_WORKSPACE (self));
 
-  if (gtk_widget_get_visible (GTK_WIDGET (self->project_sidebar)))
+  visible = gtk_widget_get_visible (GTK_WIDGET (self->project_sidebar));
+
+  if (!g_variant_get_boolean (variant) && visible)
     {
       ide_object_animate_full (self->project_paned,
                                IDE_ANIMATION_EASE_IN_CUBIC,
@@ -40,8 +45,9 @@ gb_editor_workspace_actions_toggle_sidebar (GSimpleAction *action,
                                self->project_sidebar,
                                "position", 0,
                                NULL);
+      g_simple_action_set_state (action, variant);
     }
-  else
+  else if (g_variant_get_boolean (variant) && !visible)
     {
       gtk_paned_set_position (self->project_paned, 0);
       gtk_widget_show (GTK_WIDGET (self->project_sidebar));
@@ -51,10 +57,31 @@ gb_editor_workspace_actions_toggle_sidebar (GSimpleAction *action,
                           NULL,
                           "position", 250,
                           NULL);
+      g_simple_action_set_state (action, variant);
     }
 }
 
+static void
+gb_editor_workspace_actions_toggle_sidebar (GSimpleAction *action,
+                                            GVariant      *variant,
+                                            gpointer       user_data)
+{
+  GbEditorWorkspace *self = user_data;
+  GActionGroup *group;
+  GAction *show_action;
+  GVariant *state;
+
+  group = gtk_widget_get_action_group (GTK_WIDGET (self), "workspace");
+  show_action = g_action_map_lookup_action (G_ACTION_MAP (group), "show-sidebar");
+  state = g_action_get_state (show_action);
+  gb_editor_workspace_actions_show_sidebar (G_SIMPLE_ACTION (show_action),
+                                            g_variant_new_boolean (!g_variant_get_boolean (state)),
+                                            user_data);
+  g_variant_unref (state);
+}
+
 static const GActionEntry GbEditorWorkspaceActions[] = {
+  { "show-sidebar", NULL, NULL, "false", gb_editor_workspace_actions_show_sidebar },
   { "toggle-sidebar", gb_editor_workspace_actions_toggle_sidebar },
 };
 
diff --git a/src/workbench/gb-workbench.c b/src/workbench/gb-workbench.c
index a75273c..e3b58a8 100644
--- a/src/workbench/gb-workbench.c
+++ b/src/workbench/gb-workbench.c
@@ -493,11 +493,16 @@ void
 gb_workbench_set_active_workspace (GbWorkbench *self,
                                    GbWorkspace *workspace)
 {
+  GActionGroup *group;
+
   g_return_if_fail (GB_IS_WORKBENCH (self));
   g_return_if_fail (GB_IS_WORKSPACE (workspace));
 
   if (ide_set_weak_pointer (&self->active_workspace, workspace))
     gtk_stack_set_visible_child (self->stack, GTK_WIDGET (workspace));
+
+  group = gtk_widget_get_action_group (GTK_WIDGET (workspace), "workspace");
+  gtk_widget_insert_action_group (GTK_WIDGET (self), "workspace", group);
 }
 
 static gboolean


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]