Module: wine Branch: refs/heads/master Commit: ad5d88c67a7999ef380e48e5ea1011217e192a0a URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=ad5d88c67a7999ef380e48e5...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Feb 15 11:53:31 2006 +0100
shdocvw: Added client site's IServiceProvider interface.
---
dlls/shdocvw/client.c | 65 ++++++++++++++++++++++++++++++++++++++++++------ dlls/shdocvw/shdocvw.h | 2 + 2 files changed, 59 insertions(+), 8 deletions(-)
diff --git a/dlls/shdocvw/client.c b/dlls/shdocvw/client.c index 45b2b98..981132a 100644 --- a/dlls/shdocvw/client.c +++ b/dlls/shdocvw/client.c @@ -56,6 +56,9 @@ static HRESULT WINAPI ClientSite_QueryIn }else if(IsEqualGUID(&IID_IDispatch, riid)) { TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv); *ppv = CLDISP(This); + }else if(IsEqualGUID(&IID_IServiceProvider, riid)) { + TRACE("(%p)->(IID_IServiceProvider %p)\n", This, ppv); + *ppv = CLSERVPROV(This); }
if(*ppv) { @@ -372,7 +375,7 @@ static HRESULT WINAPI ClDispatch_GetType }
static HRESULT WINAPI ClDispatch_GetTypeInfo(IDispatch *iface, UINT iTInfo, LCID lcid, - ITypeInfo **ppTInfo) + ITypeInfo **ppTInfo) { WebBrowser *This = DISP_THIS(iface); FIXME("(%p)->(%u %ld %p)\n", This, iTInfo, lcid, ppTInfo); @@ -380,7 +383,7 @@ static HRESULT WINAPI ClDispatch_GetType }
static HRESULT WINAPI ClDispatch_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *rgszNames, - UINT cNames, LCID lcid, DISPID *rgDispId) + 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, @@ -389,8 +392,8 @@ static HRESULT WINAPI ClDispatch_GetIDsO }
static HRESULT WINAPI ClDispatch_Invoke(IDispatch *iface, DISPID dispIdMember, REFIID riid, - LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, - VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) + 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), @@ -410,12 +413,58 @@ static const IDispatchVtbl DispatchVtbl ClDispatch_Invoke };
+#define SERVPROV_THIS(iface) DEFINE_THIS(WebBrowser, ClServiceProvider, iface) + +static HRESULT WINAPI ClServiceProvider_QueryInterface(IServiceProvider *iface, REFIID riid, + void **ppv) +{ + WebBrowser *This = SERVPROV_THIS(iface); + return IOleClientSite_QueryInterface(CLIENTSITE(This), riid, ppv); +} + +static ULONG WINAPI ClServiceProvider_AddRef(IServiceProvider *iface) +{ + WebBrowser *This = SERVPROV_THIS(iface); + return IWebBrowser2_AddRef(WEBBROWSER2(This)); +} + +static ULONG WINAPI ClServiceProvider_Release(IServiceProvider *iface) +{ + WebBrowser *This = SERVPROV_THIS(iface); + return IWebBrowser2_Release(WEBBROWSER2(This)); +} + +static HRESULT WINAPI ClServiceProvider_QueryService(IServiceProvider *iface, REFGUID guidService, + REFIID riid, void **ppv) +{ + WebBrowser *This = SERVPROV_THIS(iface); + + if(IsEqualGUID(&IID_IHlinkFrame, guidService)) { + TRACE("(%p)->(IID_IHlinkFrame %s %p)\n", This, debugstr_guid(riid), ppv); + return IWebBrowser2_QueryInterface(WEBBROWSER(This), riid, ppv); + } + + FIXME("(%p)->(%s %s %p)\n", This, debugstr_guid(guidService), debugstr_guid(riid), ppv); + + return E_NOINTERFACE; +} + +#undef SERVPROV_THIS + +static const IServiceProviderVtbl ServiceProviderVtbl = { + ClServiceProvider_QueryInterface, + ClServiceProvider_AddRef, + ClServiceProvider_Release, + ClServiceProvider_QueryService +}; + void WebBrowser_ClientSite_Init(WebBrowser *This) { - This->lpOleClientSiteVtbl = &OleClientSiteVtbl; - This->lpOleInPlaceSiteVtbl = &OleInPlaceSiteVtbl; - This->lpOleDocumentSiteVtbl = &OleDocumentSiteVtbl; - This->lpDispatchVtbl = &DispatchVtbl; + This->lpOleClientSiteVtbl = &OleClientSiteVtbl; + This->lpOleInPlaceSiteVtbl = &OleInPlaceSiteVtbl; + This->lpOleDocumentSiteVtbl = &OleDocumentSiteVtbl; + This->lpDispatchVtbl = &DispatchVtbl; + This->lpClServiceProviderVtbl = &ServiceProviderVtbl;
This->view = NULL; } diff --git a/dlls/shdocvw/shdocvw.h b/dlls/shdocvw/shdocvw.h index 03ba7c2..470d170 100644 --- a/dlls/shdocvw/shdocvw.h +++ b/dlls/shdocvw/shdocvw.h @@ -87,6 +87,7 @@ typedef struct { const IOleDocumentSiteVtbl *lpOleDocumentSiteVtbl; const IOleCommandTargetVtbl *lpClOleCommandTargetVtbl; const IDispatchVtbl *lpDispatchVtbl; + const IServiceProviderVtbl *lpClServiceProviderVtbl;
/* Interfaces of InPlaceFrame object */
@@ -145,6 +146,7 @@ typedef struct { #define DOCSITE(x) ((IOleDocumentSite*) &(x)->lpOleDocumentSiteVtbl) #define CLOLECMD(x) ((IOleCommandTarget*) &(x)->lpClOleCommandTargetVtbl) #define CLDISP(x) ((IDispatch*) &(x)->lpDispatchVtbl) +#define CLSERVPROV(x) ((IServiceProvider*) &(x)->lpClServiceProviderVtbl)
#define INPLACEFRAME(x) ((IOleInPlaceFrame*) &(x)->lpOleInPlaceFrameVtbl)