Jacek Caban : mshtml: Added support for default removeEventListener capture argument.

Alexandre Julliard julliard at winehq.org
Tue Nov 28 15:11:05 CST 2017


Module: wine
Branch: master
Commit: ed62ae5faa5d60330731100cb49aefc18b694238
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ed62ae5faa5d60330731100cb49aefc18b694238

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Nov 28 17:31:27 2017 +0100

mshtml: Added support for default removeEventListener capture argument.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mshtml/htmlevent.c     | 22 ++++++++++++++++++++++
 dlls/mshtml/tests/events.js |  8 ++++++++
 2 files changed, 30 insertions(+)

diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c
index d93a43e..0b9a36b 100644
--- a/dlls/mshtml/htmlevent.c
+++ b/dlls/mshtml/htmlevent.c
@@ -2188,6 +2188,27 @@ HRESULT IEventTarget_addEventListener_hook(DispatchEx *dispex, LCID lcid, WORD f
     return S_FALSE; /* fallback to default */
 }
 
+HRESULT IEventTarget_removeEventListener_hook(DispatchEx *dispex, LCID lcid, WORD flags,
+        DISPPARAMS *dp, VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller)
+{
+    /* If only two arguments were given, implicitly set capture to false */
+    if((flags & DISPATCH_METHOD) && dp->cArgs == 2 && !dp->cNamedArgs) {
+        VARIANT args[3];
+        DISPPARAMS new_dp = {args, NULL, 3, 0};
+        V_VT(args) = VT_BOOL;
+        V_BOOL(args) = VARIANT_FALSE;
+        args[1] = dp->rgvarg[0];
+        args[2] = dp->rgvarg[1];
+
+        TRACE("implicit capture\n");
+
+        return IDispatchEx_InvokeEx(&dispex->IDispatchEx_iface, DISPID_IEVENTTARGET_REMOVEEVENTLISTENER,
+                                    lcid, flags, &new_dp, res, ei, caller);
+    }
+
+    return S_FALSE; /* fallback to default */
+}
+
 static const IEventTargetVtbl EventTargetVtbl = {
     EventTarget_QueryInterface,
     EventTarget_AddRef,
@@ -2238,6 +2259,7 @@ void EventTarget_init_dispex_info(dispex_data_t *dispex_info, compat_mode_t comp
 {
     static const dispex_hook_t IEventTarget_hooks[] = {
         {DISPID_IEVENTTARGET_ADDEVENTLISTENER, IEventTarget_addEventListener_hook},
+        {DISPID_IEVENTTARGET_REMOVEEVENTLISTENER, IEventTarget_removeEventListener_hook},
         {DISPID_UNKNOWN}
     };
 
diff --git a/dlls/mshtml/tests/events.js b/dlls/mshtml/tests/events.js
index d613c9d..9ec3db7 100644
--- a/dlls/mshtml/tests/events.js
+++ b/dlls/mshtml/tests/events.js
@@ -183,6 +183,14 @@ function test_add_remove_listener() {
 
     div.removeEventListener("click", listener, false);
 
+    /* test implicit capture removeEventListener argument */
+    div.addEventListener("click", listener, false);
+    div.removeEventListener("click", listener);
+
+    calls = "";
+    div.click();
+    ok(calls === "", "calls = " + calls);
+
     next_test();
 }
 




More information about the wine-cvs mailing list