mshtml: Added IDOMMouseEvent::toElement property implementation.

Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Jacek Caban 2018-02-21 15:19:56 +01:00 committed by Alexandre Julliard
parent cf6d34d815
commit c0d248f2a5
2 changed files with 29 additions and 5 deletions

View File

@ -138,6 +138,10 @@ typedef struct {
#define EVENT_HASDEFAULTHANDLERS 0x0020 #define EVENT_HASDEFAULTHANDLERS 0x0020
#define EVENT_FIXME 0x0040 #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[] = { static const event_info_t event_info[] = {
{abortW, EVENT_TYPE_EVENT, DISPID_EVMETH_ONABORT, {abortW, EVENT_TYPE_EVENT, DISPID_EVMETH_ONABORT,
EVENT_BIND_TO_BODY}, EVENT_BIND_TO_BODY},
@ -186,11 +190,11 @@ static const event_info_t event_info[] = {
{mousedownW, EVENT_TYPE_MOUSE, DISPID_EVMETH_ONMOUSEDOWN, {mousedownW, EVENT_TYPE_MOUSE, DISPID_EVMETH_ONMOUSEDOWN,
EVENT_DEFAULTLISTENER | EVENT_BUBBLES | EVENT_CANCELABLE}, EVENT_DEFAULTLISTENER | EVENT_BUBBLES | EVENT_CANCELABLE},
{mousemoveW, EVENT_TYPE_MOUSE, DISPID_EVMETH_ONMOUSEMOVE, {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, {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, {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, {mouseupW, EVENT_TYPE_MOUSE, DISPID_EVMETH_ONMOUSEUP,
EVENT_DEFAULTLISTENER | EVENT_BUBBLES | EVENT_CANCELABLE}, EVENT_DEFAULTLISTENER | EVENT_BUBBLES | EVENT_CANCELABLE},
{mousewheelW, EVENT_TYPE_MOUSE, DISPID_EVMETH_ONMOUSEWHEEL, {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) static HRESULT WINAPI DOMMouseEvent_get_toElement(IDOMMouseEvent *iface, IHTMLElement **p)
{ {
DOMEvent *This = impl_from_IDOMMouseEvent(iface); DOMEvent *This = impl_from_IDOMMouseEvent(iface);
FIXME("(%p)->(%p)\n", This, p); IEventTarget *related_target = NULL;
return E_NOTIMPL;
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) static HRESULT WINAPI DOMMouseEvent_get_x(IDOMMouseEvent *iface, LONG *p)

View File

@ -632,6 +632,7 @@ function test_mouse_event() {
ok(e.pageY === 0, "pageY = " + e.pageY); ok(e.pageY === 0, "pageY = " + e.pageY);
ok(e.which === 1, "which = " + e.which); ok(e.which === 1, "which = " + e.which);
ok(e.relatedTarget === null, "relatedTarget = " + e.relatedTarget); 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); 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.type === "test", "type = " + e.type);