From: Benjamin Otte Date: Tue, 21 Mar 2023 13:08:14 +0000 (+0100) Subject: columnviewrowwidget: Handle left/right arrow keys X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~1^2~514^2~2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=8e17abb8fefe063147d6d55a361a38390da8a9b9;p=gtk4.git columnviewrowwidget: Handle left/right arrow keys Make it move focus just like GtkWindow would. Otherwise the listview will (try to) handle it and move focus between cells - which doesn't do anything for lists and only works with grids. --- diff --git a/gtk/gtkcolumnviewrowwidget.c b/gtk/gtkcolumnviewrowwidget.c index e3b9db6c1a..b4f4ef9fa7 100644 --- a/gtk/gtkcolumnviewrowwidget.c +++ b/gtk/gtkcolumnviewrowwidget.c @@ -353,6 +353,31 @@ gtk_column_view_row_widget_allocate (GtkWidget *widget, } } +static void +add_arrow_bindings (GtkWidgetClass *widget_class, + guint keysym, + GtkDirectionType direction) +{ + guint keypad_keysym = keysym - GDK_KEY_Left + GDK_KEY_KP_Left; + + gtk_widget_class_add_binding_signal (widget_class, keysym, 0, + "move-focus", + "(i)", + direction); + gtk_widget_class_add_binding_signal (widget_class, keysym, GDK_CONTROL_MASK, + "move-focus", + "(i)", + direction); + gtk_widget_class_add_binding_signal (widget_class, keypad_keysym, 0, + "move-focus", + "(i)", + direction); + gtk_widget_class_add_binding_signal (widget_class, keypad_keysym, GDK_CONTROL_MASK, + "move-focus", + "(i)", + direction); +} + static void gtk_column_view_row_widget_class_init (GtkColumnViewRowWidgetClass *klass) { @@ -360,6 +385,7 @@ gtk_column_view_row_widget_class_init (GtkColumnViewRowWidgetClass *klass) GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); base_class->update = gtk_column_view_row_widget_update; + widget_class->focus = gtk_column_view_row_widget_focus; widget_class->grab_focus = gtk_column_view_row_widget_grab_focus; widget_class->measure = gtk_column_view_row_widget_measure; @@ -367,6 +393,9 @@ gtk_column_view_row_widget_class_init (GtkColumnViewRowWidgetClass *klass) widget_class->root = gtk_column_view_row_widget_root; widget_class->unroot = gtk_column_view_row_widget_unroot; + add_arrow_bindings (widget_class, GDK_KEY_Left, GTK_DIR_LEFT); + add_arrow_bindings (widget_class, GDK_KEY_Right, GTK_DIR_RIGHT); + /* This gets overwritten by gtk_column_view_row_widget_new() but better safe than sorry */ gtk_widget_class_set_css_name (widget_class, g_intern_static_string ("row")); gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_ROW);