summaryrefslogtreecommitdiff
path: root/gtk/gtkcolumnviewrowwidget.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2023-03-21 14:08:14 +0100
committerBenjamin Otte <otte@redhat.com>2023-03-23 04:45:03 +0100
commit8e17abb8fefe063147d6d55a361a38390da8a9b9 (patch)
tree30bb7ac40d75e59924a667dc1397e4b5c5464cd8 /gtk/gtkcolumnviewrowwidget.c
parentfa7a5773d464c48c43a6c1306822824169c2a03b (diff)
downloadgtk+-8e17abb8fefe063147d6d55a361a38390da8a9b9.tar.gz
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.
Diffstat (limited to 'gtk/gtkcolumnviewrowwidget.c')
-rw-r--r--gtk/gtkcolumnviewrowwidget.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/gtk/gtkcolumnviewrowwidget.c b/gtk/gtkcolumnviewrowwidget.c
index e3b9db6c1a..b4f4ef9fa7 100644
--- a/gtk/gtkcolumnviewrowwidget.c
+++ b/gtk/gtkcolumnviewrowwidget.c
@@ -354,12 +354,38 @@ 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)
{
GtkListItemBaseClass *base_class = GTK_LIST_ITEM_BASE_CLASS (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);