aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/keymapper/keymapper.cpp18
-rw-r--r--backends/keymapper/keymapper.h6
-rw-r--r--common/EventDispatcher.cpp25
3 files changed, 35 insertions, 14 deletions
diff --git a/backends/keymapper/keymapper.cpp b/backends/keymapper/keymapper.cpp
index 1c83bb877e..cda34ff052 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 27e981923b..626df013ac 100644
--- a/backends/keymapper/keymapper.h
+++ b/backends/keymapper/keymapper.h
@@ -164,6 +164,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
*/
void setEnabled(bool enabled) { _enabled = enabled; }
diff --git a/common/EventDispatcher.cpp b/common/EventDispatcher.cpp
index 4e3f671cfd..55eea9c7b2 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);
-
- // Try getting another event from the current EventSource.
- continue;
- }
+ 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;
+ } else {
+ dispatchEvent(event);
}
-
- dispatchEvent(event);
}
}
}