ChangeSet ID: 21483 CVSROOT: /opt/cvs-commit Module name: wine Changes by: julliard@winehq.org 2005/11/28 05:05:19
Modified files: dlls/shdocvw : client.c shdocvw.h webbrowser.c
Log message: Jacek Caban jacek@codeweavers.com Added IOleDocumentSite implementation.
Patch: http://cvs.winehq.org/patch.py?id=21483
Old revision New revision Changes Path 1.5 1.6 +64 -0 wine/dlls/shdocvw/client.c 1.34 1.35 +4 -0 wine/dlls/shdocvw/shdocvw.h 1.28 1.29 +1 -0 wine/dlls/shdocvw/webbrowser.c
Index: wine/dlls/shdocvw/client.c diff -u -p wine/dlls/shdocvw/client.c:1.5 wine/dlls/shdocvw/client.c:1.6 --- wine/dlls/shdocvw/client.c:1.5 28 Nov 2005 11: 5:19 -0000 +++ wine/dlls/shdocvw/client.c 28 Nov 2005 11: 5:19 -0000 @@ -272,8 +272,72 @@ static const IOleInPlaceSiteVtbl OleInPl InPlaceSite_OnPosRectChange };
+#define DOCSITE_THIS(iface) DEFINE_THIS(WebBrowser, OleDocumentSite, iface) + +static HRESULT WINAPI OleDocumentSite_QueryInterface(IOleDocumentSite *iface, + REFIID riid, void **ppv) +{ + WebBrowser *This = DOCSITE_THIS(iface); + return IOleClientSite_QueryInterface(CLIENTSITE(This), riid, ppv); +} + +static ULONG WINAPI OleDocumentSite_AddRef(IOleDocumentSite *iface) +{ + WebBrowser *This = DOCSITE_THIS(iface); + return IOleClientSite_AddRef(CLIENTSITE(This)); +} + +static ULONG WINAPI OleDocumentSite_Release(IOleDocumentSite *iface) +{ + WebBrowser *This = DOCSITE_THIS(iface); + return IOleClientSite_Release(CLIENTSITE(This)); +} + +static HRESULT WINAPI OleDocumentSite_ActivateMe(IOleDocumentSite *iface, + IOleDocumentView *pViewToActivate) +{ + WebBrowser *This = DOCSITE_THIS(iface); + IOleDocument *oledoc; + RECT rect; + HRESULT hres; + + TRACE("(%p)->(%p)\n", This, pViewToActivate); + + hres = IUnknown_QueryInterface(This->document, &IID_IOleDocument, (void**)&oledoc); + if(FAILED(hres)) + return hres; + + IOleDocument_CreateView(oledoc, INPLACESITE(This), NULL, 0, &This->view); + IOleDocument_Release(oledoc); + + GetClientRect(This->doc_view_hwnd, &rect); + IOleDocumentView_SetRect(This->view, &rect); + + hres = IOleDocumentView_Show(This->view, TRUE); + + return hres; +} + +#undef DOCSITE_THIS + +static const IOleDocumentSiteVtbl OleDocumentSiteVtbl = { + OleDocumentSite_QueryInterface, + OleDocumentSite_AddRef, + OleDocumentSite_Release, + OleDocumentSite_ActivateMe +}; + void WebBrowser_ClientSite_Init(WebBrowser *This) { This->lpOleClientSiteVtbl = &OleClientSiteVtbl; This->lpOleInPlaceSiteVtbl = &OleInPlaceSiteVtbl; + This->lpOleDocumentSiteVtbl = &OleDocumentSiteVtbl; + + This->view = NULL; +} + +void WebBrowser_ClientSite_Destroy(WebBrowser *This) +{ + if(This->view) + IOleDocumentView_Release(This->view); } Index: wine/dlls/shdocvw/shdocvw.h diff -u -p wine/dlls/shdocvw/shdocvw.h:1.34 wine/dlls/shdocvw/shdocvw.h:1.35 --- wine/dlls/shdocvw/shdocvw.h:1.34 28 Nov 2005 11: 5:19 -0000 +++ wine/dlls/shdocvw/shdocvw.h 28 Nov 2005 11: 5:19 -0000 @@ -77,6 +77,7 @@ typedef struct { const IOleClientSiteVtbl *lpOleClientSiteVtbl; const IOleInPlaceSiteVtbl *lpOleInPlaceSiteVtbl; const IDocHostUIHandler2Vtbl *lpDocHostUIHandlerVtbl; + const IOleDocumentSiteVtbl *lpOleDocumentSiteVtbl;
/* Interfaces of InPlaceFrame object */
@@ -88,6 +89,7 @@ typedef struct {
IOleClientSite *client; IOleContainer *container; + IOleDocumentView *view;
/* window context */
@@ -126,6 +128,7 @@ typedef struct { #define INPLACESITE(x) ((IOleInPlaceSite*) &(x)->lpOleInPlaceSiteVtbl) #define DOCHOSTUI(x) ((IDocHostUIHandler*) &(x)->lpDocHostUIHandlerVtbl) #define DOCHOSTUI2(x) ((IDocHostUIHandler2*) &(x)->lpDocHostUIHandlerVtbl) +#define DOCSITE(x) ((IOleDocumentSite*) &(x)->lpOleDocumentSiteVtbl)
#define INPLACEFRAME(x) ((IOleInPlaceFrame*) &(x)->lpOleInPlaceFrameVtbl)
@@ -143,6 +146,7 @@ void WebBrowser_Frame_Init(WebBrowser*);
void WebBrowser_OleObject_Destroy(WebBrowser*); void WebBrowser_Events_Destroy(WebBrowser*); +void WebBrowser_ClientSite_Destroy(WebBrowser*);
HRESULT WebBrowser_Create(IUnknown*,REFIID,void**);
Index: wine/dlls/shdocvw/webbrowser.c diff -u -p wine/dlls/shdocvw/webbrowser.c:1.28 wine/dlls/shdocvw/webbrowser.c:1.29 --- wine/dlls/shdocvw/webbrowser.c:1.28 28 Nov 2005 11: 5:19 -0000 +++ wine/dlls/shdocvw/webbrowser.c 28 Nov 2005 11: 5:19 -0000 @@ -126,6 +126,7 @@ static ULONG WINAPI WebBrowser_Release(I
WebBrowser_OleObject_Destroy(This); WebBrowser_Events_Destroy(This); + WebBrowser_ClientSite_Destroy(This);
HeapFree(GetProcessHeap(), 0, This); SHDOCVW_UnlockModule();