From 1eeffc5933d49ee3b9de032a205da530ee83c786 Mon Sep 17 00:00:00 2001
From: Frank Praznik <[EMAIL REDACTED]>
Date: Mon, 12 May 2025 19:16:31 -0400
Subject: [PATCH] Revert "x11: Send key events for dead keys consumed by the
IME"
This and its related commits introduced some bugs and quirks such as duplicated and delayed/missed key events that can't be easily worked around, so revert this for now.
This reverts commit 47162a4168c4607e8771bab020ea8f2acd16121a.
---
src/video/x11/SDL_x11events.c | 35 +++++++++++++++++++----------------
1 file changed, 19 insertions(+), 16 deletions(-)
diff --git a/src/video/x11/SDL_x11events.c b/src/video/x11/SDL_x11events.c
index a4e5d9caf67a3..84e466255d4fb 100644
--- a/src/video/x11/SDL_x11events.c
+++ b/src/video/x11/SDL_x11events.c
@@ -987,26 +987,29 @@ void X11_HandleKeyEvent(SDL_VideoDevice *_this, SDL_WindowData *windowdata, SDL_
}
}
- if (pressed) {
- X11_HandleModifierKeys(videodata, scancode, true, true);
- SDL_SendKeyboardKeyIgnoreModifiers(timestamp, keyboardID, keycode, scancode, true);
+ if (!handled_by_ime) {
+ if (pressed) {
+ X11_HandleModifierKeys(videodata, scancode, true, true);
+ SDL_SendKeyboardKeyIgnoreModifiers(timestamp, keyboardID, keycode, scancode, true);
+
+ if (*text && !(SDL_GetModState() & (SDL_KMOD_CTRL | SDL_KMOD_ALT))) {
+ text[text_length] = '\0';
+ X11_ClearComposition(windowdata);
+ SDL_SendKeyboardText(text);
+ }
+ } else {
+ if (X11_KeyRepeat(display, xevent)) {
+ // We're about to get a repeated key down, ignore the key up
+ return;
+ }
- // Synthesize a text event if the IME didn't consume a printable character
- if (*text && !(SDL_GetModState() & (SDL_KMOD_CTRL | SDL_KMOD_ALT))) {
- text[text_length] = '\0';
- X11_ClearComposition(windowdata);
- SDL_SendKeyboardText(text);
+ X11_HandleModifierKeys(videodata, scancode, false, true);
+ SDL_SendKeyboardKeyIgnoreModifiers(timestamp, keyboardID, keycode, scancode, false);
}
+ }
+ if (pressed) {
X11_UpdateUserTime(windowdata, xevent->xkey.time);
- } else {
- if (X11_KeyRepeat(display, xevent)) {
- // We're about to get a repeated key down, ignore the key up
- return;
- }
-
- X11_HandleModifierKeys(videodata, scancode, false, true);
- SDL_SendKeyboardKeyIgnoreModifiers(timestamp, keyboardID, keycode, scancode, false);
}
}