mirror of
https://github.com/zed-industries/zed.git
synced 2026-04-18 07:47:53 +00:00
6a3111de79
Closes #49329 This area has regressed a few times across #34514, #35361, and #44234. The problem is that we were still mixing XKB client-side and server-side state handling on the same `xkb::State`. On X11, `XkbStateNotify` already keeps the client state synchronized. But the key event path was still doing two extra things on the shared `state.xkb`: - calling `update_key()` - rewriting the same state from `KeyPress` / `KeyRelease.state` The libxkbcommon X11 docs say that `XkbStateNotify` is the more accurate source of truth for X11 clients and that there is no need to call `xkb_state_update_key()` once the client state is synchronized. This follows the libxkbcommon X11 client model more closely by keeping persistent state notify-driven and using event-local state only for lookup. This PR fixes that by: - removing the remaining `update_key()` calls from X11 `KeyPress` / `KeyRelease` - keeping the long-lived `state.xkb` driven only by `XkbStateNotify` and keymap notifications - creating a temporary event-local `xkb::State` for per-event lookup I also added regression tests around the historical bugs in this area: - #14282: Caps Lock / Neo 2 regressions from the earlier X11 fixes - #31193: German key resolution - #26468: `space` with Cyrillic and Czech layouts / non-locked layout groups - #40678: macro-style shifted input like `Shift+]` Release Notes: - Fixed issue on Linux X11 where you coundn't input space key in some cases.