about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2025-05-05 22:22:15 +0200
committerbptato <nincsnevem662@gmail.com>2025-05-05 22:22:54 +0200
commit20bc349cc5dc7c87ebb2db14147bba262bf48b4a (patch)
tree77bdf3da982d7056e5ec8ad7f7508be6b387a21a
parent0a8d03f46f4be3dfc6c8febfcd47dea94c972ffd (diff)
downloadchawan-20bc349cc5dc7c87ebb2db14147bba262bf48b4a.tar.gz
event: fix another stopPropagation bug
-rw-r--r--src/html/event.nim17
-rw-r--r--test/js/event.html1
2 files changed, 10 insertions, 8 deletions
diff --git a/src/html/event.nim b/src/html/event.nim
index 3c415c67..c6db6e9f 100644
--- a/src/html/event.nim
+++ b/src/html/event.nim
@@ -556,14 +556,15 @@ proc dispatch*(ctx: JSContext; target: EventTarget; event: Event): bool =
   if not stop:
     event.eventPhase = 2
     ctx.dispatchEvent0(event, target, stop, canceled, capture = true)
-    ctx.dispatchEvent0(event, target, stop, canceled, capture = false)
-    if event.bubbles:
-      event.eventPhase = 3
-      for i in 1 ..< targets.len:
-        if stop:
-          break
-        let target = targets[i]
-        ctx.dispatchEvent0(event, target, stop, canceled, capture = false)
+    if not stop:
+      ctx.dispatchEvent0(event, target, stop, canceled, capture = false)
+      if event.bubbles:
+        event.eventPhase = 3
+        for i in 1 ..< targets.len:
+          if stop:
+            break
+          let target = targets[i]
+          ctx.dispatchEvent0(event, target, stop, canceled, capture = false)
   event.eventPhase = 0
   event.flags.excl(efDispatch)
   return canceled
diff --git a/test/js/event.html b/test/js/event.html
index 7649e33a..90f72b10 100644
--- a/test/js/event.html
+++ b/test/js/event.html
@@ -8,6 +8,7 @@ window.onload = function() {
 	const x = document.getElementById("x")
 	const y = document.getElementById("y")
 	let n = 0;
+	x.addEventListener("test", e => { n++, e.stopPropagation() }, true);
 	x.addEventListener("test", e => n++);
 	x.dispatchEvent(new Event("test", {bubbles: true}));
 	assertEquals(n, 1);