Module: wine Branch: refs/heads/master Commit: 0e1ef8ac2ef68faee2d35ff8a4e3dc6dbd054899 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=0e1ef8ac2ef68faee2d35ff8...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Jan 26 13:30:04 2006 +0100
shdocvw: Added client site's IDispatch stub implementation.
---
dlls/shdocvw/client.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++ dlls/shdocvw/shdocvw.h | 2 + 2 files changed, 72 insertions(+), 0 deletions(-)
diff --git a/dlls/shdocvw/client.c b/dlls/shdocvw/client.c index 5e989d4..45b2b98 100644 --- a/dlls/shdocvw/client.c +++ b/dlls/shdocvw/client.c @@ -53,6 +53,9 @@ static HRESULT WINAPI ClientSite_QueryIn }else if(IsEqualGUID(&IID_IOleClientSite, riid)) { TRACE("(%p)->(IID_IOleClientSite %p)\n", This, ppv); *ppv = CLOLECMD(This); + }else if(IsEqualGUID(&IID_IDispatch, riid)) { + TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv); + *ppv = CLDISP(This); }
if(*ppv) { @@ -341,11 +344,78 @@ static const IOleDocumentSiteVtbl OleDoc OleDocumentSite_ActivateMe };
+#define DISP_THIS(iface) DEFINE_THIS(WebBrowser, Dispatch, iface) + +static HRESULT WINAPI ClDispatch_QueryInterface(IDispatch *iface, REFIID riid, void **ppv) +{ + WebBrowser *This = DISP_THIS(iface); + return IOleClientSite_QueryInterface(CLIENTSITE(This), riid, ppv); +} + +static ULONG WINAPI ClDispatch_AddRef(IDispatch *iface) +{ + WebBrowser *This = DISP_THIS(iface); + return IWebBrowser2_AddRef(WEBBROWSER(This)); +} + +static ULONG WINAPI ClDispatch_Release(IDispatch *iface) +{ + WebBrowser *This = DISP_THIS(iface); + return IWebBrowser2_Release(WEBBROWSER(This)); +} + +static HRESULT WINAPI ClDispatch_GetTypeInfoCount(IDispatch *iface, UINT *pctinfo) +{ + WebBrowser *This = DISP_THIS(iface); + FIXME("(%p)->(%p)\n", This, pctinfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI ClDispatch_GetTypeInfo(IDispatch *iface, UINT iTInfo, LCID lcid, + ITypeInfo **ppTInfo) +{ + WebBrowser *This = DISP_THIS(iface); + FIXME("(%p)->(%u %ld %p)\n", This, iTInfo, lcid, ppTInfo); + return E_NOTIMPL; +} + +static HRESULT WINAPI ClDispatch_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *rgszNames, + UINT cNames, LCID lcid, DISPID *rgDispId) +{ + WebBrowser *This = DISP_THIS(iface); + FIXME("(%p)->(%s %p %u %ld %p)\n", This, debugstr_guid(riid), rgszNames, cNames, + lcid, rgDispId); + return E_NOTIMPL; +} + +static HRESULT WINAPI ClDispatch_Invoke(IDispatch *iface, DISPID dispIdMember, REFIID riid, + LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, + VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) +{ + WebBrowser *This = DISP_THIS(iface); + FIXME("(%p)->(%ld %s %ld %04x %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid), + lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); + return E_NOTIMPL; +} + +#undef DISP_THIS + +static const IDispatchVtbl DispatchVtbl = { + ClDispatch_QueryInterface, + ClDispatch_AddRef, + ClDispatch_Release, + ClDispatch_GetTypeInfoCount, + ClDispatch_GetTypeInfo, + ClDispatch_GetIDsOfNames, + ClDispatch_Invoke +}; + void WebBrowser_ClientSite_Init(WebBrowser *This) { This->lpOleClientSiteVtbl = &OleClientSiteVtbl; This->lpOleInPlaceSiteVtbl = &OleInPlaceSiteVtbl; This->lpOleDocumentSiteVtbl = &OleDocumentSiteVtbl; + This->lpDispatchVtbl = &DispatchVtbl;
This->view = NULL; } diff --git a/dlls/shdocvw/shdocvw.h b/dlls/shdocvw/shdocvw.h index 6679a02..ba10279 100644 --- a/dlls/shdocvw/shdocvw.h +++ b/dlls/shdocvw/shdocvw.h @@ -85,6 +85,7 @@ typedef struct { const IDocHostUIHandler2Vtbl *lpDocHostUIHandlerVtbl; const IOleDocumentSiteVtbl *lpOleDocumentSiteVtbl; const IOleCommandTargetVtbl *lpClOleCommandTargetVtbl; + const IDispatchVtbl *lpDispatchVtbl;
/* Interfaces of InPlaceFrame object */
@@ -142,6 +143,7 @@ typedef struct { #define DOCHOSTUI2(x) ((IDocHostUIHandler2*) &(x)->lpDocHostUIHandlerVtbl) #define DOCSITE(x) ((IOleDocumentSite*) &(x)->lpOleDocumentSiteVtbl) #define CLOLECMD(x) ((IOleCommandTarget*) &(x)->lpClOleCommandTargetVtbl) +#define CLDISP(x) ((IDispatch*) &(x)->lpDispatchVtbl)
#define INPLACEFRAME(x) ((IOleInPlaceFrame*) &(x)->lpOleInPlaceFrameVtbl)