From 717ee78997144e8c8497d1a4e2570cfccc1288ce Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Fri, 23 Dec 2022 14:51:01 +0100 Subject: [PATCH] backends/native: Set up keyboard a11y when keyboards are plugged Commit 4e0ffba5c attempted to fix initialization of keyboard a11y, but mousekeys do attempt to create a virtual input device at a time that it is too early to try to create one. Defer this operation until keyboard devices are added, so that we are ensured to already have the seat input thread set up. Fixes: 4e0ffba5c - backends/native: Initialize keyboard a11y on startup Part-of: --- src/backends/native/meta-seat-impl.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/backends/native/meta-seat-impl.c b/src/backends/native/meta-seat-impl.c index 83c6546ad..9940c707c 100644 --- a/src/backends/native/meta-seat-impl.c +++ b/src/backends/native/meta-seat-impl.c @@ -1733,6 +1733,18 @@ evdev_add_device (MetaSeatImpl *seat_impl, if (is_touchscreen || is_tablet_switch || is_pointer) update_touch_mode (seat_impl); + if (type == CLUTTER_KEYBOARD_DEVICE) + { + MetaKbdA11ySettings kbd_a11y_settings; + MetaInputDeviceNative *keyboard_native; + + keyboard_native = META_INPUT_DEVICE_NATIVE (seat_impl->core_keyboard); + meta_input_settings_get_kbd_a11y_settings (seat_impl->input_settings, + &kbd_a11y_settings); + meta_input_device_native_apply_kbd_a11y_settings_in_impl (keyboard_native, + &kbd_a11y_settings); + } + return device; } @@ -2818,8 +2830,6 @@ input_thread (MetaSeatImpl *seat_impl) { MetaSeatImplPrivate *priv = meta_seat_impl_get_instance_private (seat_impl); struct xkb_keymap *xkb_keymap; - MetaKbdA11ySettings kbd_a11y_settings; - MetaInputDeviceNative *keyboard_native; g_main_context_push_thread_default (seat_impl->input_context); @@ -2867,12 +2877,6 @@ input_thread (MetaSeatImpl *seat_impl) seat_impl->has_tablet_switch = has_tablet_switch (seat_impl); update_touch_mode (seat_impl); - keyboard_native = META_INPUT_DEVICE_NATIVE (seat_impl->core_keyboard); - meta_input_settings_get_kbd_a11y_settings (seat_impl->input_settings, - &kbd_a11y_settings); - meta_input_device_native_apply_kbd_a11y_settings_in_impl (keyboard_native, - &kbd_a11y_settings); - g_mutex_lock (&seat_impl->init_mutex); seat_impl->input_thread_initialized = TRUE; g_cond_signal (&seat_impl->init_cond);