aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/keymapper/action.h1
-rw-r--r--backends/keymapper/keymap-manager.cpp11
-rw-r--r--backends/keymapper/keymap.h1
-rw-r--r--backends/keymapper/remap-dialog.cpp12
-rw-r--r--backends/keymapper/remap-dialog.h2
-rw-r--r--backends/vkeybd/vkeybd.zipbin335613 -> 170515 bytes
6 files changed, 16 insertions, 11 deletions
diff --git a/backends/keymapper/action.h b/backends/keymapper/action.h
index d9ecb873b3..7f75446b87 100644
--- a/backends/keymapper/action.h
+++ b/backends/keymapper/action.h
@@ -96,6 +96,7 @@ public:
void addEvent(const Event &evt) { events.push_back(evt); }
void setParent(Keymap *parent);
+ Keymap *getParent() { return _parent; }
void mapKey(const HardwareKey *key);
const HardwareKey *getMappedKey() const;
diff --git a/backends/keymapper/keymap-manager.cpp b/backends/keymapper/keymap-manager.cpp
index f80b8770fe..a9ab1c7069 100644
--- a/backends/keymapper/keymap-manager.cpp
+++ b/backends/keymapper/keymap-manager.cpp
@@ -37,10 +37,8 @@ void KeymapManager::Domain::addKeymap(Keymap *map) {
void KeymapManager::Domain::deleteAllKeyMaps() {
KeymapMap::iterator it;
- for (it = _keymaps.begin(); it != _keymaps.end(); it++) {
- //it->_value->saveMappings(_configDomain, it->_key);
+ for (it = _keymaps.begin(); it != _keymaps.end(); it++)
delete it->_value;
- }
_keymaps.clear();
}
@@ -88,8 +86,11 @@ void KeymapManager::registerGameKeymap(Keymap *map) {
void KeymapManager::initKeymap(ConfigManager::Domain *domain,
Keymap *map) {
map->loadMappings(domain, _hardwareKeys);
- if (map->isComplete(_hardwareKeys) == false)
+ if (map->isComplete(_hardwareKeys) == false) {
automaticMap(map);
+ map->saveMappings(domain);
+ ConfMan.flushToDisk();
+ }
}
// TODO:
@@ -202,7 +203,7 @@ void KeymapManager::automaticMap(Keymap *map) {
act->mapKey(*selectedKey);
keys.erase(selectedKey);
} else {// no match = no keys left
- return;
+ break;
}
}
}
diff --git a/backends/keymapper/keymap.h b/backends/keymapper/keymap.h
index 6b40bbab4f..5694bfaa18 100644
--- a/backends/keymapper/keymap.h
+++ b/backends/keymapper/keymap.h
@@ -91,6 +91,7 @@ public:
/**
* Save this keymap's mappings to the given config domain
* @param domain config domain to save keymap to
+ * @note Changes are *not* flushed to disk, to do so call ConfMan.flushToDisk()
*/
void saveMappings(ConfigManager::Domain *domain);
diff --git a/backends/keymapper/remap-dialog.cpp b/backends/keymapper/remap-dialog.cpp
index ef9846f34e..24da9d1b35 100644
--- a/backends/keymapper/remap-dialog.cpp
+++ b/backends/keymapper/remap-dialog.cpp
@@ -37,9 +37,6 @@ enum {
RemapDialog::RemapDialog()
: Dialog("remap"), _keymapTable(0), _activeRemapAction(0), _topAction(0), _remapTimeout(0) {
- const int screenW = g_system->getOverlayWidth();
- const int screenH = g_system->getOverlayHeight();
-
_keymapper = g_system->getEventManager()->getKeymapper();
assert(_keymapper);
@@ -95,10 +92,11 @@ void RemapDialog::open() {
}
}
- Dialog::open();
-
+ _changes = false;
_kmPopUp->setSelected(0);
loadKeymap();
+
+ Dialog::open();
}
void RemapDialog::close() {
@@ -107,6 +105,7 @@ void RemapDialog::close() {
free(_keymapTable);
_keymapTable = 0;
}
+ if (_changes) ConfMan.flushToDisk();
Dialog::close();
}
@@ -203,6 +202,8 @@ void RemapDialog::handleKeyUp(Common::KeyState state) {
const HardwareKey *hwkey = _keymapper->getHardwareKey(state);
if (hwkey) {
_activeRemapAction->mapKey(hwkey);
+ // TODO: _activeRemapAction->getParent()->saveMappings();
+ _changes = true;
stopRemapping();
}
} else {
@@ -285,7 +286,6 @@ void RemapDialog::refreshKeymap() {
//_container->draw();
_scrollBar->draw();
- uint widgetI = 0;
uint actionI = _topAction;
for (uint widgetI = 0; widgetI < _keymapWidgets.size(); widgetI++) {
ActionWidgets& widg = _keymapWidgets[widgetI];
diff --git a/backends/keymapper/remap-dialog.h b/backends/keymapper/remap-dialog.h
index 0bcfee0d29..f9396e3b45 100644
--- a/backends/keymapper/remap-dialog.h
+++ b/backends/keymapper/remap-dialog.h
@@ -83,6 +83,8 @@ protected:
uint32 _remapTimeout;
static const uint32 kRemapTimeoutDelay = 3000;
+ bool _changes;
+
};
} // end of namespace Common
diff --git a/backends/vkeybd/vkeybd.zip b/backends/vkeybd/vkeybd.zip
index e62498cc3d..5efbf4f660 100644
--- a/backends/vkeybd/vkeybd.zip
+++ b/backends/vkeybd/vkeybd.zip
Binary files differ