From 8f1e95434725a730e08c34ffdc076436634183ff Mon Sep 17 00:00:00 2001 From: lilydjwg Date: Thu, 25 Jan 2024 20:49:27 +0800 Subject: [PATCH] don't wlr_seat_set_keyboard if keys are going to the input method. Or we'll alternate between two keyboards, sending a lot of keymap and repeat_info events to all clients. --- src/core/seat/keyboard.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/core/seat/keyboard.cpp b/src/core/seat/keyboard.cpp index a2ae72a5c..026b4a43a 100644 --- a/src/core/seat/keyboard.cpp +++ b/src/core/seat/keyboard.cpp @@ -37,8 +37,12 @@ void wf::keyboard_t::setup_listeners() return; } - seat->priv->set_keyboard(this); auto is_im_sent = wf::get_core_impl().im_relay->is_im_sent(handle); + if (!is_im_sent) + { + seat->priv->set_keyboard(this); + } + if ((is_im_sent || !handle_keyboard_key(ev->keycode, ev->state)) && (mode == input_event_processing_mode_t::FULL)) { @@ -80,7 +84,11 @@ void wf::keyboard_t::setup_listeners() if (!wf::get_core_impl().im_relay->handle_modifier(kbd)) { - wlr_seat_set_keyboard(seat, kbd); + if (!wf::get_core_impl().im_relay->is_im_sent(handle)) + { + wlr_seat_set_keyboard(seat, kbd); + } + wlr_seat_keyboard_send_modifiers(seat, &kbd->modifiers); }