[gnome-control-center] keyboard: Handle `keynav-failed` on input source list
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] keyboard: Handle `keynav-failed` on input source list
- Date: Sun, 13 Feb 2022 13:41:33 +0000 (UTC)
commit cd4dd18f52679f5797e1c13d7ba3f8de1c30880e
Author: Christopher Davis <christopherdavis gnome org>
Date: Sat Feb 12 17:49:06 2022 -0800
keyboard: Handle `keynav-failed` on input source list
Fixes keynav with arrows between the input list
group and other groups.
panels/keyboard/cc-input-list-box.c | 18 ++++++++++++++++++
panels/keyboard/cc-input-list-box.ui | 1 +
2 files changed, 19 insertions(+)
---
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>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]