Jacek Caban : mshtml: Added IHTMLEventObj::put_returnValue implementation.
Alexandre Julliard
julliard at winehq.org
Wed Jul 27 13:25:30 CDT 2011
Module: wine
Branch: master
Commit: 9a3aa863be37f14b355a61a4df75345d9865de46
URL: http://source.winehq.org/git/wine.git/?a=commit;h=9a3aa863be37f14b355a61a4df75345d9865de46
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed Jul 27 16:45:49 2011 +0200
mshtml: Added IHTMLEventObj::put_returnValue implementation.
---
dlls/mshtml/htmlevent.c | 13 ++++++-
dlls/mshtml/tests/events.c | 79 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 90 insertions(+), 2 deletions(-)
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c
index d0e8814..f638b9a 100644
--- a/dlls/mshtml/htmlevent.c
+++ b/dlls/mshtml/htmlevent.c
@@ -434,8 +434,17 @@ static HRESULT WINAPI HTMLEventObj_get_shiftKey(IHTMLEventObj *iface, VARIANT_BO
static HRESULT WINAPI HTMLEventObj_put_returnValue(IHTMLEventObj *iface, VARIANT v)
{
HTMLEventObj *This = impl_from_IHTMLEventObj(iface);
- FIXME("(%p)->()\n", This);
- return E_NOTIMPL;
+
+ TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
+
+ if(V_VT(&v) != VT_BOOL) {
+ FIXME("unsupported vt %d\n", V_VT(&v));
+ return DISP_E_BADVARTYPE;
+ }
+
+ if(!V_BOOL(&v))
+ This->prevent_default = TRUE;
+ return S_OK;
}
static HRESULT WINAPI HTMLEventObj_get_returnValue(IHTMLEventObj *iface, VARIANT *p)
diff --git a/dlls/mshtml/tests/events.c b/dlls/mshtml/tests/events.c
index fa2fb6f..55baaca 100644
--- a/dlls/mshtml/tests/events.c
+++ b/dlls/mshtml/tests/events.c
@@ -77,6 +77,7 @@ DEFINE_EXPECT(form_onsubmit);
DEFINE_EXPECT(form_onclick);
DEFINE_EXPECT(submit_onclick);
DEFINE_EXPECT(submit_onclick_attached);
+DEFINE_EXPECT(submit_onclick_setret);
static HWND container_hwnd = NULL;
static IHTMLWindow2 *window;
@@ -989,6 +990,33 @@ static HRESULT WINAPI submit_onclick_attached(IDispatchEx *iface, DISPID id, LCI
EVENT_HANDLER_FUNC_OBJ(submit_onclick_attached);
+static VARIANT onclick_retval, onclick_event_retval;
+
+static HRESULT WINAPI submit_onclick_setret(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
+ VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
+{
+ IHTMLEventObj *event;
+ HRESULT hres;
+
+ CHECK_EXPECT(submit_onclick_setret);
+ test_event_args(NULL, id, wFlags, pdp, pvarRes, pei, pspCaller);
+ test_event_src("INPUT");
+
+ event = NULL;
+ hres = IHTMLWindow2_get_event(window, &event);
+ ok(hres == S_OK, "get_event failed: %08x\n", hres);
+ ok(event != NULL, "event == NULL\n");
+
+ hres = IHTMLEventObj_put_returnValue(event, onclick_event_retval);
+ ok(hres == S_OK, "put_returnValue failed: %08x\n", hres);
+ IHTMLEventObj_Release(event);
+
+ *pvarRes = onclick_retval;
+ return S_OK;
+}
+
+EVENT_HANDLER_FUNC_OBJ(submit_onclick_setret);
+
static HRESULT WINAPI iframedoc_onreadystatechange(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
{
@@ -1778,6 +1806,57 @@ static void test_submit(IHTMLDocument2 *doc)
unregister_cp((IUnknown*)doc, &DIID_HTMLDocumentEvents, cp_cookie);
+ V_VT(&v) = VT_DISPATCH;
+ V_DISPATCH(&v) = (IDispatch*)&submit_onclick_setret_obj;
+ hres = IHTMLElement_put_onclick(submit, v);
+ ok(hres == S_OK, "put_onclick failed: %08x\n", hres);
+
+ V_VT(&onclick_retval) = VT_BOOL;
+ V_BOOL(&onclick_retval) = VARIANT_TRUE;
+ V_VT(&onclick_event_retval) = VT_BOOL;
+ V_BOOL(&onclick_event_retval) = VARIANT_TRUE;
+
+ SET_EXPECT(submit_onclick_setret);
+ SET_EXPECT(form_onclick);
+ SET_EXPECT(form_onsubmit);
+ hres = IHTMLElement_click(submit);
+ ok(hres == S_OK, "click failed: %08x\n", hres);
+ CHECK_CALLED(submit_onclick_setret);
+ CHECK_CALLED(form_onclick);
+ CHECK_CALLED(form_onsubmit);
+
+ V_VT(&onclick_event_retval) = VT_BOOL;
+ V_BOOL(&onclick_event_retval) = VARIANT_FALSE;
+
+ SET_EXPECT(submit_onclick_setret);
+ SET_EXPECT(form_onclick);
+ hres = IHTMLElement_click(submit);
+ ok(hres == S_OK, "click failed: %08x\n", hres);
+ CHECK_CALLED(submit_onclick_setret);
+ CHECK_CALLED(form_onclick);
+
+ V_VT(&onclick_retval) = VT_BOOL;
+ V_BOOL(&onclick_retval) = VARIANT_FALSE;
+ V_VT(&onclick_event_retval) = VT_BOOL;
+ V_BOOL(&onclick_event_retval) = VARIANT_TRUE;
+
+ SET_EXPECT(submit_onclick_setret);
+ SET_EXPECT(form_onclick);
+ hres = IHTMLElement_click(submit);
+ ok(hres == S_OK, "click failed: %08x\n", hres);
+ CHECK_CALLED(submit_onclick_setret);
+ CHECK_CALLED(form_onclick);
+
+ V_VT(&onclick_event_retval) = VT_BOOL;
+ V_BOOL(&onclick_event_retval) = VARIANT_FALSE;
+
+ SET_EXPECT(submit_onclick_setret);
+ SET_EXPECT(form_onclick);
+ hres = IHTMLElement_click(submit);
+ ok(hres == S_OK, "click failed: %08x\n", hres);
+ CHECK_CALLED(submit_onclick_setret);
+ CHECK_CALLED(form_onclick);
+
IHTMLElement_Release(submit);
}
More information about the wine-cvs
mailing list