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