Gabriel Ivăncescu : mshtml: Forward Document's Invoke to InvokeEx.
Alexandre Julliard
julliard at winehq.org
Sat Aug 13 14:19:16 CDT 2022
Module: wine
Branch: master
Commit: 4cc16ada4b96c53a9a4d2383298373fd5a273827
URL: https://gitlab.winehq.org/wine/wine/-/commit/4cc16ada4b96c53a9a4d2383298373fd5a273827
Author: Gabriel Ivăncescu <gabrielopcode at gmail.com>
Date: Fri Aug 12 17:07:29 2022 +0300
mshtml: Forward Document's Invoke to InvokeEx.
Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
dlls/mshtml/htmldoc.c | 38 +++++++++++++++++++++-----------------
dlls/mshtml/tests/htmldoc.c | 10 ++++++++++
2 files changed, 31 insertions(+), 17 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index 0cf19388481..3cbd229f19e 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -4912,20 +4912,8 @@ static HRESULT WINAPI DocDispatchEx_Invoke(IDispatchEx *iface, DISPID dispIdMemb
TRACE("(%p)->(%ld %s %ld %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
- switch(dispIdMember) {
- case DISPID_READYSTATE:
- TRACE("DISPID_READYSTATE\n");
-
- if(!(wFlags & DISPATCH_PROPERTYGET))
- return E_INVALIDARG;
-
- V_VT(pVarResult) = VT_I4;
- V_I4(pVarResult) = This->window->readystate;
- return S_OK;
- }
-
- return IDispatchEx_Invoke(This->dispex, dispIdMember, riid, lcid, wFlags, pDispParams,
- pVarResult, pExcepInfo, puArgErr);
+ return IDispatchEx_InvokeEx(&This->IDispatchEx_iface, dispIdMember, lcid, wFlags, pDispParams,
+ pVarResult, pExcepInfo, NULL);
}
static HRESULT WINAPI DocDispatchEx_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
@@ -4945,10 +4933,26 @@ static HRESULT WINAPI DocDispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID
{
HTMLDocument *This = impl_from_IDispatchEx(iface);
- if(This->window && id == DISPID_IHTMLDOCUMENT2_LOCATION && (wFlags & DISPATCH_PROPERTYPUT))
- return IDispatchEx_InvokeEx(&This->window->base.IDispatchEx_iface, DISPID_IHTMLWINDOW2_LOCATION,
- lcid, wFlags, pdp, pvarRes, pei, pspCaller);
+ if(This->window) {
+ switch(id) {
+ case DISPID_READYSTATE:
+ TRACE("DISPID_READYSTATE\n");
+
+ if(!(wFlags & DISPATCH_PROPERTYGET))
+ return E_INVALIDARG;
+ V_VT(pvarRes) = VT_I4;
+ V_I4(pvarRes) = This->window->readystate;
+ return S_OK;
+ case DISPID_IHTMLDOCUMENT2_LOCATION:
+ if(!(wFlags & DISPATCH_PROPERTYPUT))
+ break;
+ return IDispatchEx_InvokeEx(&This->window->base.IDispatchEx_iface, DISPID_IHTMLWINDOW2_LOCATION,
+ lcid, wFlags, pdp, pvarRes, pei, pspCaller);
+ default:
+ break;
+ }
+ }
return IDispatchEx_InvokeEx(This->dispex, id, lcid, wFlags, pdp, pvarRes, pei, pspCaller);
}
diff --git a/dlls/mshtml/tests/htmldoc.c b/dlls/mshtml/tests/htmldoc.c
index ff050863b6f..7764f256ab0 100644
--- a/dlls/mshtml/tests/htmldoc.c
+++ b/dlls/mshtml/tests/htmldoc.c
@@ -5364,6 +5364,7 @@ static void _test_readyState(unsigned line, IUnknown *unk)
{
IHTMLDocument2 *htmldoc;
DISPPARAMS dispparams;
+ IDispatchEx *dispex;
IHTMLElement *elem;
BSTR state;
VARIANT out;
@@ -5437,6 +5438,15 @@ static void _test_readyState(unsigned line, IUnknown *unk)
ok_(__FILE__,line) (V_VT(&out) == VT_I4, "V_VT(out)=%d\n", V_VT(&out));
ok_(__FILE__,line) (V_I4(&out) == load_state%5, "VT_I4(out)=%ld, expected %d\n", V_I4(&out), load_state%5);
+ hres = IHTMLDocument2_QueryInterface(htmldoc, &IID_IDispatchEx, (void**)&dispex);
+ ok(hres == S_OK, "QueryInterface(IID_IDispatchEx) failed: %08lx\n", hres);
+ hres = IDispatchEx_InvokeEx(dispex, DISPID_READYSTATE, 0, DISPATCH_PROPERTYGET, &dispparams, &out, NULL, NULL);
+ ok(hres == S_OK, "InvokeEx(DISPID_READYSTATE) failed: %08lx\n", hres);
+ IDispatchEx_Release(dispex);
+
+ ok_(__FILE__,line) (V_VT(&out) == VT_I4, "V_VT(out)=%d\n", V_VT(&out));
+ ok_(__FILE__,line) (V_I4(&out) == load_state%5, "VT_I4(out)=%ld, expected %d\n", V_I4(&out), load_state%5);
+
test_doscroll((IUnknown*)htmldoc);
IHTMLDocument2_Release(htmldoc);
More information about the wine-cvs
mailing list