From 1e7baefe96606bc7beb7d60f6c69eb209ece832b Mon Sep 17 00:00:00 2001 From: Olivier Tilloy Date: Thu, 3 Apr 2025 14:15:58 +0200 Subject: [PATCH] seat/keyboard: optimize wlr_seat_set_keyboard to send the keymap only if it has changed --- types/seat/wlr_seat_keyboard.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/types/seat/wlr_seat_keyboard.c b/types/seat/wlr_seat_keyboard.c index 56f83b7f4..3227035e2 100644 --- a/types/seat/wlr_seat_keyboard.c +++ b/types/seat/wlr_seat_keyboard.c @@ -122,6 +122,11 @@ void wlr_seat_set_keyboard(struct wlr_seat *seat, return; } + // send the keymap only if it has changed + bool needs_keymap_update = + !seat->keyboard_state.keyboard || !keyboard || + seat->keyboard_state.keyboard->keymap != keyboard->keymap; + if (seat->keyboard_state.keyboard) { wl_list_remove(&seat->keyboard_state.keyboard_destroy.link); wl_list_remove(&seat->keyboard_state.keyboard_keymap.link); @@ -145,7 +150,9 @@ void wlr_seat_set_keyboard(struct wlr_seat *seat, struct wlr_seat_client *client; wl_list_for_each(client, &seat->clients, link) { - seat_client_send_keymap(client, keyboard); + if (needs_keymap_update) { + seat_client_send_keymap(client, keyboard); + } seat_client_send_repeat_info(client, keyboard); }