[gnome-builder] project-tree: extract project tree settings
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] project-tree: extract project tree settings
- Date: Fri, 10 Apr 2015 05:21:41 +0000 (UTC)
commit 538344fbfe9274133fdc5fff4161b3914b71dd78
Author: Christian Hergert <christian hergert me>
Date: Thu Apr 9 22:21:36 2015 -0700
project-tree: extract project tree settings
This moves project-tree settings into their own schema. I'm still not
happy with things long term, there is far too much coupling going on
here.
But this simplifies things a bit in the process, so net win for now.
configure.ac | 1 +
data/gsettings.mk | 1 +
.../org.gnome.builder.editor.gschema.xml.in | 5 -
.../org.gnome.builder.project-tree.gschema.xml.in | 20 +++++
src/editor/gb-editor-workspace-actions.c | 39 +++------
src/editor/gb-editor-workspace-private.h | 4 +-
src/editor/gb-editor-workspace.c | 87 ++++++++++++++++++--
src/project-tree/gb-project-tree.c | 25 ++++++-
src/project-tree/gb-project-tree.h | 10 ++-
9 files changed, 144 insertions(+), 48 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 725dc19..490a4e1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -74,6 +74,7 @@ AC_CONFIG_FILES([
data/gsettings/org.gnome.builder.editor.gschema.xml
data/gsettings/org.gnome.builder.editor.language.gschema.xml
data/gsettings/org.gnome.builder.experimental.gschema.xml
+ data/gsettings/org.gnome.builder.project-tree.gschema.xml
po/Makefile.in
])
diff --git a/data/gsettings.mk b/data/gsettings.mk
index cb77de0..cad1ce8 100644
--- a/data/gsettings.mk
+++ b/data/gsettings.mk
@@ -2,6 +2,7 @@ gsettingsschema_in_files = \
data/gsettings/org.gnome.builder.editor.gschema.xml.in \
data/gsettings/org.gnome.builder.editor.language.gschema.xml.in \
data/gsettings/org.gnome.builder.experimental.gschema.xml.in \
+ data/gsettings/org.gnome.builder.project-tree.gschema.xml.in \
$(NULL)
gsettings_SCHEMAS = $(gsettingsschema_in_files:.xml.in=.xml)
diff --git a/data/gsettings/org.gnome.builder.editor.gschema.xml.in
b/data/gsettings/org.gnome.builder.editor.gschema.xml.in
index 97e6fa3..8565165 100644
--- a/data/gsettings/org.gnome.builder.editor.gschema.xml.in
+++ b/data/gsettings/org.gnome.builder.editor.gschema.xml.in
@@ -63,10 +63,5 @@
<range min="0" max="999"/>
<default>0</default>
</key>
- <key name="show-sidebar" type="b">
- <default>false</default>
- <summary>Show Project Sidebar</summary>
- <description>If enabled, the sidebar will be visible in the editor workspace.</description>
- </key>
</schema>
</schemalist>
diff --git a/data/gsettings/org.gnome.builder.project-tree.gschema.xml.in
b/data/gsettings/org.gnome.builder.project-tree.gschema.xml.in
new file mode 100644
index 0000000..0798bb5
--- /dev/null
+++ b/data/gsettings/org.gnome.builder.project-tree.gschema.xml.in
@@ -0,0 +1,20 @@
+<schemalist>
+ <schema id="org.gnome.builder.project-tree" path="/org/gnome/builder/project-tree/"
gettext-domain="gnome-builder">
+ <key name="show" type="b">
+ <default>false</default>
+ <summary>Show Project Sidebar</summary>
+ <description>If enabled, the sidebar will be visible in the editor workspace.</description>
+ </key>
+ <key name="show-icons" type="b">
+ <default>false</default>
+ <summary>Show Icons</summary>
+ <description>If enabled, the sidebar will display icons next to each item.</description>
+ </key>
+ <key name="width" type="i">
+ <range min="1" max="1000"/>
+ <default>250</default>
+ <summary>Project Tree Width</summary>
+ <description>The width in pixels of the project tree.</description>
+ </key>
+ </schema>
+</schemalist>
diff --git a/src/editor/gb-editor-workspace-actions.c b/src/editor/gb-editor-workspace-actions.c
index 95a3dc7..6cf801e 100644
--- a/src/editor/gb-editor-workspace-actions.c
+++ b/src/editor/gb-editor-workspace-actions.c
@@ -24,7 +24,6 @@
#include "gb-workbench.h"
#define ANIMATION_DURATION_MSEC 250
-#define MIN_PANED_SAVE_POSTION 100
static void
gb_editor_workspace_actions_show_sidebar (GSimpleAction *action,
@@ -40,12 +39,7 @@ gb_editor_workspace_actions_show_sidebar (GSimpleAction *action,
if (!g_variant_get_boolean (variant) && visible)
{
- guint position;
-
- position = gtk_paned_get_position (self->project_paned);
- if (position > MIN_PANED_SAVE_POSTION)
- self->sidebar_position = position;
-
+ gb_project_tree_save_desired_width (self->project_tree);
ide_object_animate_full (self->project_paned,
IDE_ANIMATION_EASE_IN_CUBIC,
ANIMATION_DURATION_MSEC,
@@ -55,18 +49,23 @@ gb_editor_workspace_actions_show_sidebar (GSimpleAction *action,
"position", 0,
NULL);
g_simple_action_set_state (action, variant);
+ g_settings_set_boolean (self->project_tree_settings, "show", FALSE);
}
else if (g_variant_get_boolean (variant) && !visible)
{
+ guint position;
+
+ position = gb_project_tree_get_desired_width (self->project_tree);
gtk_paned_set_position (self->project_paned, 0);
gtk_widget_show (GTK_WIDGET (self->project_sidebar));
ide_object_animate (self->project_paned,
IDE_ANIMATION_EASE_IN_CUBIC,
ANIMATION_DURATION_MSEC,
NULL,
- "position", self->sidebar_position,
+ "position", position,
NULL);
g_simple_action_set_state (action, variant);
+ g_settings_set_boolean (self->project_tree_settings, "show", TRUE);
}
}
@@ -89,17 +88,6 @@ gb_editor_workspace_actions_toggle_sidebar (GSimpleAction *action,
g_variant_unref (state);
}
-static void
-gb_editor_workspace_actions__show_sidebar_notify_state (GbEditorWorkspace *self,
- GParamSpec *pspec,
- GAction *action)
-{
- g_autoptr(GVariant) state = NULL;
-
- state = g_action_get_state (action);
- g_settings_set_boolean (self->editor_settings, "show-sidebar", g_variant_get_boolean (state));
-}
-
static const GActionEntry GbEditorWorkspaceActions[] = {
{ "show-sidebar", NULL, NULL, "false", gb_editor_workspace_actions_show_sidebar },
{ "toggle-sidebar", gb_editor_workspace_actions_toggle_sidebar },
@@ -119,16 +107,13 @@ gb_editor_workspace_actions_init (GbEditorWorkspace *self)
action = g_action_map_lookup_action (G_ACTION_MAP (group), "show-sidebar");
g_assert (G_IS_SIMPLE_ACTION (action));
- if (g_settings_get_boolean (self->editor_settings, "show-sidebar"))
+ if (g_settings_get_boolean (self->project_tree_settings, "show"))
{
+ guint position;
+
g_simple_action_set_state (G_SIMPLE_ACTION (action), g_variant_new_boolean (TRUE));
- gtk_paned_set_position (self->project_paned, self->sidebar_position);
+ position = g_settings_get_int (self->project_tree_settings, "width");
+ gtk_paned_set_position (self->project_paned, position);
gtk_widget_show (GTK_WIDGET (self->project_sidebar));
}
-
- g_signal_connect_object (action,
- "notify::state",
- G_CALLBACK (gb_editor_workspace_actions__show_sidebar_notify_state),
- self,
- G_CONNECT_SWAPPED);
}
diff --git a/src/editor/gb-editor-workspace-private.h b/src/editor/gb-editor-workspace-private.h
index f4950aa..8abee09 100644
--- a/src/editor/gb-editor-workspace-private.h
+++ b/src/editor/gb-editor-workspace-private.h
@@ -29,7 +29,7 @@ struct _GbEditorWorkspace
{
GbWorkspace parent_instance;
- GSettings *editor_settings;
+ GSettings *project_tree_settings;
GtkPaned *project_paned;
GtkBox *project_sidebar;
@@ -37,8 +37,6 @@ struct _GbEditorWorkspace
GtkSpinner *project_spinner;
GbProjectTree *project_tree;
GbViewGrid *view_grid;
-
- guint sidebar_position;
};
G_END_DECLS
diff --git a/src/editor/gb-editor-workspace.c b/src/editor/gb-editor-workspace.c
index 17816d3..04b18fb 100644
--- a/src/editor/gb-editor-workspace.c
+++ b/src/editor/gb-editor-workspace.c
@@ -35,6 +35,26 @@
G_DEFINE_TYPE (GbEditorWorkspace, gb_editor_workspace, GB_TYPE_WORKSPACE)
+enum {
+ PROP_0,
+ PROP_SHOW_PROJECT_TREE,
+ LAST_PROP
+};
+
+static GParamSpec *gParamSpecs [LAST_PROP];
+
+gboolean
+gb_editor_workspace_get_show_project_tree (GbEditorWorkspace *self)
+{
+ return FALSE;
+}
+
+static void
+gb_editor_workspace_set_show_project_tree (GbEditorWorkspace *self,
+ gboolean show_project_tree)
+{
+}
+
static void
gb_editor_workspace__load_buffer_cb (GbEditorWorkspace *self,
IdeBuffer *buffer,
@@ -147,9 +167,6 @@ gb_editor_workspace_constructed (GObject *object)
G_OBJECT_CLASS (gb_editor_workspace_parent_class)->constructed (object);
- self->editor_settings = g_settings_new ("org.gnome.builder.editor");
- self->sidebar_position = gtk_paned_get_position (self->project_paned) ?: SIDEBAR_POSITION;
-
gb_editor_workspace_actions_init (self);
IDE_EXIT;
@@ -158,15 +175,56 @@ gb_editor_workspace_constructed (GObject *object)
static void
gb_editor_workspace_finalize (GObject *object)
{
- GbEditorWorkspace *self = (GbEditorWorkspace *)object;
-
IDE_ENTRY;
+ G_OBJECT_CLASS (gb_editor_workspace_parent_class)->finalize (object);
+ IDE_EXIT;
+}
- g_clear_object (&self->editor_settings);
+static void
+gb_editor_workspace_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GbEditorWorkspace *self = GB_EDITOR_WORKSPACE(object);
- G_OBJECT_CLASS (gb_editor_workspace_parent_class)->finalize (object);
+ switch (prop_id)
+ {
+ case PROP_SHOW_PROJECT_TREE:
+ g_value_set_boolean (value, gb_editor_workspace_get_show_project_tree (self));
+ break;
- IDE_EXIT;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ }
+}
+
+/**
+ * gb_editor_workspace_set_property:
+ * @object: (in): A #GObject.
+ * @prop_id: (in): The property identifier.
+ * @value: (in): The given property.
+ * @pspec: (in): A #ParamSpec.
+ *
+ * Set a given #GObject property.
+ */
+static void
+gb_editor_workspace_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GbEditorWorkspace *self = GB_EDITOR_WORKSPACE(object);
+
+ switch (prop_id)
+ {
+ case PROP_SHOW_PROJECT_TREE:
+ gb_editor_workspace_set_show_project_tree (self, g_value_get_boolean (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ }
}
static void
@@ -177,9 +235,20 @@ gb_editor_workspace_class_init (GbEditorWorkspaceClass *klass)
object_class->constructed = gb_editor_workspace_constructed;
object_class->finalize = gb_editor_workspace_finalize;
+ object_class->get_property = gb_editor_workspace_get_property;
+ object_class->set_property = gb_editor_workspace_set_property;
widget_class->grab_focus = gb_editor_workspace_grab_focus;
+ gParamSpecs [PROP_SHOW_PROJECT_TREE] =
+ g_param_spec_boolean ("show-project-tree",
+ _("Show Project Tree"),
+ _("Show Project Tree"),
+ FALSE,
+ (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (object_class, PROP_SHOW_PROJECT_TREE,
+ gParamSpecs [PROP_SHOW_PROJECT_TREE]);
+
GB_WIDGET_CLASS_TEMPLATE (klass, "gb-editor-workspace.ui");
GB_WIDGET_CLASS_BIND (klass, GbEditorWorkspace, project_button);
@@ -198,6 +267,8 @@ gb_editor_workspace_init (GbEditorWorkspace *self)
{
gtk_widget_init_template (GTK_WIDGET (self));
+ self->project_tree_settings = g_settings_new ("org.gnome.builder.project-tree");
+
gb_widget_set_context_handler (self, gb_editor_workspace_context_changed);
}
diff --git a/src/project-tree/gb-project-tree.c b/src/project-tree/gb-project-tree.c
index e72402a..9584225 100644
--- a/src/project-tree/gb-project-tree.c
+++ b/src/project-tree/gb-project-tree.c
@@ -23,6 +23,9 @@
#include "gb-project-tree-builder.h"
#include "gb-project-tree-private.h"
+#define WIDTH_MIN 1
+#define WIDTH_MAX 1000
+
G_DEFINE_TYPE (GbProjectTree, gb_project_tree, GB_TYPE_TREE)
GtkWidget *
@@ -31,6 +34,23 @@ gb_project_tree_new (void)
return g_object_new (GB_TYPE_PROJECT_TREE, NULL);
}
+guint
+gb_project_tree_get_desired_width (GbProjectTree *self)
+{
+ return g_settings_get_int (self->settings, "width");
+}
+
+void
+gb_project_tree_save_desired_width (GbProjectTree *self)
+{
+ GtkAllocation alloc;
+ guint width;
+
+ gtk_widget_get_allocation (GTK_WIDGET (self), &alloc);
+ width = CLAMP (alloc.width, WIDTH_MIN, WIDTH_MAX);
+ g_settings_set_int (self->settings, "width", width);
+}
+
IdeContext *
gb_project_tree_get_context (GbProjectTree *self)
{
@@ -66,6 +86,7 @@ gb_project_tree_set_context (GbProjectTree *self,
gb_tree_rebuild (GB_TREE (self));
}
+
static void
gb_project_tree_notify_selection (GbProjectTree *self)
{
@@ -99,7 +120,9 @@ gb_project_tree_init (GbProjectTree *self)
gb_tree_set_root (GB_TREE (self), gb_tree_node_new ());
- //self->settings = g_settings_new ("org.gnome.builder.project-tree");
+ self->settings = g_settings_new ("org.gnome.builder.project-tree");
+ g_settings_bind (self->settings, "show-icons", self, "show-icons",
+ G_SETTINGS_BIND_DEFAULT);
builder = gb_project_tree_builder_new ();
gb_tree_add_builder (GB_TREE (self), builder);
diff --git a/src/project-tree/gb-project-tree.h b/src/project-tree/gb-project-tree.h
index 872d7f8..d91d703 100644
--- a/src/project-tree/gb-project-tree.h
+++ b/src/project-tree/gb-project-tree.h
@@ -29,10 +29,12 @@ G_BEGIN_DECLS
G_DECLARE_FINAL_TYPE (GbProjectTree, gb_project_tree, GB, PROJECT_TREE, GbTree)
-GtkWidget *gb_project_tree_new (void);
-void gb_project_tree_set_context (GbProjectTree *self,
- IdeContext *context);
-IdeContext *gb_project_tree_get_context (GbProjectTree *self);
+GtkWidget *gb_project_tree_new (void);
+void gb_project_tree_set_context (GbProjectTree *self,
+ IdeContext *context);
+IdeContext *gb_project_tree_get_context (GbProjectTree *self);
+guint gb_project_tree_get_desired_width (GbProjectTree *self);
+void gb_project_tree_save_desired_width (GbProjectTree *self);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]