Jacek Caban : mshtml: Added IHTMLDocument3::detachEvent implementation.

Alexandre Julliard julliard at winehq.org
Mon Jul 19 11:05:30 CDT 2010


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Sat Jul 17 13:31:43 2010 +0200

mshtml: Added IHTMLDocument3::detachEvent implementation.

---

 dlls/mshtml/htmldoc3.c     |    6 +++-
 dlls/mshtml/tests/events.c |   47 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 51 insertions(+), 2 deletions(-)

diff --git a/dlls/mshtml/htmldoc3.c b/dlls/mshtml/htmldoc3.c
index f4ea096..8d135ff 100644
--- a/dlls/mshtml/htmldoc3.c
+++ b/dlls/mshtml/htmldoc3.c
@@ -189,8 +189,10 @@ static HRESULT WINAPI HTMLDocument3_detachEvent(IHTMLDocument3 *iface, BSTR even
                                                 IDispatch *pDisp)
 {
     HTMLDocument *This = HTMLDOC3_THIS(iface);
-    FIXME("(%p)->(%s %p)\n", This, debugstr_w(event), pDisp);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%s %p)\n", This, debugstr_w(event), pDisp);
+
+    return detach_event(This->doc_node->node.event_target, This, event, pDisp);
 }
 
 static HRESULT WINAPI HTMLDocument3_put_onrowsdelete(IHTMLDocument3 *iface, VARIANT v)
diff --git a/dlls/mshtml/tests/events.c b/dlls/mshtml/tests/events.c
index deafd54..7d69dd5 100644
--- a/dlls/mshtml/tests/events.c
+++ b/dlls/mshtml/tests/events.c
@@ -59,6 +59,7 @@
 
 DEFINE_EXPECT(document_onclick);
 DEFINE_EXPECT(body_onclick);
+DEFINE_EXPECT(doc_onclick_attached);
 DEFINE_EXPECT(div_onclick);
 DEFINE_EXPECT(div_onclick_attached);
 DEFINE_EXPECT(timeout);
@@ -662,6 +663,36 @@ static void _elem_detach_event(unsigned line, IUnknown *unk, const char *namea,
     ok_(__FILE__,line)(hres == S_OK, "detachEvent failed: %08x\n", hres);
 }
 
+#define doc_attach_event(a,b,c) _doc_attach_event(__LINE__,a,b,c)
+static void _doc_attach_event(unsigned line, IHTMLDocument2 *doc, const char *namea, IDispatch *disp)
+{
+    IHTMLDocument3 *doc3 = _get_doc3_iface(line, (IUnknown*)doc);
+    VARIANT_BOOL res;
+    BSTR name;
+    HRESULT hres;
+
+    name = a2bstr(namea);
+    hres = IHTMLDocument3_attachEvent(doc3, name, disp, &res);
+    IHTMLDocument3_Release(doc3);
+    SysFreeString(name);
+    ok_(__FILE__,line)(hres == S_OK, "attachEvent failed: %08x\n", hres);
+    ok_(__FILE__,line)(res == VARIANT_TRUE, "attachEvent returned %x\n", res);
+}
+
+#define doc_detach_event(a,b,c) _doc_detach_event(__LINE__,a,b,c)
+static void _doc_detach_event(unsigned line, IHTMLDocument2 *doc, const char *namea, IDispatch *disp)
+{
+    IHTMLDocument3 *doc3 = _get_doc3_iface(line, (IUnknown*)doc);
+    BSTR name;
+    HRESULT hres;
+
+    name = a2bstr(namea);
+    hres = IHTMLDocument3_detachEvent(doc3, name, disp);
+    IHTMLDocument3_Release(doc3);
+    SysFreeString(name);
+    ok_(__FILE__,line)(hres == S_OK, "detachEvent failed: %08x\n", hres);
+}
+
 static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid, void **ppv)
 {
     *ppv = NULL;
@@ -841,6 +872,18 @@ static HRESULT WINAPI div_onclick_attached(IDispatchEx *iface, DISPID id, LCID l
 
 EVENT_HANDLER_FUNC_OBJ(div_onclick_attached);
 
+static HRESULT WINAPI doc_onclick_attached(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
+        VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
+{
+    CHECK_EXPECT(doc_onclick_attached);
+
+    test_attached_event_args(id, wFlags, pdp, pvarRes, pei);
+    test_event_src("DIV");
+    return S_OK;
+}
+
+EVENT_HANDLER_FUNC_OBJ(doc_onclick_attached);
+
 static HRESULT WINAPI body_onclick(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
         VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
 {
@@ -1249,12 +1292,14 @@ static void test_onclick(IHTMLDocument2 *doc)
 
     cp_cookie = register_cp((IUnknown*)doc, &DIID_HTMLDocumentEvents, (IUnknown*)&doccp_obj);
     elem_attach_event((IUnknown*)div, "onclick", (IDispatch*)&div_onclick_disp);
+    doc_attach_event(doc, "onclick", (IDispatch*)&doc_onclick_attached_obj);
 
     SET_EXPECT(div_onclick);
     SET_EXPECT(div_onclick_disp);
     SET_EXPECT(div_onclick_attached);
     SET_EXPECT(body_onclick);
     SET_EXPECT(document_onclick);
+    SET_EXPECT(doc_onclick_attached);
     SET_EXPECT(doccp_onclick);
 
     hres = IHTMLElement_click(div);
@@ -1265,6 +1310,7 @@ static void test_onclick(IHTMLDocument2 *doc)
     CHECK_CALLED(div_onclick_attached);
     CHECK_CALLED(body_onclick);
     CHECK_CALLED(document_onclick);
+    CHECK_CALLED(doc_onclick_attached);
     CHECK_CALLED(doccp_onclick);
 
     unregister_cp((IUnknown*)doc, &DIID_HTMLDocumentEvents, cp_cookie);
@@ -1280,6 +1326,7 @@ static void test_onclick(IHTMLDocument2 *doc)
     elem_detach_event((IUnknown*)div, "onclick", (IDispatch*)&div_onclick_disp);
     elem_detach_event((IUnknown*)div, "onclick", (IDispatch*)&div_onclick_disp);
     elem_detach_event((IUnknown*)div, "test", (IDispatch*)&div_onclick_disp);
+    doc_detach_event(doc, "onclick", (IDispatch*)&doc_onclick_attached_obj);
 
     SET_EXPECT(div_onclick_attached);
     SET_EXPECT(body_onclick);




More information about the wine-cvs mailing list