Jacek Caban : mshtml: Added IHTMLDocument4::fireEvent implementation.

Alexandre Julliard julliard at winehq.org
Thu Sep 13 14:39:21 CDT 2012


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

Author: Jacek Caban <jacek at 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() {




More information about the wine-cvs mailing list