Module: wine Branch: master Commit: 4890eb5775b388d31ab00393f8707d98749a3144 URL: http://source.winehq.org/git/wine.git/?a=commit;h=4890eb5775b388d31ab00393f8...
Author: Jacek Caban jacek@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);