SDL: Revert "x11: Send key events for dead keys consumed by the IME"

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);
     }
 }