Jacek Caban : shdocvw: Added client site's IOleCommandTarget stub implementation.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Jan 26 06:44:28 CST 2006


Module: wine
Branch: refs/heads/master
Commit: 254bdf08f147720d8d5305423652b7cf5f7d7624
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=254bdf08f147720d8d5305423652b7cf5f7d7624

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Jan 26 13:28:43 2006 +0100

shdocvw: Added client site's IOleCommandTarget stub implementation.

---

 dlls/shdocvw/client.c  |    3 +++
 dlls/shdocvw/dochost.c |   53 +++++++++++++++++++++++++++++++++++++++++++++++-
 dlls/shdocvw/shdocvw.h |    2 ++
 3 files changed, 57 insertions(+), 1 deletions(-)

diff --git a/dlls/shdocvw/client.c b/dlls/shdocvw/client.c
index 842c184..5e989d4 100644
--- a/dlls/shdocvw/client.c
+++ b/dlls/shdocvw/client.c
@@ -50,6 +50,9 @@ static HRESULT WINAPI ClientSite_QueryIn
     }else if(IsEqualGUID(&IID_IOleDocumentSite, riid)) {
         TRACE("(%p)->(IID_IOleDocumentSite %p)\n", This, ppv);
         *ppv = DOCSITE(This);
+    }else if(IsEqualGUID(&IID_IOleClientSite, riid)) {
+        TRACE("(%p)->(IID_IOleClientSite %p)\n", This, ppv);
+        *ppv = CLOLECMD(This);
     }
 
     if(*ppv) {
diff --git a/dlls/shdocvw/dochost.c b/dlls/shdocvw/dochost.c
index 2a4a81d..ffe1fda 100644
--- a/dlls/shdocvw/dochost.c
+++ b/dlls/shdocvw/dochost.c
@@ -206,6 +206,56 @@ void deactivate_document(WebBrowser *Thi
     This->document = NULL;
 }
 
+#define OLECMD_THIS(iface) DEFINE_THIS(WebBrowser, ClOleCommandTarget, iface)
+
+static HRESULT WINAPI ClOleCommandTarget_QueryInterface(IOleCommandTarget *iface,
+        REFIID riid, void **ppv)
+{
+    WebBrowser *This = OLECMD_THIS(iface);
+    return IOleClientSite_QueryInterface(CLIENTSITE(This), riid, ppv);
+}
+
+static ULONG WINAPI ClOleCommandTarget_AddRef(IOleCommandTarget *iface)
+{
+    WebBrowser *This = OLECMD_THIS(iface);
+    return IWebBrowser2_AddRef(WEBBROWSER(This));
+}
+
+static ULONG WINAPI ClOleCommandTarget_Release(IOleCommandTarget *iface)
+{
+    WebBrowser *This = OLECMD_THIS(iface);
+    return IWebBrowser2_Release(WEBBROWSER(This));
+}
+
+static HRESULT WINAPI ClOleCommandTarget_QueryStatus(IOleCommandTarget *iface,
+        const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
+{
+    WebBrowser *This = OLECMD_THIS(iface);
+    FIXME("(%p)->(%s %lu %p %p)\n", This, debugstr_guid(pguidCmdGroup), cCmds, prgCmds,
+          pCmdText);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ClOleCommandTarget_Exec(IOleCommandTarget *iface,
+        const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn,
+        VARIANT *pvaOut)
+{
+    WebBrowser *This = OLECMD_THIS(iface);
+    FIXME("(%p)->(%s %ld %ld %p %p)\n", This, debugstr_guid(pguidCmdGroup), nCmdID,
+          nCmdexecopt, pvaIn, pvaOut);
+    return E_NOTIMPL;
+}
+
+#undef OLECMD_THIS
+
+static const IOleCommandTargetVtbl OleCommandTargetVtbl = {
+    ClOleCommandTarget_QueryInterface,
+    ClOleCommandTarget_AddRef,
+    ClOleCommandTarget_Release,
+    ClOleCommandTarget_QueryStatus,
+    ClOleCommandTarget_Exec
+};
+
 #define DOCHOSTUI_THIS(iface) DEFINE_THIS(WebBrowser, DocHostUIHandler, iface)
 
 static HRESULT WINAPI DocHostUIHandler_QueryInterface(IDocHostUIHandler2 *iface,
@@ -419,7 +469,8 @@ static const IDocHostUIHandler2Vtbl DocH
 
 void WebBrowser_DocHost_Init(WebBrowser *This)
 {
-    This->lpDocHostUIHandlerVtbl = &DocHostUIHandler2Vtbl;
+    This->lpDocHostUIHandlerVtbl   = &DocHostUIHandler2Vtbl;
+    This->lpClOleCommandTargetVtbl = &OleCommandTargetVtbl;
 
     This->hostui = NULL;
 
diff --git a/dlls/shdocvw/shdocvw.h b/dlls/shdocvw/shdocvw.h
index 1aa8480..9b777fc 100644
--- a/dlls/shdocvw/shdocvw.h
+++ b/dlls/shdocvw/shdocvw.h
@@ -83,6 +83,7 @@ typedef struct {
     const IOleInPlaceSiteVtbl           *lpOleInPlaceSiteVtbl;
     const IDocHostUIHandler2Vtbl        *lpDocHostUIHandlerVtbl;
     const IOleDocumentSiteVtbl          *lpOleDocumentSiteVtbl;
+    const IOleCommandTargetVtbl         *lpClOleCommandTargetVtbl;
 
     /* Interfaces of InPlaceFrame object */
 
@@ -138,6 +139,7 @@ typedef struct {
 #define DOCHOSTUI(x)    ((IDocHostUIHandler*)           &(x)->lpDocHostUIHandlerVtbl)
 #define DOCHOSTUI2(x)   ((IDocHostUIHandler2*)          &(x)->lpDocHostUIHandlerVtbl)
 #define DOCSITE(x)      ((IOleDocumentSite*)            &(x)->lpOleDocumentSiteVtbl)
+#define CLOLECMD(x)     ((IOleCommandTarget*)           &(x)->lpClOleCommandTargetVtbl)
 
 #define INPLACEFRAME(x) ((IOleInPlaceFrame*)            &(x)->lpOleInPlaceFrameVtbl)
 




More information about the wine-cvs mailing list