# HG changeset patch # User Alex Baines # Date 1478021885 0 # Tue Nov 01 17:38:05 2016 +0000 # Node ID 6e0b0a70351edd75c729ba7e78f2096d6c9e50f0 # Parent 46cfe31e501a298dd49e386f8b5c3a8ef20c7196 Skip duplicate key events sent by IMEs like uim. diff -r 46cfe31e501a -r 6e0b0a70351e src/video/x11/SDL_x11events.c --- a/src/video/x11/SDL_x11events.c Sun Oct 30 21:01:46 2016 +0100 +++ b/src/video/x11/SDL_x11events.c Tue Nov 01 17:38:05 2016 +0000 @@ -574,6 +574,9 @@ 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 @@ #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 */ diff -r 46cfe31e501a -r 6e0b0a70351e src/video/x11/SDL_x11video.h --- a/src/video/x11/SDL_x11video.h Sun Oct 30 21:01:46 2016 +0100 +++ b/src/video/x11/SDL_x11video.h Tue Nov 01 17:38:05 2016 +0000 @@ -133,6 +133,10 @@ #if SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM XkbDescPtr xkb; #endif + + KeyCode filter_code; + Time filter_time; + } SDL_VideoData; extern SDL_bool X11_UseDirectColorVisuals(void);