[sound-juicer] Add vertical movement to SjTreeView
- From: Phillip Wood <pwood src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [sound-juicer] Add vertical movement to SjTreeView
- Date: Fri, 15 Aug 2014 13:26:12 +0000 (UTC)
commit 3052213358597c71ed24734e9c8a1d966cb77a55
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 7ca0668..80bdc8d 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]