Module: wine Branch: master Commit: 05dc7eac8d21297f6eed0508a9e38b9d990a50ce URL: http://source.winehq.org/git/wine.git/?a=commit;h=05dc7eac8d21297f6eed0508a9...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Sep 13 12:29:17 2012 +0200
mshtml: Added IHTMLDocument4::fireEvent implementation.
---
dlls/mshtml/htmldoc3.c | 6 ++++-- dlls/mshtml/htmlevent.c | 11 ++++------- dlls/mshtml/tests/events.html | 29 +++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 9 deletions(-)
diff --git a/dlls/mshtml/htmldoc3.c b/dlls/mshtml/htmldoc3.c index 6256450..f34f0a2 100644 --- a/dlls/mshtml/htmldoc3.c +++ b/dlls/mshtml/htmldoc3.c @@ -777,8 +777,10 @@ static HRESULT WINAPI HTMLDocument4_fireEvent(IHTMLDocument4 *iface, BSTR bstrEv VARIANT *pvarEventObject, VARIANT_BOOL *pfCanceled) { HTMLDocument *This = impl_from_IHTMLDocument4(iface); - FIXME("(%p)->(%s %p %p)\n", This, debugstr_w(bstrEventName), pvarEventObject, pfCanceled); - return E_NOTIMPL; + + TRACE("(%p)->(%s %p %p)\n", This, debugstr_w(bstrEventName), pvarEventObject, pfCanceled); + + return dispatch_event(&This->doc_node->node, bstrEventName, pvarEventObject, pfCanceled); }
static HRESULT WINAPI HTMLDocument4_createRenderStyle(IHTMLDocument4 *iface, BSTR v, diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index 6f1260a..12ff2ff 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -364,13 +364,10 @@ static HRESULT WINAPI HTMLEventObj_get_srcElement(IHTMLEventObj *iface, IHTMLEle
TRACE("(%p)->(%p)\n", This, p);
- if(!This->target) { - *p = NULL; - return S_OK; - } - - return IHTMLDOMNode_QueryInterface(&This->target->IHTMLDOMNode_iface, &IID_IHTMLElement, - (void**)p); + *p = NULL; + if(This->target) + IHTMLDOMNode_QueryInterface(&This->target->IHTMLDOMNode_iface, &IID_IHTMLElement, (void**)p); + return S_OK; }
static HRESULT WINAPI HTMLEventObj_get_altKey(IHTMLEventObj *iface, VARIANT_BOOL *p) diff --git a/dlls/mshtml/tests/events.html b/dlls/mshtml/tests/events.html index fbac741..ad9db3f 100644 --- a/dlls/mshtml/tests/events.html +++ b/dlls/mshtml/tests/events.html @@ -20,6 +20,16 @@ function ondataavailable_test() { ok(evobj.type === "dataavailable", "evobj.type = " + evobj.type); }
+ function ondataavailableDocHandler() { + b = true; + ok(window.event === evobj, "window.event != evobj"); + + ok(evobj.srcElement === null, "evobj.srcElement = " + evobj.srcElement); + ok(evobj.fromElement === null, "evobj.srcElement = " + evobj.fromElement); + ok(evobj.toElement === null, "evobj.srcElement = " + evobj.toElement); + ok(evobj.type === "dataavailable", "evobj.type = " + evobj.type); + } + div.attachEvent("ondataavailable", ondataavailableHandler);
evobj = document.createEventObject(); @@ -33,6 +43,25 @@ function ondataavailable_test() {
ok(evobj.srcElement === div, "evobj.srcElement = " + evobj.srcElement); ok(evobj.type === "dataavailable", "evobj.type = " + evobj.type); + + div.detachEvent("ondataavailable", ondataavailableHandler); + + b = false; + div.fireEvent("ondataavailable", evobj); + ok(!b, "ondataavailable handler called?"); + + ok(evobj.srcElement === div, "evobj.srcElement = " + evobj.srcElement); + ok(evobj.type === "dataavailable", "evobj.type = " + evobj.type); + + document.attachEvent("ondataavailable", ondataavailableDocHandler); + + evobj = document.createEventObject(); + + document.fireEvent("ondataavailable", evobj); + ok(b, "ondataavailable handler not called?"); + + ok(evobj.srcElement === null, "evobj.srcElement = " + evobj.srcElement); + ok(evobj.type === "dataavailable", "evobj.type = " + evobj.type); }
function runTests() {