From e7ade8ae05aff3669059e6003e046d1ef6e914a3 Mon Sep 17 00:00:00 2001 From: Tarek Soliman Date: Fri, 17 Feb 2012 12:17:51 -0600 Subject: [PATCH] KEYMAPPER: EventMapper must now eat all events --- backends/keymapper/keymapper.cpp | 18 +++++++++++++++--- backends/keymapper/keymapper.h | 6 ++++++ common/EventDispatcher.cpp | 23 +++++++++++++---------- 3 files changed, 34 insertions(+), 13 deletions(-) diff --git a/backends/keymapper/keymapper.cpp b/backends/keymapper/keymapper.cpp index 1c83bb877ef..cda34ff052c 100644 --- a/backends/keymapper/keymapper.cpp +++ b/backends/keymapper/keymapper.cpp @@ -181,12 +181,24 @@ void Keymapper::popKeymap(const char *name) { } bool Keymapper::notifyEvent(const Common::Event &ev) { + bool mapped = false; + if (ev.type == Common::EVENT_KEYDOWN) - return mapKeyDown(ev.kbd); + mapped = mapKeyDown(ev.kbd); else if (ev.type == Common::EVENT_KEYUP) - return mapKeyUp(ev.kbd); + mapped = mapKeyUp(ev.kbd); + + if (mapped) + return true; else - return false; + return mapEvent(ev); +} + +bool Keymapper::mapEvent(const Common::Event &ev) { + // pass through - copy the event + Event evt = ev; + addEvent(evt); + return true; } bool Keymapper::mapKeyDown(const KeyState& key) { diff --git a/backends/keymapper/keymapper.h b/backends/keymapper/keymapper.h index 27e981923be..626df013ac5 100644 --- a/backends/keymapper/keymapper.h +++ b/backends/keymapper/keymapper.h @@ -163,6 +163,12 @@ public: */ bool mapKeyUp(const KeyState& key); + /** + * Map non-key incoming events + * @param ev incoming event + */ + bool mapEvent(const Common::Event &ev); + /** * Enable/disable the keymapper */ diff --git a/common/EventDispatcher.cpp b/common/EventDispatcher.cpp index 4e3f671cfd7..55eea9c7b29 100644 --- a/common/EventDispatcher.cpp +++ b/common/EventDispatcher.cpp @@ -21,6 +21,7 @@ */ #include "common/events.h" +#include "common/textconsole.h" namespace Common { @@ -54,18 +55,20 @@ void EventDispatcher::dispatch() { // We only try to process the events via the setup event mapper, when // we have a setup mapper and when the event source allows mapping. if (_mapper && allowMapping) { - if (_mapper->notifyEvent(event)) { - // We allow the event mapper to create multiple events, when - // eating an event. - while (_mapper->pollEvent(event)) - dispatchEvent(event); + bool mapped = _mapper->notifyEvent(event); + // EventMappers must map all events + if (!mapped) + error("Event [%u] was not mapped by the EventMapper!", event.type); + // We allow the event mapper to create multiple events, when + // eating an event. + while (_mapper->pollEvent(event)) + dispatchEvent(event); - // Try getting another event from the current EventSource. - continue; - } + // Try getting another event from the current EventSource. + continue; + } else { + dispatchEvent(event); } - - dispatchEvent(event); } } }