Jacek Caban : mshtml: Expose IDOMMouseEvent to scripts.

Alexandre Julliard julliard at winehq.org
Mon Feb 5 16:48:27 CST 2018


Module: wine
Branch: master
Commit: 5711c85a20831ab662407038a47ac7fdffff8231
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=5711c85a20831ab662407038a47ac7fdffff8231

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Feb  5 17:30:43 2018 +0100

mshtml: Expose IDOMMouseEvent to scripts.

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

---

 dlls/mshtml/htmlevent.c      | 16 +++++++++++-
 dlls/mshtml/mshtml_private.h |  2 ++
 dlls/mshtml/tests/events.js  | 62 +++++++++++++++++++++++++++++++++++++++++++-
 3 files changed, 78 insertions(+), 2 deletions(-)

diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c
index c037709..8462bed 100644
--- a/dlls/mshtml/htmlevent.c
+++ b/dlls/mshtml/htmlevent.c
@@ -1586,6 +1586,18 @@ static dispex_static_data_t DOMEvent_dispex = {
     DOMEvent_iface_tids
 };
 
+static const tid_t DOMMouseEvent_iface_tids[] = {
+    IDOMEvent_tid,
+    IDOMMouseEvent_tid,
+    0
+};
+
+static dispex_static_data_t DOMMouseEvent_dispex = {
+    NULL,
+    DispDOMMouseEvent_tid,
+    DOMMouseEvent_iface_tids
+};
+
 static DOMEvent *alloc_event(nsIDOMEvent *nsevent, eventid_t event_id)
 {
     dispex_static_data_t *dispex_data = &DOMEvent_dispex;
@@ -1620,7 +1632,9 @@ static DOMEvent *alloc_event(nsIDOMEvent *nsevent, eventid_t event_id)
         - time_epoch;
 
     nsres = nsIDOMEvent_QueryInterface(nsevent, &IID_nsIDOMMouseEvent, (void**)&event->mouse_event);
-    if(NS_FAILED(nsres))
+    if(NS_SUCCEEDED(nsres))
+        dispex_data = &DOMMouseEvent_dispex;
+    else
         event->mouse_event = NULL;
 
     init_dispex(&event->dispex, (IUnknown*)&event->IDOMEvent_iface, dispex_data);
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 162367a..83c30e6 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -81,6 +81,7 @@ typedef struct EventTarget EventTarget;
     XDIID(DispCPlugins) \
     XDIID(DispDOMChildrenCollection) \
     XDIID(DispDOMEvent) \
+    XDIID(DispDOMMouseEvent) \
     XDIID(DispHTMLAnchorElement) \
     XDIID(DispHTMLAreaElement) \
     XDIID(DispHTMLAttributeCollection) \
@@ -128,6 +129,7 @@ typedef struct EventTarget EventTarget;
     XDIID(HTMLDocumentEvents) \
     XDIID(HTMLElementEvents2) \
     XIID(IDOMEvent) \
+    XIID(IDOMMouseEvent) \
     XIID(IDocumentEvent) \
     XIID(IDocumentSelector) \
     XIID(IElementSelector) \
diff --git a/dlls/mshtml/tests/events.js b/dlls/mshtml/tests/events.js
index 30d23c7..fd7a268 100644
--- a/dlls/mshtml/tests/events.js
+++ b/dlls/mshtml/tests/events.js
@@ -592,6 +592,65 @@ function test_time_stamp() {
     next_test();
 }
 
+function test_mouse_event() {
+    var e;
+
+    e = document.createEvent("MouseEvent");
+    ok(e.screenX === 0, "screenX = " + e.screenX);
+    ok(e.screenY === 0, "screenY = " + e.screenY);
+    ok(e.clientX === 0, "clientX = " + e.clientX);
+    ok(e.clientY === 0, "clientY = " + e.clientY);
+    ok(e.ctrlKey === false, "ctrlKey = " + e.ctrlKey);
+    ok(e.altKey === false, "altKey = " + e.altKey);
+    ok(e.shiftKey === false, "shiftKey = " + e.shiftKey);
+    ok(e.metaKey === false, "metaKey = " + e.metaKey);
+    ok(e.button === 0, "button = " + e.button);
+
+    e.initMouseEvent("test", true, true, window, 1, 2, 3, 4, 5, false, false, false, false, 1, document);
+    ok(e.type === "test", "type = " + e.type);
+    ok(e.cancelable === true, "cancelable = " + e.cancelable);
+    ok(e.bubbles === true, "bubbles = " + e.bubbles);
+    ok(e.screenX === 2, "screenX = " + e.screenX);
+    ok(e.screenY === 3, "screenY = " + e.screenY);
+    ok(e.clientX === 4, "clientX = " + e.clientX);
+    ok(e.clientY === 5, "clientY = " + e.clientY);
+    ok(e.ctrlKey === false, "ctrlKey = " + e.ctrlKey);
+    ok(e.altKey === false, "altKey = " + e.altKey);
+    ok(e.shiftKey === false, "shiftKey = " + e.shiftKey);
+    ok(e.metaKey === false, "metaKey = " + e.metaKey);
+    ok(e.button === 1, "button = " + e.button);
+
+    e.initMouseEvent("test", false, false, window, 9, 8, 7, 6, 5, true, true, true, true, 127, document);
+    ok(e.type === "test", "type = " + e.type);
+    ok(e.cancelable === false, "cancelable = " + e.cancelable);
+    ok(e.bubbles === false, "bubbles = " + e.bubbles);
+    ok(e.screenX === 8, "screenX = " + e.screenX);
+    ok(e.screenY === 7, "screenY = " + e.screenY);
+    ok(e.clientX === 6, "clientX = " + e.clientX);
+    ok(e.clientY === 5, "clientY = " + e.clientY);
+    ok(e.ctrlKey === true, "ctrlKey = " + e.ctrlKey);
+    ok(e.altKey === true, "altKey = " + e.altKey);
+    ok(e.shiftKey === true, "shiftKey = " + e.shiftKey);
+    ok(e.metaKey === true, "metaKey = " + e.metaKey);
+    ok(e.button === 127, "button = " + e.button);
+
+    e.initEvent("testevent", true, true);
+    ok(e.type === "testevent", "type = " + e.type);
+    ok(e.cancelable === true, "cancelable = " + e.cancelable);
+    ok(e.bubbles === true, "bubbles = " + e.bubbles);
+    ok(e.screenX === 8, "screenX = " + e.screenX);
+    ok(e.screenY === 7, "screenY = " + e.screenY);
+    ok(e.clientX === 6, "clientX = " + e.clientX);
+    ok(e.clientY === 5, "clientY = " + e.clientY);
+    ok(e.ctrlKey === true, "ctrlKey = " + e.ctrlKey);
+    ok(e.altKey === true, "altKey = " + e.altKey);
+    ok(e.shiftKey === true, "shiftKey = " + e.shiftKey);
+    ok(e.metaKey === true, "metaKey = " + e.metaKey);
+    ok(e.button === 127, "button = " + e.button);
+
+    next_test();
+}
+
 var tests = [
     test_content_loaded,
     test_add_remove_listener,
@@ -605,5 +664,6 @@ var tests = [
     test_dispatch_event,
     test_recursive_dispatch,
     test_time_stamp,
-    test_listener_order
+    test_listener_order,
+    test_mouse_event
 ];




More information about the wine-cvs mailing list