diff options
author | Johannes Schickel | 2016-05-22 13:04:46 +0200 |
---|---|---|
committer | Johannes Schickel | 2016-05-22 13:09:24 +0200 |
commit | c925e5b35cf87b7e0adb88767fa282ad0d36cf12 (patch) | |
tree | 6ec3dd1f95f1d0282daf7fe80804f13483aa214a /backends | |
parent | 6581bcad6dfb409924af55dc67e050f3a7504da1 (diff) | |
download | scummvm-rg350-c925e5b35cf87b7e0adb88767fa282ad0d36cf12.tar.gz scummvm-rg350-c925e5b35cf87b7e0adb88767fa282ad0d36cf12.tar.bz2 scummvm-rg350-c925e5b35cf87b7e0adb88767fa282ad0d36cf12.zip |
SDL: Make TEXTINPUT handling more reliable for SDL2.
This reduces the likelihood of entering two characters per keypress in our guy
on Windows. In fact, during my brief testing with the filter widget in the
launcher I was not able to trigger the former behavior at all anymore.
Diffstat (limited to 'backends')
-rw-r--r-- | backends/events/sdl/sdl-events.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/backends/events/sdl/sdl-events.cpp b/backends/events/sdl/sdl-events.cpp index 7b56a0a955..00e2f25cbc 100644 --- a/backends/events/sdl/sdl-events.cpp +++ b/backends/events/sdl/sdl-events.cpp @@ -872,6 +872,21 @@ uint32 SdlEventSource::obtainUnicode(const SDL_keysym keySym) { #if SDL_VERSION_ATLEAST(2, 0, 0) SDL_Event events[2]; + // Update the event queue here to give SDL a chance to insert TEXTINPUT + // events for KEYDOWN events. Otherwise we have a high chance that on + // Windows the TEXTINPUT event is not in the event queue at this point. + // In this case we will get two events with ascii values due to mapKey + // and dispatchSDLEvent. This results in nasty double input of characters + // in the GUI. + // + // FIXME: This is all a bit fragile because in mapKey we derive the ascii + // value from the key code if no unicode value is given. This is legacy + // behavior and should be removed anyway. If that is removed, we might not + // even need to do this peeking here but instead can rely on the + // SDL_TEXTINPUT case in dispatchSDLEvent to introduce keydown/keyup with + // proper ASCII values (but with KEYCODE_INVALID as keycode). + SDL_PumpEvents(); + // In SDL2, the unicode field has been removed from the keysym struct. // Instead a SDL_TEXTINPUT event is generated on key combinations that // generates unicode. |