From: Jacek Caban jacek@codeweavers.com
--- dlls/jscript/dispex.c | 5 +++-- dlls/jscript/jsdisp.idl | 1 + dlls/mshtml/dispex.c | 9 +++++++++ dlls/mshtml/htmlwindow.c | 10 ++++++++++ 4 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c index 1b61ba531e9..bd509a2e6f2 100644 --- a/dlls/jscript/dispex.c +++ b/dlls/jscript/dispex.c @@ -3515,6 +3515,7 @@ HRESULT init_host_object(script_ctx_t *ctx, IWineJSDispatchHost *host_iface, IWi
IWineJSDispatchHost *get_host_dispatch(IDispatch *disp) { + IWineJSDispatchHost *ret; HostObject *host_obj; jsdisp_t *jsdisp;
@@ -3524,6 +3525,6 @@ IWineJSDispatchHost *get_host_dispatch(IDispatch *disp) return NULL;
host_obj = HostObject_from_jsdisp(jsdisp); - IWineJSDispatchHost_AddRef(host_obj->host_iface); - return host_obj->host_iface; + IWineJSDispatchHost_GetOuterDispatch(host_obj->host_iface, &ret); + return ret; } diff --git a/dlls/jscript/jsdisp.idl b/dlls/jscript/jsdisp.idl index a2b8762b2c0..518edabba9d 100644 --- a/dlls/jscript/jsdisp.idl +++ b/dlls/jscript/jsdisp.idl @@ -64,6 +64,7 @@ interface IWineJSDispatchHost : IDispatchEx HRESULT DeleteProperty(DISPID id); HRESULT ConfigureProperty(DISPID id, UINT32 flags); HRESULT CallFunction(DISPID id, UINT32 iid, DISPPARAMS *dp, VARIANT *ret, EXCEPINFO *ei, IServiceProvider *caller); + HRESULT GetOuterDispatch(IWineJSDispatchHost **ret); HRESULT ToString(BSTR *str); }
diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index 61c86ec47df..4a0e6a68403 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -2475,6 +2475,14 @@ static HRESULT WINAPI JSDispatchHost_CallFunction(IWineJSDispatchHost *iface, DI return call_builtin_function(This, func, dp, ret, ei, caller); }
+static HRESULT WINAPI JSDispatchHost_GetOuterDispatch(IWineJSDispatchHost *iface, IWineJSDispatchHost **ret) +{ + DispatchEx *This = impl_from_IWineJSDispatchHost(iface); + + *ret = dispex_outer_iface(This); + return S_OK; +} + static HRESULT WINAPI JSDispatchHost_ToString(IWineJSDispatchHost *iface, BSTR *str) { DispatchEx *This = impl_from_IWineJSDispatchHost(iface); @@ -2508,6 +2516,7 @@ static IWineJSDispatchHostVtbl JSDispatchHostVtbl = { JSDispatchHost_DeleteProperty, JSDispatchHost_ConfigureProperty, JSDispatchHost_CallFunction, + JSDispatchHost_GetOuterDispatch, JSDispatchHost_ToString, };
diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index 534a0bae9d2..588d10a1e56 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -3508,6 +3508,15 @@ static HRESULT WINAPI WindowDispEx_CallFunction(IWineJSDispatchHost *iface, DISP id, iid, dp, ret, ei, caller); }
+static HRESULT WINAPI WindowDispEx_GetOuterDispatch(IWineJSDispatchHost *iface, IWineJSDispatchHost **ret) +{ + HTMLOuterWindow *This = impl_from_IWineJSDispatchHost(iface); + + *ret = &This->IWineJSDispatchHost_iface; + IWineJSDispatchHost_AddRef(*ret); + return S_OK; +} + static HRESULT WINAPI WindowDispEx_ToString(IWineJSDispatchHost *iface, BSTR *str) { HTMLOuterWindow *This = impl_from_IWineJSDispatchHost(iface); @@ -3539,6 +3548,7 @@ static const IWineJSDispatchHostVtbl WindowDispExVtbl = { WindowDispEx_DeleteProperty, WindowDispEx_ConfigureProperty, WindowDispEx_CallFunction, + WindowDispEx_GetOuterDispatch, WindowDispEx_ToString, };