From: Gabriel Ivăncescu gabrielopcode@gmail.com
This implements same buggy style as native, where cancelBubble = false does not affect the immediate propagation flag, while it does affect normal propagation flag.
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlevent.c | 6 ++++-- dlls/mshtml/tests/events.js | 1 - 2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index be2a6b52ae1..6eed0916117 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -4265,8 +4265,7 @@ static void call_event_handlers(EventTarget *event_target, DOMEvent *event, disp } }
- for(listener = listeners; !event->stop_immediate_propagation - && listener < listeners + listeners_cnt; listener++) { + for(listener = listeners; listener < listeners + listeners_cnt; listener++) { if(listener->type != LISTENER_TYPE_ATTACHED) { DISPID named_arg = DISPID_THIS; VARIANTARG args[2]; @@ -4329,6 +4328,9 @@ static void call_event_handlers(EventTarget *event_target, DOMEvent *event, disp WARN("%p %s attached <<< %08lx\n", event_target, debugstr_w(event->type), hres); } } + + if(event->stop_immediate_propagation) + break; }
for(listener = listeners; listener < listeners + listeners_cnt; listener++) diff --git a/dlls/mshtml/tests/events.js b/dlls/mshtml/tests/events.js index 85afa6b9978..cb3ecb011ee 100644 --- a/dlls/mshtml/tests/events.js +++ b/dlls/mshtml/tests/events.js @@ -362,7 +362,6 @@ sync_test("stop_propagation", function() { div2.removeEventListener("click", stop_immediate_propagation, true); calls = ""; div2.click(); - todo_wine. ok(calls === "cancelBubble(false),div1.click(capture),cancelBubble[1],stop,div2.click(capture),immediateStop and cancelBubble(false),cancelBubble[2],", // weird native behavior "calls = " + calls);