Module: wine Branch: refs/heads/master Commit: 9cbe52b111b774c3482973b7fc1363c875c15501 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=9cbe52b111b774c3482973b7...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Jan 25 13:14:57 2006 +0100
shdocvw: Store IDocHostUIHandler interface in the WebBrowser object.
---
dlls/shdocvw/dochost.c | 31 +++++++++---------------------- dlls/shdocvw/oleobject.c | 8 ++++++++ dlls/shdocvw/shdocvw.h | 2 ++ 3 files changed, 19 insertions(+), 22 deletions(-)
diff --git a/dlls/shdocvw/dochost.c b/dlls/shdocvw/dochost.c index 57b8660..0ac1fcc 100644 --- a/dlls/shdocvw/dochost.c +++ b/dlls/shdocvw/dochost.c @@ -1,5 +1,5 @@ /* - * Copyright 2005 Jacek Caban for CodeWeavers + * Copyright 2005-2006 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -239,19 +239,14 @@ static HRESULT WINAPI DocHostUIHandler_G DOCHOSTUIINFO *pInfo) { WebBrowser *This = DOCHOSTUI_THIS(iface); - IDocHostUIHandler *handler; HRESULT hres;
TRACE("(%p)->(%p)\n", This, pInfo);
- if(This->client) { - hres = IOleClientSite_QueryInterface(This->client, &IID_IDocHostUIHandler, (void**)&handler); - if(SUCCEEDED(hres)) { - hres = IDocHostUIHandler_GetHostInfo(handler, pInfo); - IDocHostUIHandler_Release(handler); - if(SUCCEEDED(hres)) - return hres; - } + if(This->hostui) { + hres = IDocHostUIHandler_GetHostInfo(This->hostui, pInfo); + if(SUCCEEDED(hres)) + return hres; }
pInfo->dwFlags = DOCHOSTUIFLAG_DISABLE_HELP_MENU | DOCHOSTUIFLAG_OPENNEWWIN @@ -328,21 +323,11 @@ static HRESULT WINAPI DocHostUIHandler_G LPOLESTR *pchKey, DWORD dw) { WebBrowser *This = DOCHOSTUI_THIS(iface); - IDocHostUIHandler *handler; - HRESULT hres;
TRACE("(%p)->(%p %ld)\n", This, pchKey, dw);
- if(!This->client) - return S_OK; - - hres = IOleClientSite_QueryInterface(This->client, &IID_IDocHostUIHandler, - (void**)&handler); - if(SUCCEEDED(hres)) { - hres = IDocHostUIHandler_GetOptionKeyPath(handler, pchKey, dw); - IDocHostUIHandler_Release(handler); - return hres; - } + if(This->hostui) + return IDocHostUIHandler_GetOptionKeyPath(This->hostui, pchKey, dw);
return S_OK; } @@ -430,5 +415,7 @@ void WebBrowser_DocHost_Init(WebBrowser { This->lpDocHostUIHandlerVtbl = &DocHostUIHandler2Vtbl;
+ This->hostui = NULL; + This->doc_view_hwnd = NULL; } diff --git a/dlls/shdocvw/oleobject.c b/dlls/shdocvw/oleobject.c index 656fe0d..4f41da3 100644 --- a/dlls/shdocvw/oleobject.c +++ b/dlls/shdocvw/oleobject.c @@ -124,6 +124,7 @@ static ULONG WINAPI OleObject_Release(IO static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, LPOLECLIENTSITE pClientSite) { WebBrowser *This = OLEOBJ_THIS(iface); + HRESULT hres;
TRACE("(%p)->(%p)\n", This, pClientSite);
@@ -139,6 +140,8 @@ static HRESULT WINAPI OleObject_SetClien This->shell_embedding_hwnd = NULL; }
+ if(This->hostui) + IDocHostUIHandler_Release(This->hostui); if(This->client) IOleClientSite_Release(This->client);
@@ -152,6 +155,11 @@ static HRESULT WINAPI OleObject_SetClien This->client = pClientSite; IOleClientSite_AddRef(pClientSite);
+ hres = IOleClientSite_QueryInterface(This->client, &IID_IDocHostUIHandler, + (void**)&This->hostui); + if(FAILED(hres)) + This->hostui = NULL; + create_shell_embedding_hwnd(This);
return S_OK; diff --git a/dlls/shdocvw/shdocvw.h b/dlls/shdocvw/shdocvw.h index 49508b8..1aa8480 100644 --- a/dlls/shdocvw/shdocvw.h +++ b/dlls/shdocvw/shdocvw.h @@ -2,6 +2,7 @@ * Header includes for shdocvw.dll * * Copyright 2001 John R. Sheets (for CodeWeavers) + * Copyright 2005-2006 Jacek Caban for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -94,6 +95,7 @@ typedef struct { IOleClientSite *client; IOleContainer *container; IOleDocumentView *view; + IDocHostUIHandler *hostui;
LPOLESTR url;