Skip duplicate key events sent by IMEs like uim.

This commit is contained in:
Alex Baines 2016-11-01 17:38:05 +00:00
parent d0c8bf7f0b
commit 8eb762769e
2 changed files with 10 additions and 0 deletions

View File

@ -574,6 +574,9 @@ X11_DispatchEvent(_THIS)
if (orig_keycode) {
#if defined(HAVE_IBUS_IBUS_H) || defined(HAVE_FCITX_FRONTEND_H)
SDL_Scancode scancode = videodata->key_layout[orig_keycode];
videodata->filter_code = orig_keycode;
videodata->filter_time = xevent.xkey.time;
if (orig_event_type == KeyPress) {
SDL_SendKeyboardKey(SDL_PRESSED, scancode);
} else {
@ -582,6 +585,9 @@ X11_DispatchEvent(_THIS)
#endif
}
return;
} else if (orig_keycode == videodata->filter_code && xevent.xkey.time == videodata->filter_time) {
/* This is a duplicate event, resent by an IME - skip it. */
return;
}
/* Send a SDL_SYSWMEVENT if the application wants them */

View File

@ -133,6 +133,10 @@ typedef struct SDL_VideoData
#if SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM
XkbDescPtr xkb;
#endif
KeyCode filter_code;
Time filter_time;
} SDL_VideoData;
extern SDL_bool X11_UseDirectColorVisuals(void);