aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/keymapper/keymapper.cpp6
-rw-r--r--backends/keymapper/keymapper.h4
-rw-r--r--backends/keymapper/remap-dialog.cpp20
-rw-r--r--base/main.cpp3
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
}