diff options
-rw-r--r-- | backends/events/default/default-events.cpp | 30 | ||||
-rw-r--r-- | backends/events/default/default-events.h | 4 | ||||
-rw-r--r-- | backends/keymapper/keymapper.cpp | 34 | ||||
-rw-r--r-- | backends/keymapper/keymapper.h | 3 |
4 files changed, 38 insertions, 33 deletions
diff --git a/backends/events/default/default-events.cpp b/backends/events/default/default-events.cpp index d6b9978d94..9a0b5de298 100644 --- a/backends/events/default/default-events.cpp +++ b/backends/events/default/default-events.cpp @@ -110,7 +110,6 @@ DefaultEventManager::DefaultEventManager(OSystem *boss) : _eventCount = 0; _lastEventCount = 0; _lastMillis = 0; - _artificialEventCounter = 0; Common::String recordModeString = ConfMan.get("record_mode"); if (recordModeString.compareToIgnoreCase("record") == 0) { @@ -364,19 +363,20 @@ void DefaultEventManager::processMillis(uint32 &millis) { _lastMillis = millis; _boss->unlockMutex(_timeMutex); } - +#include "backends/vkeybd/keycode-descriptions.h" bool DefaultEventManager::pollEvent(Common::Event &event) { uint32 time = _boss->getMillis(); bool result = false; // poll for pushed events if (!_artificialEventQueue.empty()) { - // delay the feeding of artificial events - if (++_artificialEventCounter % kArtificialEventDelay == 0) { - event = _artificialEventQueue.pop(); - result = true; - _artificialEventCounter = 0; - } + event = _artificialEventQueue.pop(); + result = true; + + if (event.type == Common::EVENT_KEYDOWN) + printf("ART. KEY DOWN: %d (%s)\n", event.kbd.keycode, keycodeDescTable[event.kbd.keycode]); + else if (event.type == Common::EVENT_KEYUP) + printf("ART. KEY UP: %d (%s)\n", event.kbd.keycode, keycodeDescTable[event.kbd.keycode]); } // poll for event from backend @@ -385,11 +385,21 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { if (result) { // send key press events to keymapper if (event.type == Common::EVENT_KEYDOWN) { - if (_keymapper->mapKeyDown(event.kbd)) + printf("KEY DOWN: %d (%s)", event.kbd.keycode, keycodeDescTable[event.kbd.keycode]); + if (_keymapper->mapKeyDown(event.kbd)) { result = false; + printf(" - MAPPED!\n"); + } else { + printf("\n"); + } } else if (event.type == Common::EVENT_KEYUP) { - if (_keymapper->mapKeyUp(event.kbd)) + printf("KEY UP: %d (%s)", event.kbd.keycode, keycodeDescTable[event.kbd.keycode]); + if (_keymapper->mapKeyUp(event.kbd)) { result = false; + printf(" - MAPPED!\n"); + } else { + printf("\n"); + } } } } diff --git a/backends/events/default/default-events.h b/backends/events/default/default-events.h index ba30cb2383..0087265e2a 100644 --- a/backends/events/default/default-events.h +++ b/backends/events/default/default-events.h @@ -55,10 +55,6 @@ class DefaultEventManager : public Common::EventManager { bool _remap; Common::Queue<Common::Event> _artificialEventQueue; - int _artificialEventCounter; - enum { - kArtificialEventDelay = 5 - }; Common::Point _mousePos; int _buttonState; diff --git a/backends/keymapper/keymapper.cpp b/backends/keymapper/keymapper.cpp index 9f4b42658b..5c79d445cb 100644 --- a/backends/keymapper/keymapper.cpp +++ b/backends/keymapper/keymapper.cpp @@ -127,12 +127,6 @@ bool Keymapper::pushKeymap(const String& name, bool inherit) { } void Keymapper::pushKeymap(Keymap *newMap, bool inherit, bool global) { - List<KeyState>::iterator it; - for (it = _keysDown.begin(); it != _keysDown.end(); ++it) { - Action *action = getAction(*it); - if (action) executeAction(action, false); - } - _keysDown.clear(); MapRecord mr = {newMap, inherit, global}; _activeMaps.push(mr); } @@ -154,25 +148,29 @@ bool Keymapper::mapKey(const KeyState& key, bool keyDown) { if (!_enabled) return false; if (_activeMaps.empty()) return false; - Action *action = getAction(key); + Action *action = 0; + if (keyDown) { + // Search for key in active keymap stack + for (int i = _activeMaps.size() - 1; i >= 0; --i) { + MapRecord mr = _activeMaps[i]; + action = mr.keymap->getMappedAction(key); + if (action || mr.inherit == false) break; + } + if (action) _keysDown[key] = action; + } else { + HashMap<KeyState, Action*>::iterator it = _keysDown.find(key); + if (it != _keysDown.end()) { + action = it->_value; + _keysDown.erase(key); + } + } if (!action) return false; - - if (keyDown) - _keysDown.push_back(key); - else - _keysDown.remove(key); - executeAction(action, keyDown); return true; } Action *Keymapper::getAction(const KeyState& key) { Action *action = 0; - for (int i = _activeMaps.size() - 1; i >= 0; --i) { - MapRecord mr = _activeMaps[i]; - action = mr.keymap->getMappedAction(key); - if (action || mr.inherit == false) break; - } return action; } diff --git a/backends/keymapper/keymapper.h b/backends/keymapper/keymapper.h index d6ba89288d..a13cebe39a 100644 --- a/backends/keymapper/keymapper.h +++ b/backends/keymapper/keymapper.h @@ -28,6 +28,7 @@ #include "common/events.h" #include "common/list.h" +#include "common/hashmap.h" #include "common/stack.h" #include "backends/keymapper/hardware-key.h" #include "backends/keymapper/keymap.h" @@ -194,7 +195,7 @@ private: bool _enabled; Stack<MapRecord> _activeMaps; - List<KeyState> _keysDown; + HashMap<KeyState, Action*> _keysDown; }; |