diff options
Diffstat (limited to 'backends/keymapper/remap-dialog.cpp')
-rw-r--r-- | backends/keymapper/remap-dialog.cpp | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/backends/keymapper/remap-dialog.cpp b/backends/keymapper/remap-dialog.cpp index 0440acdd0a..323790a700 100644 --- a/backends/keymapper/remap-dialog.cpp +++ b/backends/keymapper/remap-dialog.cpp @@ -240,10 +240,16 @@ void RemapDialog::handleKeyUp(Common::KeyState state) { if (_activeRemapAction) { const HardwareKey *hwkey = _keymapper->findHardwareKey(state); - debug(0, "Key: %d, %d (%c), %x", state.keycode, state.ascii, (state.ascii ? state.ascii : ' '), state.flags); + debug( "Key: %d, %d (%c), %x", state.keycode, state.ascii, (state.ascii ? state.ascii : ' '), state.flags); if (hwkey) { - _activeRemapAction->mapKey(hwkey); + //FIXME: this leaks memory and there's no good way to get this pointer again as + //a non-const. this should be done differently when we switch to actionKeys. + HardwareKey *mappedkey = new HardwareKey(*hwkey); + mappedkey->description = hwkey->description; + mappedkey->key.flags = (state.flags & hwkey->modMask); + + _activeRemapAction->mapKey(mappedkey); _activeRemapAction->getParent()->saveMappings(); _changes = true; stopRemapping(); @@ -359,8 +365,21 @@ void RemapDialog::refreshKeymap() { const HardwareKey *mappedKey = info.action->getMappedKey(); if (mappedKey) - widg.keyButton->setLabel(mappedKey->description); - else + { + Common::String description = ""; + if (mappedKey->key.flags) + { + byte flags = mappedKey->key.flags; + if (flags & KBD_CTRL) + description += "Ctrl+"; + if (flags & KBD_SHIFT) + description += "Shift+"; + if (flags & KBD_ALT) + description += "Alt+"; + } + description += mappedKey->description; + widg.keyButton->setLabel(description); + } else widg.keyButton->setLabel("-"); widg.actionText->setVisible(true); |