From a9ee6b73263bac890b6a084cdf6f445931923875 Mon Sep 17 00:00:00 2001 From: Alexander Melnyk Date: Mon, 29 Dec 2025 18:43:04 +0200 Subject: [PATCH] xkb: Fix locked/latched indicator desync across multiple keyboards When a group indicator (or a latched indicator of any kind) is defined, e.g.: indicator "Scroll Lock" { groups = Group2; } the logical and physical indicator state may desync across multiple connected keyboards. This is caused by XkbPushLockedStateToSlaves only pushing locked_mods to the slave devices. Pushing locked_group (as well as latched groups/mods) along with locked_mods resolves the issue. The issue is not observed with API calls because a different code path is taken (avoiding XkbPushLockedStateToSlaves altogether). Signed-off-by: Alexander Melnyk Part-of: (cherry picked from commit 36a7fdd3152a0763636fb33a018517d831f64ee6) --- xkb/xkbActions.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/xkb/xkbActions.c b/xkb/xkbActions.c index 8dd9d7da0..776c702ab 100644 --- a/xkb/xkbActions.c +++ b/xkb/xkbActions.c @@ -1233,6 +1233,12 @@ XkbPushLockedStateToSlaves(DeviceIntPtr master, int evtype, int key) dev->key->xkbInfo->state.locked_mods = master->key->xkbInfo->state.locked_mods; + dev->key->xkbInfo->state.locked_group = + master->key->xkbInfo->state.locked_group; + dev->key->xkbInfo->state.latched_mods = + master->key->xkbInfo->state.latched_mods; + dev->key->xkbInfo->state.latched_group = + master->key->xkbInfo->state.latched_group; _XkbApplyState(dev, genStateNotify, evtype, key); }