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 (orig_keycode) {
#if defined(HAVE_IBUS_IBUS_H) || defined(HAVE_FCITX_FRONTEND_H) #if defined(HAVE_IBUS_IBUS_H) || defined(HAVE_FCITX_FRONTEND_H)
SDL_Scancode scancode = videodata->key_layout[orig_keycode]; SDL_Scancode scancode = videodata->key_layout[orig_keycode];
videodata->filter_code = orig_keycode;
videodata->filter_time = xevent.xkey.time;
if (orig_event_type == KeyPress) { if (orig_event_type == KeyPress) {
SDL_SendKeyboardKey(SDL_PRESSED, scancode); SDL_SendKeyboardKey(SDL_PRESSED, scancode);
} else { } else {
@ -582,6 +585,9 @@ X11_DispatchEvent(_THIS)
#endif #endif
} }
return; 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 */ /* 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 #if SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM
XkbDescPtr xkb; XkbDescPtr xkb;
#endif #endif
KeyCode filter_code;
Time filter_time;
} SDL_VideoData; } SDL_VideoData;
extern SDL_bool X11_UseDirectColorVisuals(void); extern SDL_bool X11_UseDirectColorVisuals(void);