summaryrefslogtreecommitdiff
path: root/app/src/event_manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/event_manager.c')
-rw-r--r--app/src/event_manager.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/app/src/event_manager.c b/app/src/event_manager.c
index 2f423fc..47ad6b7 100644
--- a/app/src/event_manager.c
+++ b/app/src/event_manager.c
@@ -71,13 +71,23 @@ int zmk_event_manager_raise_after(struct zmk_event_header *event, const struct z
return -EINVAL;
}
-int zmk_event_manager_release(struct zmk_event_header *event)
+int zmk_event_manager_raise_at(struct zmk_event_header *event, const struct zmk_listener *listener)
{
- return zmk_event_manager_handle_from(event, event->last_listener_index + 1);
-}
+ u8_t len = __event_subscriptions_end - __event_subscriptions_start;
+ for (int i = 0; i < len; i++) {
+ struct zmk_event_subscription *ev_sub = __event_subscriptions_start + i;
+
+ if (ev_sub->event_type == event->event && ev_sub->listener == listener) {
+ return zmk_event_manager_handle_from(event, i);
+ }
+ }
+ LOG_WRN("Unable to find where to raise this event");
+
+ return -EINVAL;
+}
-int zmk_event_manager_release_again(struct zmk_event_header *event)
+int zmk_event_manager_release(struct zmk_event_header *event)
{
- return zmk_event_manager_handle_from(event, event->last_listener_index);
-} \ No newline at end of file
+ return zmk_event_manager_handle_from(event, event->last_listener_index + 1);
+}