wine/dlls/shdocvw client.c shdocvw.h webbrowser.c

Alexandre Julliard julliard at wine.codeweavers.com
Mon Nov 28 05:05:19 CST 2005


ChangeSet ID:	21483
CVSROOT:	/opt/cvs-commit
Module name:	wine
Changes by:	julliard at winehq.org	2005/11/28 05:05:19

Modified files:
	dlls/shdocvw   : client.c shdocvw.h webbrowser.c 

Log message:
	Jacek Caban <jacek at 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();



More information about the wine-cvs mailing list