diff options
-rw-r--r-- | backends/keymapper/keymapper.cpp | 6 | ||||
-rw-r--r-- | backends/keymapper/keymapper.h | 4 | ||||
-rw-r--r-- | backends/keymapper/remap-dialog.cpp | 20 | ||||
-rw-r--r-- | base/main.cpp | 3 |
4 files changed, 30 insertions, 3 deletions
diff --git a/backends/keymapper/keymapper.cpp b/backends/keymapper/keymapper.cpp index 29f495cd53..f9d6e7a60f 100644 --- a/backends/keymapper/keymapper.cpp +++ b/backends/keymapper/keymapper.cpp @@ -54,7 +54,7 @@ Keymap *Keymapper::Domain::getKeymap(const String& name) { } Keymapper::Keymapper(EventManager *evtMgr) - : _eventMan(evtMgr), _enabled(true), _hardwareKeys(0) { + : _eventMan(evtMgr), _enabled(true), _hardwareKeys(0), _globalKeymap(0) { ConfigManager::Domain *confDom = ConfMan.getDomain(ConfigManager::kKeymapperDomain); _globalDomain.setConfigDomain(confDom); @@ -199,6 +199,10 @@ bool Keymapper::mapKey(const KeyState& key, bool keyDown) { break; } + // fallback to the global keymap + if (!action && _globalKeymap) + action = _globalKeymap->getMappedAction(key); + if (action) _keysDown[key] = action; } else { diff --git a/backends/keymapper/keymapper.h b/backends/keymapper/keymapper.h index fcb444aa64..347b9e0ec0 100644 --- a/backends/keymapper/keymapper.h +++ b/backends/keymapper/keymapper.h @@ -171,6 +171,9 @@ public: Domain& getGameDomain() { return _gameDomain; } const Stack<MapRecord>& getActiveStack() const { return _activeMaps; } + void setGlobalKeymap(Keymap *keymap) { _globalKeymap = keymap; } + Keymap* getGlobalKeymap() const { return _globalKeymap; } + private: void initKeymap(Domain &domain, Keymap *keymap); @@ -190,6 +193,7 @@ private: bool _enabled; Stack<MapRecord> _activeMaps; + Keymap *_globalKeymap; HashMap<KeyState, Action*> _keysDown; }; diff --git a/backends/keymapper/remap-dialog.cpp b/backends/keymapper/remap-dialog.cpp index 94b0cbf66b..0882c69080 100644 --- a/backends/keymapper/remap-dialog.cpp +++ b/backends/keymapper/remap-dialog.cpp @@ -345,6 +345,26 @@ void RemapDialog::loadKeymap() { } } + // get the mapping out of the global keymap + if (_keymapper->getGlobalKeymap()) { + List<const HardwareKey*>::iterator keyIt = freeKeys.begin(); + Keymap *globalKeymap = _keymapper->getGlobalKeymap(); + while (keyIt != freeKeys.end()) { + Action *act = globalKeymap->getMappedAction((*keyIt)->key); + + if (act) { + ActionInfo info = {act, true, act->description + " (" + globalKeymap->getName() + ")"}; + _currentActions.push_back(info); + freeKeys.erase(keyIt++); + } else { + ++keyIt; + } + if (freeKeys.empty()) + break; + } + + } + } else if (_kmPopUp->getSelected() != -1) { Keymap *km = _keymapTable[_kmPopUp->getSelectedTag()]; diff --git a/base/main.cpp b/base/main.cpp index 61a05154c1..352b5e9b33 100644 --- a/base/main.cpp +++ b/base/main.cpp @@ -287,8 +287,7 @@ static void setupKeymapper(OSystem &system) { act->addKeyEvent(KeyState(KEYCODE_F8, ASCII_F8, 0)); mapper->addGlobalKeymap(globalMap); - - mapper->pushKeymap("global", true); + mapper->setGlobalKeymap(globalMap); #endif } |