Jacek Caban : mshtml: Added IDOMMouseEvent:: toElement property implementation.
Alexandre Julliard
julliard at winehq.org
Wed Feb 21 18:39:41 CST 2018
Module: wine
Branch: master
Commit: c0d248f2a5c167d228c4024feea2ec713abc42ed
URL: https://source.winehq.org/git/wine.git/?a=commit;h=c0d248f2a5c167d228c4024feea2ec713abc42ed
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed Feb 21 15:19:56 2018 +0100
mshtml: Added IDOMMouseEvent::toElement property implementation.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/mshtml/htmlevent.c | 33 ++++++++++++++++++++++++++++-----
dlls/mshtml/tests/events.js | 1 +
2 files changed, 29 insertions(+), 5 deletions(-)
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c
index 6c75475..e9a4731 100644
--- a/dlls/mshtml/htmlevent.c
+++ b/dlls/mshtml/htmlevent.c
@@ -138,6 +138,10 @@ typedef struct {
#define EVENT_HASDEFAULTHANDLERS 0x0020
#define EVENT_FIXME 0x0040
+/* mouse event flags for fromElement and toElement implementation */
+#define EVENT_MOUSE_TO_RELATED 0x0100
+#define EVENT_MOUSE_FROM_RELATED 0x0200
+
static const event_info_t event_info[] = {
{abortW, EVENT_TYPE_EVENT, DISPID_EVMETH_ONABORT,
EVENT_BIND_TO_BODY},
@@ -186,11 +190,11 @@ static const event_info_t event_info[] = {
{mousedownW, EVENT_TYPE_MOUSE, DISPID_EVMETH_ONMOUSEDOWN,
EVENT_DEFAULTLISTENER | EVENT_BUBBLES | EVENT_CANCELABLE},
{mousemoveW, EVENT_TYPE_MOUSE, DISPID_EVMETH_ONMOUSEMOVE,
- EVENT_DEFAULTLISTENER | EVENT_BUBBLES | EVENT_CANCELABLE},
+ EVENT_DEFAULTLISTENER | EVENT_BUBBLES | EVENT_CANCELABLE | EVENT_MOUSE_FROM_RELATED},
{mouseoutW, EVENT_TYPE_MOUSE, DISPID_EVMETH_ONMOUSEOUT,
- EVENT_DEFAULTLISTENER | EVENT_BUBBLES | EVENT_CANCELABLE},
+ EVENT_DEFAULTLISTENER | EVENT_BUBBLES | EVENT_CANCELABLE | EVENT_MOUSE_TO_RELATED},
{mouseoverW, EVENT_TYPE_MOUSE, DISPID_EVMETH_ONMOUSEOVER,
- EVENT_DEFAULTLISTENER | EVENT_BUBBLES | EVENT_CANCELABLE},
+ EVENT_DEFAULTLISTENER | EVENT_BUBBLES | EVENT_CANCELABLE | EVENT_MOUSE_FROM_RELATED},
{mouseupW, EVENT_TYPE_MOUSE, DISPID_EVMETH_ONMOUSEUP,
EVENT_DEFAULTLISTENER | EVENT_BUBBLES | EVENT_CANCELABLE},
{mousewheelW, EVENT_TYPE_MOUSE, DISPID_EVMETH_ONMOUSEWHEEL,
@@ -1583,8 +1587,27 @@ static HRESULT WINAPI DOMMouseEvent_get_fromElement(IDOMMouseEvent *iface, IHTML
static HRESULT WINAPI DOMMouseEvent_get_toElement(IDOMMouseEvent *iface, IHTMLElement **p)
{
DOMEvent *This = impl_from_IDOMMouseEvent(iface);
- FIXME("(%p)->(%p)\n", This, p);
- return E_NOTIMPL;
+ IEventTarget *related_target = NULL;
+
+ TRACE("(%p)->(%p)\n", This, p);
+
+ if(This->event_id != EVENTID_LAST) {
+ HRESULT hres = S_OK;
+ if(event_info[This->event_id].flags & EVENT_MOUSE_TO_RELATED)
+ hres = IDOMMouseEvent_get_relatedTarget(&This->IDOMMouseEvent_iface, &related_target);
+ else if(event_info[This->event_id].flags & EVENT_MOUSE_FROM_RELATED)
+ hres = IDOMEvent_get_target(&This->IDOMEvent_iface, &related_target);
+ if(FAILED(hres))
+ return hres;
+ }
+
+ if(!related_target) {
+ *p = NULL;
+ return S_OK;
+ }
+
+ IEventTarget_QueryInterface(related_target, &IID_IHTMLElement, (void**)p);
+ return S_OK;
}
static HRESULT WINAPI DOMMouseEvent_get_x(IDOMMouseEvent *iface, LONG *p)
diff --git a/dlls/mshtml/tests/events.js b/dlls/mshtml/tests/events.js
index 677e8e7..a15ee51 100644
--- a/dlls/mshtml/tests/events.js
+++ b/dlls/mshtml/tests/events.js
@@ -632,6 +632,7 @@ function test_mouse_event() {
ok(e.pageY === 0, "pageY = " + e.pageY);
ok(e.which === 1, "which = " + e.which);
ok(e.relatedTarget === null, "relatedTarget = " + e.relatedTarget);
+ ok(e.toElement === null, "toElement = " + e.toElement);
e.initMouseEvent("test", true, true, window, 1, 2, 3, 4, 5, false, false, false, false, 1, document);
ok(e.type === "test", "type = " + e.type);
More information about the wine-cvs
mailing list