aboutsummaryrefslogtreecommitdiff
path: root/backends/keymapper/keymapper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'backends/keymapper/keymapper.cpp')
-rw-r--r--backends/keymapper/keymapper.cpp19
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