[gnome-builder] project-tree: stash tree paned position after timeout
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] project-tree: stash tree paned position after timeout
- Date: Sat, 25 Apr 2015 07:37:41 +0000 (UTC)
commit c6fa24741790d293cbbcb8576d37851e7cf27236
Author: Christian Hergert <christian hergert me>
Date: Sat Apr 25 00:36:25 2015 -0700
project-tree: stash tree paned position after timeout
We were only updating the value when we would save/hide the project tree.
This does it after a second delay when the paned is moved. That should
still handle the animation case, where this will be spuriously updated.
Clearly, this is the type of stuff that belongs in a layout manager
abstraction.
src/editor/gb-editor-workspace-private.h | 2 +
src/editor/gb-editor-workspace.c | 47 ++++++++++++++++++++++++------
2 files changed, 40 insertions(+), 9 deletions(-)
---
diff --git a/src/editor/gb-editor-workspace-private.h b/src/editor/gb-editor-workspace-private.h
index 34fbb87..5f4e2b5 100644
--- a/src/editor/gb-editor-workspace-private.h
+++ b/src/editor/gb-editor-workspace-private.h
@@ -39,6 +39,8 @@ struct _GbEditorWorkspace
GtkSpinner *project_spinner;
GbProjectTree *project_tree;
GbViewGrid *view_grid;
+
+ guint project_tree_position_timeout;
};
G_END_DECLS
diff --git a/src/editor/gb-editor-workspace.c b/src/editor/gb-editor-workspace.c
index cf3482c..8b59b1a 100644
--- a/src/editor/gb-editor-workspace.c
+++ b/src/editor/gb-editor-workspace.c
@@ -215,6 +215,30 @@ gb_editor_workspace_hierarchy_changed (GtkWidget *widget,
}
}
+static gboolean
+save_project_tree_position_timeout (gpointer data)
+{
+ GbEditorWorkspace *self = data;
+
+ g_assert (GB_IS_EDITOR_WORKSPACE (self));
+
+ gb_project_tree_save_desired_width (self->project_tree);
+
+ return G_SOURCE_REMOVE;
+}
+
+static void
+gb_editor_workspace__project_paned_notify_position (GbEditorWorkspace *self,
+ GParamSpec *pspec,
+ GtkPaned *paned)
+{
+ g_assert (GB_IS_EDITOR_WORKSPACE (self));
+
+ if (self->project_tree_position_timeout != 0)
+ g_source_remove (self->project_tree_position_timeout);
+ g_timeout_add_seconds (1, save_project_tree_position_timeout, self);
+}
+
static void
gb_editor_workspace_constructed (GObject *object)
{
@@ -232,8 +256,16 @@ gb_editor_workspace_constructed (GObject *object)
static void
gb_editor_workspace_finalize (GObject *object)
{
+ GbEditorWorkspace *self = (GbEditorWorkspace *)object;
+
IDE_ENTRY;
+ if (self->project_tree_position_timeout)
+ {
+ g_source_remove (self->project_tree_position_timeout);
+ self->project_tree_position_timeout = 0;
+ }
+
G_OBJECT_CLASS (gb_editor_workspace_parent_class)->finalize (object);
IDE_EXIT;
@@ -258,15 +290,6 @@ gb_editor_workspace_get_property (GObject *object,
}
}
-/**
- * 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,
@@ -331,6 +354,12 @@ gb_editor_workspace_init (GbEditorWorkspace *self)
self->project_tree_settings = g_settings_new ("org.gnome.builder.project-tree");
+ g_signal_connect_object (self->project_paned,
+ "notify::position",
+ G_CALLBACK (gb_editor_workspace__project_paned_notify_position),
+ self,
+ G_CONNECT_SWAPPED);
+
gb_widget_set_context_handler (self, gb_editor_workspace_context_changed);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]