[sound-juicer] Focus default cell before moving cursor
- From: Phillip Wood <pwood src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [sound-juicer] Focus default cell before moving cursor
- Date: Fri, 15 Aug 2014 13:26:17 +0000 (UTC)
commit abf793e612d052f59ac00cc05771c8a49ea00603
Author: Phillip Wood <phillip wood dunelm org uk>
Date: Sun Jul 13 18:48:04 2014 +0100
Focus default cell before moving cursor
If GtkTreeView::move-cursor is called when the cursor isn't currently
set then focus the default cell. This avoids the cursor being moved
before it is shown.
https://bugzilla.gnome.org/show_bug.cgi?id=151469
src/sj-tree-view.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 50 insertions(+), 0 deletions(-)
---
diff --git a/src/sj-tree-view.c b/src/sj-tree-view.c
index 80bdc8d..472e5f9 100644
--- a/src/sj-tree-view.c
+++ b/src/sj-tree-view.c
@@ -101,6 +101,48 @@ sj_tree_view_start_editing (GtkTreeView *self)
g_signal_emit_by_name (self, "select-cursor-row", TRUE, &ret);
}
+/**
+ * Focus the default cell if no cell has the focus
+ */
+static void
+sj_tree_view_focus_default_cell (GtkTreeView *self)
+{
+ GtkTreePath *path;
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *renderer;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+
+ gtk_tree_view_get_cursor (self, &path, &column);
+ model = gtk_tree_view_get_model (self);
+
+ if (path == NULL) {
+ if (model != NULL && gtk_tree_model_get_iter_first (model, &iter))
+ path = gtk_tree_model_get_path (model, &iter);
+ else
+ return;
+ }
+ if (column == NULL) {
+ GList *list = gtk_tree_view_get_columns (self);
+ column = list->data;
+ g_list_free (list);
+ list = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (column));
+ renderer = list->data;
+ g_list_free (list);
+ } else {
+ GtkCellArea *area;
+ area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (column));
+ renderer = gtk_cell_area_get_focus_cell (area);
+ if (renderer == NULL) {
+ GList *list = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (column));
+ renderer = list->data;
+ g_list_free (list);
+ }
+ }
+
+ gtk_tree_view_set_cursor_on_cell (self, path, column, renderer, FALSE);
+ gtk_tree_path_free (path);
+}
/**
* Stop editing, move cursor up/down.
@@ -289,6 +331,14 @@ sj_tree_view_move_cursor (GtkTreeView *self,
step == GTK_MOVEMENT_PAGES ||
step == GTK_MOVEMENT_BUFFER_ENDS, FALSE);
+ gtk_tree_view_get_cursor (self, &path, &column);
+ if (path == NULL || column == NULL) {
+ sj_tree_view_focus_default_cell (self);
+ gtk_tree_path_free (path);
+ return TRUE;
+ }
+ gtk_tree_path_free (path);
+
start_editing = sj_tree_view_is_editing (self);
switch (step) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]