From 65f9c4479dd0295bc78835e11a4703f21d386123 Mon Sep 17 00:00:00 2001 From: Halil Durak Date: Tue, 20 Jan 2026 19:11:36 +0300 Subject: [PATCH] `EventManager`: add `hasListener` Not sure if this should be in `EventTarget` or `EventManager`, here goes nothing. --- src/browser/EventManager.zig | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/browser/EventManager.zig b/src/browser/EventManager.zig index 93227ad5..280c52b7 100644 --- a/src/browser/EventManager.zig +++ b/src/browser/EventManager.zig @@ -197,6 +197,21 @@ pub fn dispatchWithFunction(self: *EventManager, target: *EventTarget, event: *E try self.dispatchAll(list, target, event, &was_dispatched); } +/// Returns true if there's at least 1 listener for given `event_type`. +pub fn hasListener(self: *const EventManager, event_target: *const EventTarget, typ: []const u8) bool { + const list = self.lookup.get(@intFromPtr(event_target)) orelse return false; + + var current_node = list.first; + while (current_node) |node| : (current_node = node.next) { + const listener: *const Listener = @alignCast(@fieldParentPtr("node", node)); + if (listener.typ.eqlSlice(typ)) { + return true; + } + } + + return false; +} + fn dispatchNode(self: *EventManager, target: *Node, event: *Event, was_handled: *bool) !void { const ShadowRoot = @import("webapi/ShadowRoot.zig");