aboutsummaryrefslogtreecommitdiff
path: root/src/EventQueue.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/EventQueue.cpp')
-rw-r--r--src/EventQueue.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/EventQueue.cpp b/src/EventQueue.cpp
new file mode 100644
index 0000000..eebda76
--- /dev/null
+++ b/src/EventQueue.cpp
@@ -0,0 +1,31 @@
+#include "EventQueue.hpp"
+#include "LuaRuntime.hpp"
+
+void EventQueue::dispatch_event(BrowserEvent *event) {
+ auto &runtime = LuaRuntime::instance();
+
+ runtime.queue_task([this, event]() {
+ std::unordered_map<QString, std::vector<EventHandlerRequest>> event_map;
+ {
+ const std::lock_guard<std::mutex> lock(events_mutex);
+ event_map = events;
+ }
+
+ if (!event_map.contains(event->kind))
+ return;
+
+ for (auto &event_handler : event_map.at(event->kind)) {
+ // TODO: Pattern filter
+ event_handler.handler(event);
+ }
+ });
+}
+
+void EventQueue::register_event(const EventHandlerRequest &event) {
+ const std::lock_guard<std::mutex> lock(events_mutex);
+ for (const auto &event_name : event.event_names) {
+ if (!events.contains(event_name))
+ events.insert({event_name, {}});
+ events.at(event_name).emplace_back(event);
+ }
+}