diff options
author | Christopher Davis <christopherdavis@gnome.org> | 2022-02-12 17:49:06 -0800 |
---|---|---|
committer | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2022-02-13 13:33:25 +0000 |
commit | cd4dd18f52679f5797e1c13d7ba3f8de1c30880e (patch) | |
tree | eaa842efb8243f24b77b6e844a953ed5a2c7e258 | |
parent | 1a3971fdbefb4763a4df3c31852354ae743b65a2 (diff) | |
download | gnome-control-center-cd4dd18f52679f5797e1c13d7ba3f8de1c30880e.tar.gz |
keyboard: Handle `keynav-failed` on input source list
Fixes keynav with arrows between the input list
group and other groups.
-rw-r--r-- | panels/keyboard/cc-input-list-box.c | 18 | ||||
-rw-r--r-- | panels/keyboard/cc-input-list-box.ui | 1 |
2 files changed, 19 insertions, 0 deletions
diff --git a/panels/keyboard/cc-input-list-box.c b/panels/keyboard/cc-input-list-box.c index 2d7aa581c..1253af71c 100644 --- a/panels/keyboard/cc-input-list-box.c +++ b/panels/keyboard/cc-input-list-box.c @@ -182,6 +182,23 @@ maybe_start_ibus (void) #endif +static gboolean +keynav_failed_cb (CcInputListBox *self, + GtkDirectionType direction, + GtkWidget *list) +{ + GtkWidget *toplevel = GTK_WIDGET (gtk_widget_get_root (GTK_WIDGET (self))); + + if (!toplevel) + return FALSE; + + if (direction != GTK_DIR_UP && direction != GTK_DIR_DOWN) + return FALSE; + + return gtk_widget_child_focus (toplevel, direction == GTK_DIR_UP ? + GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD); +} + static void row_settings_cb (CcInputListBox *self, CcInputRow *row) @@ -735,6 +752,7 @@ cc_input_list_box_class_init (CcInputListBoxClass *klass) gtk_widget_class_bind_template_child (widget_class, CcInputListBox, no_inputs_row); gtk_widget_class_bind_template_callback (widget_class, input_row_activated_cb); + gtk_widget_class_bind_template_callback (widget_class, keynav_failed_cb); } static void diff --git a/panels/keyboard/cc-input-list-box.ui b/panels/keyboard/cc-input-list-box.ui index e50bfde54..036cca423 100644 --- a/panels/keyboard/cc-input-list-box.ui +++ b/panels/keyboard/cc-input-list-box.ui @@ -9,6 +9,7 @@ <property name="vexpand">True</property> <property name="selection-mode">none</property> <signal name="row_activated" handler="input_row_activated_cb" object="CcInputListBox" swapped="yes"/> + <signal name="keynav_failed" handler="keynav_failed_cb" object="CcInputListBox" swapped="yes"/> <style> <class name="boxed-list"/> </style> |