diff options
author | Andrei Karas <akaras@inbox.ru> | 2017-09-09 22:54:01 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2017-09-09 22:56:17 +0300 |
commit | 481ea0b776bbab92b500540f59c5a191c6e93cba (patch) | |
tree | 5b73e15b5ab16d67095852d83ba764d83c36cbb8 /src/input/keyboardconfig.cpp | |
parent | c108b00ddc98e99182bf1a0f83602772f4931122 (diff) | |
download | manaverse-481ea0b776bbab92b500540f59c5a191c6e93cba.tar.gz manaverse-481ea0b776bbab92b500540f59c5a191c6e93cba.tar.bz2 manaverse-481ea0b776bbab92b500540f59c5a191c6e93cba.tar.xz manaverse-481ea0b776bbab92b500540f59c5a191c6e93cba.zip |
Add workaround for fix alt-tab issue in SDL2.
Also add option to enable/disable this workaround.
Diffstat (limited to 'src/input/keyboardconfig.cpp')
-rw-r--r-- | src/input/keyboardconfig.cpp | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/src/input/keyboardconfig.cpp b/src/input/keyboardconfig.cpp index 1ce317db7..e90d126a5 100644 --- a/src/input/keyboardconfig.cpp +++ b/src/input/keyboardconfig.cpp @@ -23,6 +23,9 @@ #include "input/keyboardconfig.h" #include "configuration.h" +#ifdef USE_SDL2 +#include "settings.h" +#endif // USE_SDL2 #include "input/inputmanager.h" @@ -42,7 +45,8 @@ KeyboardConfig::KeyboardConfig() : mRepeatTime(0), mKeyToAction(), mKeyToId(), - mKeyTimeMap() + mKeyTimeMap(), + mBlockAltTab(true) { } @@ -52,6 +56,7 @@ void KeyboardConfig::init() delete [] mActiveKeys2; mActiveKeys2 = new uint8_t[500]; mRepeatTime = config.getIntValue("repeateInterval2") / 10; + mBlockAltTab = config.getBoolValue("blockAltTab"); } void KeyboardConfig::deinit() @@ -270,3 +275,33 @@ void KeyboardConfig::resetRepeat(const int key) if (it != mKeyTimeMap.end()) (*it).second = tick_time; } + +#ifdef USE_SDL2 + +bool KeyboardConfig::ignoreKey(const SDL_Event &restrict event) +{ + if (!mBlockAltTab || + mActiveKeys == nullptr) + { + return false; + } + const int key = event.key.keysym.scancode; + if (key == SDL_SCANCODE_TAB) + { +#if SDL_VERSION_ATLEAST(2, 0, 5) + // SDL_WINDOWEVENT_TAKE_FOCUS not triggered after focus restored + if (settings.inputFocused != KeyboardFocus::Focused2) + return true; +#endif // SDL_VERSION_ATLEAST(2, 0, 5) + + if (mActiveKeys[SDL_SCANCODE_LALT] != 0) + return true; + } + else if (key == SDL_SCANCODE_LALT) + { + if (mActiveKeys[SDL_SCANCODE_TAB] != 0) + return true; + } + return false; +} +#endif // USE_SDL2 |