diff options
Diffstat (limited to 'backends/keymapper/keymap.cpp')
-rw-r--r-- | backends/keymapper/keymap.cpp | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/backends/keymapper/keymap.cpp b/backends/keymapper/keymap.cpp index 95b64f88e7..f082640f2c 100644 --- a/backends/keymapper/keymap.cpp +++ b/backends/keymapper/keymap.cpp @@ -60,7 +60,7 @@ void Keymap::addAction(Action *action) { } void Keymap::registerMapping(Action *action, const HardwareKey *hwKey) { - HashMap<KeyState, Action*>::iterator it; + HashMap<ActionKey, Action*>::iterator it; it = _keymap.find(hwKey->key); @@ -105,8 +105,8 @@ const Action *Keymap::findAction(const char *id) const { return 0; } -Action *Keymap::getMappedAction(const KeyState& ks) const { - HashMap<KeyState, Action*>::iterator it; +Action *Keymap::getMappedAction(const ActionKey& ks) const { + HashMap<ActionKey, Action*>::iterator it; it = _keymap.find(ks); @@ -127,6 +127,10 @@ void Keymap::loadMappings(const HardwareKeySet *hwKeys) { ConfigManager::Domain::iterator it; String prefix = KEYMAP_KEY_PREFIX + _name + "_"; + uint32 modId = 0; + char hwId[HWKEY_ID_SIZE+1]; + memset(hwId,0,HWKEY_ID_SIZE+1); + for (it = _configDomain->begin(); it != _configDomain->end(); it++) { const String& key = it->_key; @@ -145,15 +149,15 @@ void Keymap::loadMappings(const HardwareKeySet *hwKeys) { continue; } - const HardwareKey *hwKey = hwKeys->findHardwareKey(it->_value.c_str()); + sscanf(it->_value.c_str(),"%d,%s",&modId,hwId); + const HardwareKey *hwKey = hwKeys->findHardwareKey(hwId); if (!hwKey) { warning("HardwareKey with ID %s not known", it->_value.c_str()); _configDomain->erase(key); continue; } - - ua->mapKey(hwKey); + ua->mapKey(hwKey,modId); } } @@ -171,13 +175,19 @@ void Keymap::saveMappings() { String actId((*it)->id, (*it)->id + actIdLen); char hwId[HWKEY_ID_SIZE+1]; - memset(hwId, 0, HWKEY_ID_SIZE+1); + char modId[4]; + memset(modId, 0, 4); + if ((*it)->getMappedKey()) { memcpy(hwId, (*it)->getMappedKey()->hwKeyId, HWKEY_ID_SIZE); + sprintf(modId,"%d",(*it)->getMappedKey()->key.flags); } - _configDomain->setVal(prefix + actId, hwId); + String val = modId; + val += ','; + val += hwId; + _configDomain->setVal(prefix + actId, val); } } @@ -230,7 +240,7 @@ void Keymap::automaticMapping(HardwareKeySet *hwKeys) { // First mapping pass: // - Match if a key's preferred action type is the same as the action's - // type, or vice versa. + // type, or vice versa. // - Priority is given to: // - keys that match action types over key types. // - keys that have not been used by parent maps. @@ -323,7 +333,7 @@ void Keymap::automaticMapping(HardwareKeySet *hwKeys) { } } -Action *Keymap::getParentMappedAction(KeyState key) { +Action *Keymap::getParentMappedAction(const ActionKey &key) { if (_parent) { Action *act = _parent->getMappedAction(key); |