diff options
-rw-r--r-- | backends/keymapper/hardware-key.h | 22 | ||||
-rw-r--r-- | backends/keymapper/keymapper.cpp | 4 | ||||
-rw-r--r-- | backends/keymapper/keymapper.h | 5 | ||||
-rw-r--r-- | backends/keymapper/remap-dialog.cpp | 6 | ||||
-rw-r--r-- | backends/platform/sdl/hardwarekeys.cpp | 52 |
5 files changed, 61 insertions, 28 deletions
diff --git a/backends/keymapper/hardware-key.h b/backends/keymapper/hardware-key.h index c8c1d3c145..34631a9484 100644 --- a/backends/keymapper/hardware-key.h +++ b/backends/keymapper/hardware-key.h @@ -127,7 +127,27 @@ public: List<const HardwareKey*>::const_iterator it; for (it = _keys.begin(); it != _keys.end(); it++) { - if ((*it)->key == keystate) + if ((*it)->key.keycode == keystate.keycode) + return (*it); + } + return 0; + } + + const HardwareMod *findHardwareMod(const char *id) const { + List<const HardwareMod*>::const_iterator it; + + for (it = _mods.begin(); it != _mods.end(); it++) { + if (strncmp((*it)->hwModId, id, HWKEY_ID_SIZE) == 0) + return (*it); + } + return 0; + } + + const HardwareMod *findHardwareMod(const KeyState& keystate) const { + List<const HardwareMod*>::const_iterator it; + + for (it = _mods.begin(); it != _mods.end(); it++) { + if ((*it)->modFlags == keystate.flags) return (*it); } return 0; diff --git a/backends/keymapper/keymapper.cpp b/backends/keymapper/keymapper.cpp index c0c454168c..a121ebafee 100644 --- a/backends/keymapper/keymapper.cpp +++ b/backends/keymapper/keymapper.cpp @@ -272,6 +272,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 diff --git a/backends/keymapper/keymapper.h b/backends/keymapper/keymapper.h index f492882ca2..af3314f8f5 100644 --- a/backends/keymapper/keymapper.h +++ b/backends/keymapper/keymapper.h @@ -170,6 +170,11 @@ public: */ const HardwareKey *findHardwareKey(const KeyState& key); + /** + * Return a HardwareMod pointer for the given key state + */ + const HardwareMod *findHardwareMod(const KeyState& key); + Domain& getGlobalDomain() { return _globalDomain; } Domain& getGameDomain() { return _gameDomain; } const Stack<MapRecord>& getActiveStack() const { return _activeMaps; } diff --git a/backends/keymapper/remap-dialog.cpp b/backends/keymapper/remap-dialog.cpp index 0440acdd0a..9341c82747 100644 --- a/backends/keymapper/remap-dialog.cpp +++ b/backends/keymapper/remap-dialog.cpp @@ -239,11 +239,15 @@ void RemapDialog::handleKeyDown(Common::KeyState state) { void RemapDialog::handleKeyUp(Common::KeyState state) { if (_activeRemapAction) { const HardwareKey *hwkey = _keymapper->findHardwareKey(state); + const HardwareMod *hwmod = _keymapper->findHardwareMod(state); debug(0, "Key: %d, %d (%c), %x", state.keycode, state.ascii, (state.ascii ? state.ascii : ' '), state.flags); if (hwkey) { - _activeRemapAction->mapKey(hwkey); + HardwareKey *temphwkey = new HardwareKey(*hwkey); + temphwkey->description = hwkey->description; + temphwkey->key.flags = hwmod->modFlags; + _activeRemapAction->mapKey(temphwkey); _activeRemapAction->getParent()->saveMappings(); _changes = true; stopRemapping(); diff --git a/backends/platform/sdl/hardwarekeys.cpp b/backends/platform/sdl/hardwarekeys.cpp index bba48286f0..c063ea5bff 100644 --- a/backends/platform/sdl/hardwarekeys.cpp +++ b/backends/platform/sdl/hardwarekeys.cpp @@ -86,32 +86,32 @@ static const Key keys[] = { {"CARET", KEYCODE_CARET, '^', "^", kActionKeyType, ~0}, {"UNDERSCORE", KEYCODE_UNDERSCORE, '_', "_", kActionKeyType, ~0}, {"BACKQUOTE", KEYCODE_BACKQUOTE, '`', "`", kActionKeyType, ~0}, - {"a", KEYCODE_a, 'A', "A", kActionKeyType, ~0}, - {"b", KEYCODE_b, 'B', "B", kActionKeyType, ~0}, - {"c", KEYCODE_c, 'C', "C", kActionKeyType, ~0}, - {"d", KEYCODE_d, 'D', "D", kActionKeyType, ~0}, - {"e", KEYCODE_e, 'E', "E", kActionKeyType, ~0}, - {"f", KEYCODE_f, 'F', "F", kActionKeyType, ~0}, - {"g", KEYCODE_g, 'G', "G", kActionKeyType, ~0}, - {"h", KEYCODE_h, 'H', "H", kActionKeyType, ~0}, - {"i", KEYCODE_i, 'I', "I", kActionKeyType, ~0}, - {"j", KEYCODE_j, 'J', "J", kActionKeyType, ~0}, - {"k", KEYCODE_k, 'K', "K", kActionKeyType, ~0}, - {"l", KEYCODE_l, 'L', "L", kActionKeyType, ~0}, - {"m", KEYCODE_m, 'M', "M", kActionKeyType, ~0}, - {"n", KEYCODE_n, 'N', "N", kActionKeyType, ~0}, - {"o", KEYCODE_o, 'O', "O", kActionKeyType, ~0}, - {"p", KEYCODE_p, 'P', "P", kActionKeyType, ~0}, - {"q", KEYCODE_q, 'Q', "Q", kActionKeyType, ~0}, - {"r", KEYCODE_r, 'R', "R", kActionKeyType, ~0}, - {"s", KEYCODE_s, 'S', "S", kActionKeyType, ~0}, - {"t", KEYCODE_t, 'T', "T", kActionKeyType, ~0}, - {"u", KEYCODE_u, 'U', "U", kActionKeyType, ~0}, - {"v", KEYCODE_v, 'V', "V", kActionKeyType, ~0}, - {"w", KEYCODE_w, 'W', "W", kActionKeyType, ~0}, - {"x", KEYCODE_x, 'X', "X", kActionKeyType, ~0}, - {"y", KEYCODE_y, 'Y', "Y", kActionKeyType, ~0}, - {"z", KEYCODE_z, 'Z', "Z", kActionKeyType, ~0}, + {"a", KEYCODE_a, 'a', "A", kActionKeyType, ~0}, + {"b", KEYCODE_b, 'b', "B", kActionKeyType, ~0}, + {"c", KEYCODE_c, 'c', "C", kActionKeyType, ~0}, + {"d", KEYCODE_d, 'd', "D", kActionKeyType, ~0}, + {"e", KEYCODE_e, 'e', "E", kActionKeyType, ~0}, + {"f", KEYCODE_f, 'f', "F", kActionKeyType, ~0}, + {"g", KEYCODE_g, 'g', "G", kActionKeyType, ~0}, + {"h", KEYCODE_h, 'h', "H", kActionKeyType, ~0}, + {"i", KEYCODE_i, 'i', "I", kActionKeyType, ~0}, + {"j", KEYCODE_j, 'j', "J", kActionKeyType, ~0}, + {"k", KEYCODE_k, 'k', "K", kActionKeyType, ~0}, + {"l", KEYCODE_l, 'l', "L", kActionKeyType, ~0}, + {"m", KEYCODE_m, 'm', "M", kActionKeyType, ~0}, + {"n", KEYCODE_n, 'n', "N", kActionKeyType, ~0}, + {"o", KEYCODE_o, 'o', "O", kActionKeyType, ~0}, + {"p", KEYCODE_p, 'p', "P", kActionKeyType, ~0}, + {"q", KEYCODE_q, 'q', "Q", kActionKeyType, ~0}, + {"r", KEYCODE_r, 'r', "R", kActionKeyType, ~0}, + {"s", KEYCODE_s, 's', "S", kActionKeyType, ~0}, + {"t", KEYCODE_t, 't', "T", kActionKeyType, ~0}, + {"u", KEYCODE_u, 'u', "U", kActionKeyType, ~0}, + {"v", KEYCODE_v, 'v', "V", kActionKeyType, ~0}, + {"w", KEYCODE_w, 'w', "W", kActionKeyType, ~0}, + {"x", KEYCODE_x, 'x', "X", kActionKeyType, ~0}, + {"y", KEYCODE_y, 'y', "Y", kActionKeyType, ~0}, + {"z", KEYCODE_z, 'z', "Z", kActionKeyType, ~0}, {"DELETE", KEYCODE_DELETE, 0, "Del", kActionKeyType, ~0}, // Numeric keypad |