Fix X11 key injection modifier release handling

This commit is contained in:
Thales Maciel 2026-02-27 15:22:54 -03:00
parent 993f51712b
commit 98b13d1069
2 changed files with 54 additions and 5 deletions

View file

@ -437,11 +437,17 @@ class X11Adapter:
if keycode == 0:
continue
keycodes.append(keycode)
for code in keycodes:
xtest.fake_input(dpy, X.KeyPress, code)
for code in reversed(keycodes):
xtest.fake_input(dpy, X.KeyRelease, code)
dpy.flush()
pressed: list[int] = []
try:
for code in keycodes:
xtest.fake_input(dpy, X.KeyPress, code)
pressed.append(code)
finally:
for code in reversed(pressed):
xtest.fake_input(dpy, X.KeyRelease, code)
# Ensure all synthetic key events are processed before the display
# may be closed by callers.
dpy.sync()
def _keysym_for_char(self, ch: str) -> tuple[int | None, bool]:
if ch.isupper():