[sound-juicer/wip/better-editing: 7/13] Add vertical movement to SjTreeView
- From: Phillip Wood <pwood src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [sound-juicer/wip/better-editing: 7/13] Add vertical movement to SjTreeView
- Date: Fri, 25 Jul 2014 08:54:53 +0000 (UTC)
commit 77d0456272099564e90d3160f86e20964d6da8cc
Author: Phillip Wood <phillip wood dunelm org uk>
Date: Fri May 9 11:16:14 2014 +0100
Add vertical movement to SjTreeView
When trying to move vertically check if it's possible to move before
stopping editing. If the current cell is being edited start editing
the next cell after moving.
https://bugzilla.gnome.org/show_bug.cgi?id=151469
src/sj-tree-view.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 52 insertions(+), 1 deletions(-)
---
diff --git a/src/sj-tree-view.c b/src/sj-tree-view.c
index 2aa9f0a..ce68f92 100644
--- a/src/sj-tree-view.c
+++ b/src/sj-tree-view.c
@@ -101,6 +101,49 @@ sj_tree_view_start_editing (GtkTreeView *self)
g_signal_emit_by_name (self, "select-cursor-row", TRUE, &ret);
}
+
+/**
+ * Stop editing, move cursor up/down.
+ */
+static gboolean
+move_vertical (GtkTreeView *self,
+ GtkMovementStep step,
+ int count)
+{
+ GtkTreeIter iter;
+ GtkTreePath *path;
+ GtkTreeModel *model;
+
+ g_return_val_if_fail (count != 0, FALSE);
+ g_return_val_if_fail (step == GTK_MOVEMENT_DISPLAY_LINES ||
+ step == GTK_MOVEMENT_PAGES ||
+ step == GTK_MOVEMENT_BUFFER_ENDS, FALSE);
+
+ model = gtk_tree_view_get_model (self);
+ gtk_tree_view_get_cursor (self, &path, NULL);
+ if (path == NULL || !gtk_tree_model_get_iter (model, &iter, path)) {
+ gtk_tree_path_free (path);
+ return FALSE;
+ }
+ gtk_tree_path_free (path);
+
+ if (count < 0) {
+ if (!gtk_tree_model_iter_previous (model, &iter)) {
+ return FALSE; /* Do nothing if we are already at the top */
+ }
+ } else {
+ if (!gtk_tree_model_iter_next (model, &iter)) {
+ return FALSE; /* Do nothing if we are already at the bottom */
+ }
+ }
+
+ /* We have to explicitly stop editing to ensure that self has the
+ keyboard focus before calling parent_class->move_cursor */
+ sj_tree_view_stop_editing (self);
+ parent_class->move_cursor (self, step, count);
+ return TRUE;
+}
+
/**
* Find the next activatable column in the given direction and return
* the column index and row offset. Wrap up/down. Assume activatable
@@ -241,7 +284,10 @@ sj_tree_view_move_cursor (GtkTreeView *self,
g_return_val_if_fail (GTK_IS_TREE_VIEW (self), FALSE);
g_return_val_if_fail (step == GTK_MOVEMENT_LOGICAL_POSITIONS ||
- step == GTK_MOVEMENT_VISUAL_POSITIONS, FALSE);
+ step == GTK_MOVEMENT_VISUAL_POSITIONS ||
+ step == GTK_MOVEMENT_DISPLAY_LINES ||
+ step == GTK_MOVEMENT_PAGES ||
+ step == GTK_MOVEMENT_BUFFER_ENDS, FALSE);
start_editing = sj_tree_view_is_editing (self);
@@ -267,6 +313,11 @@ sj_tree_view_move_cursor (GtkTreeView *self,
g_return_val_if_reached (FALSE);
}
break;
+ case GTK_MOVEMENT_DISPLAY_LINES:
+ case GTK_MOVEMENT_PAGES:
+ case GTK_MOVEMENT_BUFFER_ENDS:
+ moved = move_vertical (self, step, count);
+ break;
default:
g_return_val_if_reached (FALSE);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]