From 1ba542fb3ba8648776f1fe1dbc88518f759b1b7e Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Tue, 16 Sep 2025 10:26:51 +0800 Subject: [PATCH] use redispatch, check for stopped --- src/browser/dom/event_target.zig | 13 +++---------- src/browser/netsurf.zig | 7 +++++++ vendor/netsurf/libdom | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/browser/dom/event_target.zig b/src/browser/dom/event_target.zig index c214cf48..acaf5c3f 100644 --- a/src/browser/dom/event_target.zig +++ b/src/browser/dom/event_target.zig @@ -151,19 +151,12 @@ pub const EventTarget = struct { pub fn _dispatchEvent(self: *parser.EventTarget, event: *parser.Event, page: *Page) !bool { const res = try parser.eventTargetDispatchEvent(self, event); - // TODO: If we get this working, we should also create a getter to check - // stopPropagation and not bubble to window if true. - if (!parser.eventBubbles(event)) { + if (!parser.eventBubbles(event) or parser.eventIsStopped(event)) { return res; } - // I think this mutates `event`, which means any JavaScript that captured - // it will be mutated incorrectly. - const Window = @import("../html/window.zig").Window; - return parser.eventTargetDispatchEvent( - parser.toEventTarget(Window, &page.window), - event, - ); + try page.window.dispatchForDocumentTarget(event); + return true; } }; diff --git a/src/browser/netsurf.zig b/src/browser/netsurf.zig index d33f0790..aa20be60 100644 --- a/src/browser/netsurf.zig +++ b/src/browser/netsurf.zig @@ -517,6 +517,13 @@ pub fn eventStopPropagation(evt: *Event) void { std.debug.assert(err == c.DOM_NO_ERR); } +pub fn eventIsStopped(evt: *Event) bool { + var res: bool = undefined; + const err = c._dom_event_is_stopped(evt, &res); + std.debug.assert(err == c.DOM_NO_ERR); + return res; +} + pub fn eventStopImmediatePropagation(evt: *Event) void { const err = c._dom_event_stop_immediate_propagation(evt); std.debug.assert(err == c.DOM_NO_ERR); diff --git a/vendor/netsurf/libdom b/vendor/netsurf/libdom index 0a6ba2c7..b7db06f5 160000 --- a/vendor/netsurf/libdom +++ b/vendor/netsurf/libdom @@ -1 +1 @@ -Subproject commit 0a6ba2c73d6d673dfeadf7070167c0ce9d945721 +Subproject commit b7db06f58364aa01f8e3df920c28f16e62f6f8d1