Jacek Caban : ieframe: Store container IOleCommandTarget in DocHost.
Module: wine Branch: master Commit: 221bb4261c28fb446a48f6f0e00794a07360200c URL: http://source.winehq.org/git/wine.git/?a=commit;h=221bb4261c28fb446a48f6f0e0... Author: Jacek Caban <jacek(a)codeweavers.com> Date: Fri Aug 14 16:30:45 2015 +0200 ieframe: Store container IOleCommandTarget in DocHost. --- dlls/ieframe/dochost.c | 5 +++++ dlls/ieframe/ieframe.h | 1 + dlls/ieframe/oleobject.c | 11 +++++++++++ dlls/ieframe/webbrowser.c | 20 ++------------------ 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/dlls/ieframe/dochost.c b/dlls/ieframe/dochost.c index b0d713b..a495292 100644 --- a/dlls/ieframe/dochost.c +++ b/dlls/ieframe/dochost.c @@ -582,6 +582,11 @@ void release_dochost_client(DocHost *This) IOleInPlaceFrame_Release(This->frame); This->frame = NULL; } + + if(This->olecmd) { + IOleCommandTarget_Release(This->olecmd); + This->olecmd = NULL; + } } static inline DocHost *impl_from_IOleCommandTarget(IOleCommandTarget *iface) diff --git a/dlls/ieframe/ieframe.h b/dlls/ieframe/ieframe.h index a83ff35..8a0b074 100644 --- a/dlls/ieframe/ieframe.h +++ b/dlls/ieframe/ieframe.h @@ -128,6 +128,7 @@ struct DocHost { IDispatch *client_disp; IDocHostUIHandler *hostui; IOleInPlaceFrame *frame; + IOleCommandTarget *olecmd; IUnknown *document; IOleDocumentView *view; diff --git a/dlls/ieframe/oleobject.c b/dlls/ieframe/oleobject.c index fb9e12f..3a75a71 100644 --- a/dlls/ieframe/oleobject.c +++ b/dlls/ieframe/oleobject.c @@ -458,6 +458,7 @@ static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, LPOLECLIENTSITE { WebBrowser *This = impl_from_IOleObject(iface); IDocHostUIHandler *hostui; + IOleCommandTarget *olecmd; IOleContainer *container; IDispatch *disp; HRESULT hres; @@ -502,9 +503,19 @@ static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, LPOLECLIENTSITE ITargetContainer_Release(target_container); } + hres = IOleContainer_QueryInterface(container, &IID_IOleCommandTarget, (void**)&olecmd); + if(FAILED(hres)) + olecmd = NULL; + IOleContainer_Release(container); + }else { + hres = IOleClientSite_QueryInterface(This->client, &IID_IOleCommandTarget, (void**)&olecmd); + if(FAILED(hres)) + olecmd = NULL; } + This->doc_host.olecmd = olecmd; + create_shell_embedding_hwnd(This); on_offlineconnected_change(This); diff --git a/dlls/ieframe/webbrowser.c b/dlls/ieframe/webbrowser.c index 1f58bbb..8689c7e 100644 --- a/dlls/ieframe/webbrowser.c +++ b/dlls/ieframe/webbrowser.c @@ -1206,33 +1206,17 @@ static HRESULT WINAPI DocHostContainer_SetStatusText(DocHost* This, LPCWSTR text static void WINAPI DocHostContainer_SetURL(DocHost* This, LPCWSTR url) { - } static HRESULT DocHostContainer_exec(DocHost *doc_host, const GUID *cmd_group, DWORD cmdid, DWORD execopt, VARIANT *in, VARIANT *out) { - WebBrowser *This = impl_from_DocHost(doc_host); - IOleCommandTarget *cmdtrg = NULL; HRESULT hres; - if(This->client) { - hres = IOleClientSite_QueryInterface(This->client, &IID_IOleCommandTarget, (void**)&cmdtrg); - if(FAILED(hres)) - cmdtrg = NULL; - } - - if(!cmdtrg && This->container) { - hres = IOleContainer_QueryInterface(This->container, &IID_IOleCommandTarget, (void**)&cmdtrg); - if(FAILED(hres)) - cmdtrg = NULL; - } - - if(!cmdtrg) + if(!doc_host->olecmd) return E_NOTIMPL; - hres = IOleCommandTarget_Exec(cmdtrg, cmd_group, cmdid, execopt, in, out); - IOleCommandTarget_Release(cmdtrg); + hres = IOleCommandTarget_Exec(doc_host->olecmd, cmd_group, cmdid, execopt, in, out); if(SUCCEEDED(hres)) TRACE("Exec returned %08x %s\n", hres, debugstr_variant(out)); else
participants (1)
-
Alexandre Julliard