Module: wine Branch: master Commit: fbf91383336249494565f94d41b0623b7b804881 URL: http://source.winehq.org/git/wine.git/?a=commit;h=fbf91383336249494565f94d41...
Author: Alexander Nicolaysen Sørnes alex@thehandofagony.com Date: Thu Jul 29 10:28:02 2010 +0200
shdocvw: Add DocHostContainer interface to interact with WB2/IE.
---
dlls/shdocvw/dochost.c | 7 ++++--- dlls/shdocvw/frame.c | 4 ++-- dlls/shdocvw/iexplore.c | 26 +++++++++++++++++++++++++- dlls/shdocvw/navigate.c | 2 ++ dlls/shdocvw/shdocvw.h | 11 ++++++++++- dlls/shdocvw/webbrowser.c | 23 ++++++++++++++++++++++- 6 files changed, 65 insertions(+), 8 deletions(-)
diff --git a/dlls/shdocvw/dochost.c b/dlls/shdocvw/dochost.c index 4978989..edf569e 100644 --- a/dlls/shdocvw/dochost.c +++ b/dlls/shdocvw/dochost.c @@ -311,8 +311,7 @@ void create_doc_view_hwnd(DocHost *This) doc_view_atom = RegisterClassExW(&wndclass); }
- GetClientRect(This->frame_hwnd, &rect); - adjust_ie_docobj_rect(This->frame_hwnd, &rect); + This->container_vtbl->GetDocObjRect(This, &rect); This->hwnd = CreateWindowExW(0, wszShell_DocObject_View, wszShell_DocObject_View, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_TABSTOP, @@ -784,7 +783,7 @@ static const IPropertyNotifySinkVtbl PropertyNotifySinkVtbl = { PropertyNotifySink_OnRequestEdit };
-void DocHost_Init(DocHost *This, IDispatch *disp) +void DocHost_Init(DocHost *This, IDispatch *disp, const IDocHostContainerVtbl* container) { This->lpDocHostUIHandlerVtbl = &DocHostUIHandler2Vtbl; This->lpOleCommandTargetVtbl = &OleCommandTargetVtbl; @@ -792,6 +791,8 @@ void DocHost_Init(DocHost *This, IDispatch *disp)
This->disp = disp;
+ This->container_vtbl = container; + This->client_disp = NULL;
This->document = NULL; diff --git a/dlls/shdocvw/frame.c b/dlls/shdocvw/frame.c index eeff20a..150ca93 100644 --- a/dlls/shdocvw/frame.c +++ b/dlls/shdocvw/frame.c @@ -135,8 +135,8 @@ static HRESULT WINAPI InPlaceFrame_SetStatusText(IOleInPlaceFrame *iface, LPCOLESTR pszStatusText) { DocHost *This = INPLACEFRAME_THIS(iface); - FIXME("(%p)->(%s)\n", This, debugstr_w(pszStatusText)); - return E_NOTIMPL; + TRACE("(%p)->(%s)\n", This, debugstr_w(pszStatusText)); + return This->container_vtbl->SetStatusText(This, pszStatusText); }
static HRESULT WINAPI InPlaceFrame_EnableModeless(IOleInPlaceFrame *iface, BOOL fEnable) diff --git a/dlls/shdocvw/iexplore.c b/dlls/shdocvw/iexplore.c index d81e8f1..e98b74c 100644 --- a/dlls/shdocvw/iexplore.c +++ b/dlls/shdocvw/iexplore.c @@ -344,6 +344,30 @@ static IWebBrowser2 *create_ie_window(LPCSTR cmdline) return wb; }
+static void WINAPI DocHostContainer_GetDocObjRect(DocHost* This, RECT* rc) +{ + GetClientRect(This->frame_hwnd, rc); + adjust_ie_docobj_rect(This->frame_hwnd, rc); +} + +static HRESULT WINAPI DocHostContainer_SetStatusText(DocHost* This, LPCWSTR text) +{ + FIXME("(%p)->(%s)\n", This, debugstr_w(text)); + + return E_NOTIMPL; +} + +static void WINAPI DocHostContainer_SetURL(DocHost* This, LPCWSTR url) +{ + +} + +static const IDocHostContainerVtbl DocHostContainerVtbl = { + DocHostContainer_GetDocObjRect, + DocHostContainer_SetStatusText, + DocHostContainer_SetURL +}; + HRESULT InternetExplorer_Create(IUnknown *pOuter, REFIID riid, void **ppv) { InternetExplorer *ret; @@ -355,7 +379,7 @@ HRESULT InternetExplorer_Create(IUnknown *pOuter, REFIID riid, void **ppv) ret->ref = 0;
ret->doc_host.disp = (IDispatch*)WEBBROWSER2(ret); - DocHost_Init(&ret->doc_host, (IDispatch*)WEBBROWSER2(ret)); + DocHost_Init(&ret->doc_host, (IDispatch*)WEBBROWSER2(ret), &DocHostContainerVtbl);
InternetExplorer_WebBrowser_Init(ret);
diff --git a/dlls/shdocvw/navigate.c b/dlls/shdocvw/navigate.c index 5550387..368a3c3 100644 --- a/dlls/shdocvw/navigate.c +++ b/dlls/shdocvw/navigate.c @@ -125,6 +125,8 @@ static HRESULT set_dochost_url(DocHost *This, const WCHAR *url)
heap_free(This->url); This->url = new_url; + + This->container_vtbl->SetURL(This, This->url); return S_OK; }
diff --git a/dlls/shdocvw/shdocvw.h b/dlls/shdocvw/shdocvw.h index 44919a5..2d7f03b 100644 --- a/dlls/shdocvw/shdocvw.h +++ b/dlls/shdocvw/shdocvw.h @@ -82,6 +82,13 @@ typedef struct _task_header_t { task_proc_t proc; } task_header_t;
+typedef struct _IDocHostContainerVtbl +{ + void (WINAPI* GetDocObjRect)(DocHost*,RECT*); + HRESULT (WINAPI* SetStatusText)(DocHost*,LPCWSTR); + void (WINAPI* SetURL)(DocHost*,LPCWSTR); +} IDocHostContainerVtbl; + struct DocHost { const IOleClientSiteVtbl *lpOleClientSiteVtbl; const IOleInPlaceSiteVtbl *lpOleInPlaceSiteVtbl; @@ -105,6 +112,8 @@ struct DocHost { IOleDocumentView *view; IUnknown *doc_navigate;
+ const IDocHostContainerVtbl *container_vtbl; + HWND hwnd; HWND frame_hwnd;
@@ -220,7 +229,7 @@ void WebBrowser_ClassInfo_Init(WebBrowser*);
void WebBrowser_OleObject_Destroy(WebBrowser*);
-void DocHost_Init(DocHost*,IDispatch*); +void DocHost_Init(DocHost*,IDispatch*,const IDocHostContainerVtbl*); void DocHost_ClientSite_Init(DocHost*); void DocHost_Frame_Init(DocHost*); void release_dochost_client(DocHost*); diff --git a/dlls/shdocvw/webbrowser.c b/dlls/shdocvw/webbrowser.c index 217c9da..5115de7 100644 --- a/dlls/shdocvw/webbrowser.c +++ b/dlls/shdocvw/webbrowser.c @@ -1126,6 +1126,27 @@ static const IServiceProviderVtbl ServiceProviderVtbl = WebBrowser_IServiceProvider_QueryService };
+static void WINAPI DocHostContainer_GetDocObjRect(DocHost* This, RECT* rc) +{ + GetClientRect(This->frame_hwnd, rc); +} + +static HRESULT WINAPI DocHostContainer_SetStatusText(DocHost* This, LPCWSTR text) +{ + return E_NOTIMPL; +} + +static void WINAPI DocHostContainer_SetURL(DocHost* This, LPCWSTR url) +{ + +} + +static const IDocHostContainerVtbl DocHostContainerVtbl = { + DocHostContainer_GetDocObjRect, + DocHostContainer_SetStatusText, + DocHostContainer_SetURL +}; + static HRESULT WebBrowser_Create(INT version, IUnknown *pOuter, REFIID riid, void **ppv) { WebBrowser *ret; @@ -1140,7 +1161,7 @@ static HRESULT WebBrowser_Create(INT version, IUnknown *pOuter, REFIID riid, voi ret->ref = 1; ret->version = version;
- DocHost_Init(&ret->doc_host, (IDispatch*)WEBBROWSER2(ret)); + DocHost_Init(&ret->doc_host, (IDispatch*)WEBBROWSER2(ret), &DocHostContainerVtbl);
ret->visible = VARIANT_TRUE; ret->menu_bar = VARIANT_TRUE;