diff --git a/ChangeLog b/ChangeLog index 4ca7105c88..81b823fc75 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-10-09 Kristian Rietveld + + * gtk/gtktreeview.c (gtk_tree_view_move_cursor_up_down): we should + only "don't move the cursor, but just select the current node" if the + cursor node is actually selectable. (Fixes #483730, reported by + Geoff Bache). + 2007-10-08 Richard Hult * gdk/quartz/gdkwindow-quartz.c: (gdk_window_focus): Implement, diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index 1b2e687f49..37d5b9c34b 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -9655,6 +9655,7 @@ gtk_tree_view_move_cursor_up_down (GtkTreeView *tree_view, GtkRBNode *new_cursor_node = NULL; GtkTreePath *cursor_path = NULL; gboolean grab_focus = TRUE; + gboolean selectable; if (! GTK_WIDGET_HAS_FOCUS (tree_view)) return; @@ -9667,17 +9668,20 @@ gtk_tree_view_move_cursor_up_down (GtkTreeView *tree_view, cursor_path = gtk_tree_row_reference_get_path (tree_view->priv->cursor); _gtk_tree_view_find_node (tree_view, cursor_path, &cursor_tree, &cursor_node); - gtk_tree_path_free (cursor_path); if (cursor_tree == NULL) /* FIXME: we lost the cursor; should we get the first? */ return; selection_count = gtk_tree_selection_count_selected_rows (tree_view->priv->selection); + selectable = _gtk_tree_selection_row_is_selectable (tree_view->priv->selection, + cursor_node, + cursor_path); if (selection_count == 0 && tree_view->priv->selection->type != GTK_SELECTION_NONE - && !tree_view->priv->ctrl_pressed) + && !tree_view->priv->ctrl_pressed + && selectable) { /* Don't move the cursor, but just select the current node */ new_cursor_tree = cursor_tree; @@ -9693,6 +9697,8 @@ gtk_tree_view_move_cursor_up_down (GtkTreeView *tree_view, &new_cursor_tree, &new_cursor_node); } + gtk_tree_path_free (cursor_path); + if (new_cursor_node) { cursor_path = _gtk_tree_view_find_path (tree_view,