[gnome-builder] sidebar: add statefull toggle for sidebar
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] sidebar: add statefull toggle for sidebar
- Date: Mon, 30 Mar 2015 21:50:24 +0000 (UTC)
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]