Procházet zdrojové kódy

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.

(cherry picked from commit 1eeffc5933d49ee3b9de032a205da530ee83c786)
Frank Praznik před 11 měsíci
rodič
revize
2fff37fffc
1 změnil soubory, kde provedl 19 přidání a 16 odebrání
  1. 19 16
      src/video/x11/SDL_x11events.c

+ 19 - 16
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);
     }
 }