+2006-11-24 Michael Natterer <mitch@imendio.com>
+
+ * gtk/gtktreeview.c (gtk_tree_view_move_cursor_up_down): if we
+ can't go up/down, consult gtk_widget_keynav_failed() and leave the
+ widget if it returns FALSE (bug #322640).
+
2006-11-23 Behdad Esfahbod <behdad@gnome.org>
* gtk/gtkmain.c: Fix minor typo in docs. (#378632, Hannes Mueller)
GtkRBTree *new_cursor_tree = NULL;
GtkRBNode *new_cursor_node = NULL;
GtkTreePath *cursor_path = NULL;
+ gboolean grab_focus = TRUE;
if (! GTK_WIDGET_HAS_FOCUS (tree_view))
return;
else
{
gtk_tree_view_clamp_node_visible (tree_view, cursor_tree, cursor_node);
- gtk_widget_error_bell (GTK_WIDGET (tree_view));
+
+ if (!tree_view->priv->shift_pressed)
+ {
+ if (! gtk_widget_keynav_failed (GTK_WIDGET (tree_view),
+ count < 0 ?
+ GTK_DIR_UP : GTK_DIR_DOWN))
+ {
+ GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (tree_view));
+
+ if (toplevel)
+ gtk_widget_child_focus (toplevel,
+ count < 0 ?
+ GTK_DIR_TAB_BACKWARD :
+ GTK_DIR_TAB_FORWARD);
+
+ grab_focus = FALSE;
+ }
+ }
+ else
+ {
+ gtk_widget_error_bell (GTK_WIDGET (tree_view));
+ }
}
- gtk_widget_grab_focus (GTK_WIDGET (tree_view));
+ if (grab_focus)
+ gtk_widget_grab_focus (GTK_WIDGET (tree_view));
}
static void