Jacek Caban : mshtml: Added IDOMEvent::get_cancelable implementation.

Alexandre Julliard julliard at winehq.org
Fri Dec 1 14:08:20 CST 2017


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Dec  1 17:02:31 2017 +0100

mshtml: Added IDOMEvent::get_cancelable implementation.

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

---

 dlls/mshtml/htmlevent.c    | 17 ++++++++++-------
 dlls/mshtml/htmlevent.h    |  1 +
 dlls/mshtml/tests/events.c |  5 +++++
 3 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c
index ddce8b3..a4fa956 100644
--- a/dlls/mshtml/htmlevent.c
+++ b/dlls/mshtml/htmlevent.c
@@ -986,8 +986,11 @@ static HRESULT WINAPI DOMEvent_get_bubbles(IDOMEvent *iface, VARIANT_BOOL *p)
 static HRESULT WINAPI DOMEvent_get_cancelable(IDOMEvent *iface, VARIANT_BOOL *p)
 {
     DOMEvent *This = impl_from_IDOMEvent(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    *p = variant_bool(This->cancelable);
+    return S_OK;
 }
 
 static HRESULT WINAPI DOMEvent_get_currentTarget(IDOMEvent *iface, IEventTarget **p)
@@ -1168,6 +1171,7 @@ static DOMEvent *alloc_event(nsIDOMEvent *nsevent, eventid_t event_id)
             return NULL;
         }
         event->bubbles = (event_info[event_id].flags & EVENT_BUBBLES) != 0;
+        event->cancelable = (event_info[event_id].flags & EVENT_CANCELABLE) != 0;
     }
     nsIDOMEvent_AddRef(event->nsevent = nsevent);
     return event;
@@ -1322,7 +1326,6 @@ static void call_event_handlers(EventTarget *event_target, DOMEvent *event)
 {
     const eventid_t eid = event->event_id;
     const listener_container_t *container = get_listener_container(event_target, event->type, FALSE);
-    const BOOL cancelable = event_info[eid].flags & EVENT_CANCELABLE;
     const BOOL use_quirks = use_event_quirks(event_target);
     event_listener_t *listener, listeners_buf[8], *listeners = listeners_buf;
     unsigned listeners_cnt, listeners_size;
@@ -1348,7 +1351,7 @@ static void call_event_handlers(EventTarget *event_target, DOMEvent *event)
             if(hres == S_OK) {
                 TRACE("%s <<< %s\n", debugstr_w(event->type), debugstr_variant(&v));
 
-                if(cancelable) {
+                if(event->cancelable) {
                     if(V_VT(&v) == VT_BOOL) {
                         if(!V_BOOL(&v))
                             IDOMEvent_preventDefault(&event->IDOMEvent_iface);
@@ -1428,7 +1431,7 @@ static void call_event_handlers(EventTarget *event_target, DOMEvent *event)
                 TRACE("%s <<< %s\n", debugstr_w(event->type),
                       debugstr_variant(&v));
 
-                if(cancelable) {
+                if(event->cancelable) {
                     if(V_VT(&v) == VT_BOOL) {
                         if(!V_BOOL(&v))
                             IDOMEvent_preventDefault(&event->IDOMEvent_iface);
@@ -1453,7 +1456,7 @@ static void call_event_handlers(EventTarget *event_target, DOMEvent *event)
             if(hres == S_OK) {
                 TRACE("%s attached <<<\n", debugstr_w(event->type));
 
-                if(cancelable) {
+                if(event->cancelable) {
                     if(V_VT(&v) == VT_BOOL) {
                         if(!V_BOOL(&v))
                             IDOMEvent_preventDefault(&event->IDOMEvent_iface);
@@ -1500,7 +1503,7 @@ static void call_event_handlers(EventTarget *event_target, DOMEvent *event)
                     if(hres == S_OK) {
                         TRACE("cp %s [%u] <<<\n", debugstr_w(event->type), i);
 
-                        if(cancelable) {
+                        if(event->cancelable) {
                             if(V_VT(&v) == VT_BOOL) {
                                 if(!V_BOOL(&v))
                                     IDOMEvent_preventDefault(&event->IDOMEvent_iface);
diff --git a/dlls/mshtml/htmlevent.h b/dlls/mshtml/htmlevent.h
index 4f106d2..38499d3 100644
--- a/dlls/mshtml/htmlevent.h
+++ b/dlls/mshtml/htmlevent.h
@@ -67,6 +67,7 @@ typedef struct {
     WCHAR *type;
     EventTarget *target;
     BOOL bubbles;
+    BOOL cancelable;
     BOOL prevent_default;
     BOOL stop_propagation;
     DOM_EVENT_PHASE phase;
diff --git a/dlls/mshtml/tests/events.c b/dlls/mshtml/tests/events.c
index 864d7d4..a943e41 100644
--- a/dlls/mshtml/tests/events.c
+++ b/dlls/mshtml/tests/events.c
@@ -2704,6 +2704,11 @@ static void test_create_event(IHTMLDocument2 *doc)
     ok(hres == S_OK, "get_bubbles failed: %08x\n", hres);
     ok(!b, "bubbles = %x\n", b);
 
+    b = 0xdead;
+    hres = IDOMEvent_get_cancelable(event, &b);
+    ok(hres == S_OK, "get_cancelable failed: %08x\n", hres);
+    ok(!b, "cancelable = %x\n", b);
+
     IDOMEvent_Release(event);
 
     IDocumentEvent_Release(doc_event);




More information about the wine-cvs mailing list