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 | 11 ++++++----- dlls/mshtml/tests/events.js | 1 - 2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index 809d4d5915c..24eb6ca7832 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -4264,8 +4264,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]; @@ -4328,10 +4327,12 @@ 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) - nsIDOMEvent_StopImmediatePropagation(event->nsevent); + if(event->stop_immediate_propagation) { + nsIDOMEvent_StopImmediatePropagation(event->nsevent); + break; + } + }
for(listener = listeners; listener < listeners + listeners_cnt; listener++) IDispatch_Release(listener->function); diff --git a/dlls/mshtml/tests/events.js b/dlls/mshtml/tests/events.js index 2e8e87b0a72..96d33f0181c 100644 --- a/dlls/mshtml/tests/events.js +++ b/dlls/mshtml/tests/events.js @@ -360,7 +360,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);