diff options
Diffstat (limited to 'backends/keymapper/keymapper.cpp')
-rw-r--r-- | backends/keymapper/keymapper.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/backends/keymapper/keymapper.cpp b/backends/keymapper/keymapper.cpp index c0c454168c..d101e8e0d2 100644 --- a/backends/keymapper/keymapper.cpp +++ b/backends/keymapper/keymapper.cpp @@ -192,18 +192,29 @@ bool Keymapper::mapKey(const KeyState& key, bool keyDown) { Action *action = 0; if (keyDown) { + // HACK: Temporary fix for modifier recognition, get the hwkey's keystate + // to correct for keydown and keyup generating different ascii codes in SDL + // to be solved more permanently by using a structure other than KeyState + + const HardwareKey *hwkey = findHardwareKey(key); + if (!hwkey) + return false; + + KeyState k = hwkey->key; + k.flags = key.flags & hwkey->modMask; + // Search for key in active keymap stack for (int i = _activeMaps.size() - 1; i >= 0; --i) { MapRecord mr = _activeMaps[i]; - action = mr.keymap->getMappedAction(key); + action = mr.keymap->getMappedAction(k); if (action || mr.inherit == false) break; } if (action) - _keysDown[key] = action; + _keysDown[k] = action; } else { HashMap<KeyState, Action*>::iterator it = _keysDown.find(key); @@ -272,6 +283,10 @@ const HardwareKey *Keymapper::findHardwareKey(const KeyState& key) { return (_hardwareKeys) ? _hardwareKeys->findHardwareKey(key) : 0; } +const HardwareMod *Keymapper::findHardwareMod(const KeyState& key) { + return (_hardwareKeys) ? _hardwareKeys->findHardwareMod(key) : 0; +} + } // end of namespace Common #endif // #ifdef ENABLE_KEYMAPPER |