Module: wine Branch: refs/heads/master Commit: 80dcc8b813b3fa0eea1fa038245e911aa5bf53b2 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=80dcc8b813b3fa0eea1fa038...
Author: Jacek Caban jacek@codeweavers.com Date: Fri Apr 14 14:42:14 2006 +0200
shdocvw: Store IOleInPlaceSite in WebBrowser object.
---
dlls/shdocvw/oleobject.c | 34 +++++++++++++++++++++------------- dlls/shdocvw/shdocvw.h | 1 + 2 files changed, 22 insertions(+), 13 deletions(-)
diff --git a/dlls/shdocvw/oleobject.c b/dlls/shdocvw/oleobject.c index 2ab2d8d..217c549 100644 --- a/dlls/shdocvw/oleobject.c +++ b/dlls/shdocvw/oleobject.c @@ -142,6 +142,11 @@ static HRESULT WINAPI OleObject_SetClien This->shell_embedding_hwnd = NULL; }
+ if(This->inplace) { + IOleInPlaceSite_Release(This->inplace); + This->inplace = NULL; + } + if(This->hostui) IDocHostUIHandler_Release(This->hostui); if(This->client) @@ -243,40 +248,43 @@ static HRESULT WINAPI OleObject_DoVerb(I switch (iVerb) { case OLEIVERB_SHOW: - case OLEIVERB_INPLACEACTIVATE: { - IOleInPlaceSite *inplace; - + case OLEIVERB_INPLACEACTIVATE: TRACE("OLEIVERB_INPLACEACTIVATE\n");
if(!pActiveSite) return E_INVALIDARG;
- hres = IOleClientSite_QueryInterface(pActiveSite, &IID_IOleInPlaceSite, (void**)&inplace); + if(This->inplace) { + IOleInPlaceSite_Release(This->inplace); + This->inplace = NULL; + } + + hres = IOleClientSite_QueryInterface(pActiveSite, &IID_IOleInPlaceSite, (void**)&This->inplace); if(FAILED(hres)) { WARN("Could not get IOleInPlaceSite\n"); return hres; }
- hres = IOleInPlaceSite_CanInPlaceActivate(inplace); + hres = IOleInPlaceSite_CanInPlaceActivate(This->inplace); if(hres != S_OK) { WARN("CanInPlaceActivate returned: %08lx\n", hres); - IOleInPlaceSite_Release(inplace); + IOleInPlaceSite_Release(This->inplace); return E_FAIL; }
- hres = IOleInPlaceSite_GetWindow(inplace, &This->iphwnd); + hres = IOleInPlaceSite_GetWindow(This->inplace, &This->iphwnd); if(FAILED(hres)) This->iphwnd = hwndParent;
- IOleInPlaceSite_OnInPlaceActivate(inplace); + IOleInPlaceSite_OnInPlaceActivate(This->inplace);
- IOleInPlaceSite_GetWindowContext(inplace, &This->frame, &This->uiwindow, + IOleInPlaceSite_GetWindowContext(This->inplace, &This->frame, &This->uiwindow, &This->pos_rect, &This->clip_rect, &This->frameinfo);
if(iVerb == OLEIVERB_INPLACEACTIVATE) - IOleInPlaceSite_Release(inplace); + IOleInPlaceSite_Release(This->inplace);
SetWindowPos(This->shell_embedding_hwnd, NULL, This->pos_rect.left, This->pos_rect.top, @@ -297,8 +305,8 @@ static HRESULT WINAPI OleObject_DoVerb(I
TRACE("OLEIVERB_SHOW\n");
- IOleInPlaceSite_OnUIActivate(inplace); - IOleInPlaceSite_Release(inplace); + IOleInPlaceSite_OnUIActivate(This->inplace); + IOleInPlaceSite_Release(This->inplace);
if(This->frame) IOleInPlaceFrame_SetActiveObject(This->frame, ACTIVEOBJ(This), wszitem); @@ -310,7 +318,6 @@ static HRESULT WINAPI OleObject_DoVerb(I */
return S_OK; - } default: FIXME("stub for %ld\n", iVerb); break; @@ -760,6 +767,7 @@ void WebBrowser_OleObject_Init(WebBrowse This->lpWBOleCommandTargetVtbl = &OleCommandTargetVtbl;
This->client = NULL; + This->inplace = NULL; This->container = NULL; This->iphwnd = NULL; This->frame_hwnd = NULL; diff --git a/dlls/shdocvw/shdocvw.h b/dlls/shdocvw/shdocvw.h index b1b436b..d6fcf35 100644 --- a/dlls/shdocvw/shdocvw.h +++ b/dlls/shdocvw/shdocvw.h @@ -89,6 +89,7 @@ typedef struct { IOleContainer *container; IOleDocumentView *view; IDocHostUIHandler *hostui; + IOleInPlaceSite *inplace;
LPOLESTR url;