shdocvw: Move IConnectionPointContainer implementation to separated object.
This commit is contained in:
parent
7c7603ca1e
commit
0b613f291f
|
@ -494,13 +494,15 @@ void DocHost_Init(DocHost *This, IDispatch *disp)
|
|||
|
||||
DocHost_ClientSite_Init(This);
|
||||
DocHost_Frame_Init(This);
|
||||
DocHost_Events_Init(This);
|
||||
|
||||
ConnectionPointContainer_Init(&This->cps, (IUnknown*)disp);
|
||||
}
|
||||
|
||||
void DocHost_Release(DocHost *This)
|
||||
{
|
||||
DocHost_ClientSite_Release(This);
|
||||
DocHost_Events_Release(This);
|
||||
|
||||
ConnectionPointContainer_Destroy(&This->cps);
|
||||
|
||||
SysFreeString(This->url);
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
* - IConnectionPoint
|
||||
*
|
||||
* Copyright 2001 John R. Sheets (for CodeWeavers)
|
||||
* Copyright 2006 Jacek Caban for CodeWeavers
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -30,7 +31,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
|
|||
struct ConnectionPoint {
|
||||
const IConnectionPointVtbl *lpConnectionPointVtbl;
|
||||
|
||||
DocHost *doc_host;
|
||||
IConnectionPointContainer *container;
|
||||
|
||||
IDispatch **sinks;
|
||||
|
@ -45,31 +45,31 @@ struct ConnectionPoint {
|
|||
* Implement the IConnectionPointContainer interface
|
||||
*/
|
||||
|
||||
#define CONPTCONT_THIS(iface) DEFINE_THIS(WebBrowser, ConnectionPointContainer, iface)
|
||||
#define CONPTCONT_THIS(iface) DEFINE_THIS(ConnectionPointContainer, ConnectionPointContainer, iface)
|
||||
|
||||
static HRESULT WINAPI ConnectionPointContainer_QueryInterface(IConnectionPointContainer *iface,
|
||||
REFIID riid, LPVOID *ppobj)
|
||||
REFIID riid, LPVOID *ppv)
|
||||
{
|
||||
WebBrowser *This = CONPTCONT_THIS(iface);
|
||||
return IWebBrowser_QueryInterface(WEBBROWSER(This), riid, ppobj);
|
||||
ConnectionPointContainer *This = CONPTCONT_THIS(iface);
|
||||
return IUnknown_QueryInterface(This->impl, riid, ppv);
|
||||
}
|
||||
|
||||
static ULONG WINAPI ConnectionPointContainer_AddRef(IConnectionPointContainer *iface)
|
||||
{
|
||||
WebBrowser *This = CONPTCONT_THIS(iface);
|
||||
return IWebBrowser_AddRef(WEBBROWSER(This));
|
||||
ConnectionPointContainer *This = CONPTCONT_THIS(iface);
|
||||
return IUnknown_AddRef(This->impl);
|
||||
}
|
||||
|
||||
static ULONG WINAPI ConnectionPointContainer_Release(IConnectionPointContainer *iface)
|
||||
{
|
||||
WebBrowser *This = CONPTCONT_THIS(iface);
|
||||
return IWebBrowser_Release(WEBBROWSER(This));
|
||||
ConnectionPointContainer *This = CONPTCONT_THIS(iface);
|
||||
return IUnknown_Release(This->impl);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ConnectionPointContainer_EnumConnectionPoints(IConnectionPointContainer *iface,
|
||||
LPENUMCONNECTIONPOINTS *ppEnum)
|
||||
{
|
||||
WebBrowser *This = CONPTCONT_THIS(iface);
|
||||
ConnectionPointContainer *This = CONPTCONT_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, ppEnum);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
@ -77,7 +77,7 @@ static HRESULT WINAPI ConnectionPointContainer_EnumConnectionPoints(IConnectionP
|
|||
static HRESULT WINAPI ConnectionPointContainer_FindConnectionPoint(IConnectionPointContainer *iface,
|
||||
REFIID riid, LPCONNECTIONPOINT *ppCP)
|
||||
{
|
||||
WebBrowser *This = CONPTCONT_THIS(iface);
|
||||
ConnectionPointContainer *This = CONPTCONT_THIS(iface);
|
||||
|
||||
if(!ppCP) {
|
||||
WARN("ppCP == NULL\n");
|
||||
|
@ -88,13 +88,13 @@ static HRESULT WINAPI ConnectionPointContainer_FindConnectionPoint(IConnectionPo
|
|||
|
||||
if(IsEqualGUID(&DIID_DWebBrowserEvents2, riid)) {
|
||||
TRACE("(%p)->(DIID_DWebBrowserEvents2 %p)\n", This, ppCP);
|
||||
*ppCP = CONPOINT(This->doc_host.cps.wbe2);
|
||||
*ppCP = CONPOINT(This->wbe2);
|
||||
}else if(IsEqualGUID(&DIID_DWebBrowserEvents, riid)) {
|
||||
TRACE("(%p)->(DIID_DWebBrowserEvents %p)\n", This, ppCP);
|
||||
*ppCP = CONPOINT(This->doc_host.cps.wbe);
|
||||
*ppCP = CONPOINT(This->wbe);
|
||||
}else if(IsEqualGUID(&IID_IPropertyNotifySink, riid)) {
|
||||
TRACE("(%p)->(IID_IPropertyNotifySink %p)\n", This, ppCP);
|
||||
*ppCP = CONPOINT(This->doc_host.cps.pns);
|
||||
*ppCP = CONPOINT(This->pns);
|
||||
}
|
||||
|
||||
if(*ppCP) {
|
||||
|
@ -140,7 +140,7 @@ static HRESULT WINAPI ConnectionPoint_QueryInterface(IConnectionPoint *iface,
|
|||
}
|
||||
|
||||
if(*ppv) {
|
||||
IOleClientSite_AddRef(CLIENTSITE(This->doc_host));
|
||||
IConnectionPointContainer_AddRef(This->container);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
@ -151,13 +151,13 @@ static HRESULT WINAPI ConnectionPoint_QueryInterface(IConnectionPoint *iface,
|
|||
static ULONG WINAPI ConnectionPoint_AddRef(IConnectionPoint *iface)
|
||||
{
|
||||
ConnectionPoint *This = CONPOINT_THIS(iface);
|
||||
return IOleClientSite_AddRef(CLIENTSITE(This->doc_host));
|
||||
return IConnectionPointContainer_AddRef(This->container);
|
||||
}
|
||||
|
||||
static ULONG WINAPI ConnectionPoint_Release(IConnectionPoint *iface)
|
||||
{
|
||||
ConnectionPoint *This = CONPOINT_THIS(iface);
|
||||
return IOleClientSite_Release(CLIENTSITE(This->doc_host));
|
||||
return IConnectionPointContainer_Release(This->container);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ConnectionPoint_GetConnectionInterface(IConnectionPoint *iface, IID *pIID)
|
||||
|
@ -268,16 +268,16 @@ void call_sink(ConnectionPoint *This, DISPID dispid, DISPPARAMS *dispparams)
|
|||
}
|
||||
}
|
||||
|
||||
static void ConnectionPoint_Create(DocHost *doc_host, REFIID riid, ConnectionPoint **cp)
|
||||
static void ConnectionPoint_Create(REFIID riid, ConnectionPoint **cp,
|
||||
IConnectionPointContainer *container)
|
||||
{
|
||||
ConnectionPoint *ret = shdocvw_alloc(sizeof(ConnectionPoint));
|
||||
|
||||
ret->lpConnectionPointVtbl = &ConnectionPointVtbl;
|
||||
|
||||
ret->doc_host = doc_host;
|
||||
ret->sinks = NULL;
|
||||
ret->sinks_size = 0;
|
||||
ret->container = NULL;
|
||||
ret->container = container;
|
||||
|
||||
memcpy(&ret->iid, riid, sizeof(IID));
|
||||
|
||||
|
@ -297,25 +297,20 @@ static void ConnectionPoint_Destroy(ConnectionPoint *This)
|
|||
shdocvw_free(This);
|
||||
}
|
||||
|
||||
void DocHost_Events_Init(DocHost *This)
|
||||
{
|
||||
ConnectionPoint_Create(This, &DIID_DWebBrowserEvents2, &This->cps.wbe2);
|
||||
ConnectionPoint_Create(This, &DIID_DWebBrowserEvents, &This->cps.wbe);
|
||||
ConnectionPoint_Create(This, &IID_IPropertyNotifySink, &This->cps.pns);
|
||||
}
|
||||
|
||||
void DocHost_Events_Release(DocHost *This)
|
||||
{
|
||||
ConnectionPoint_Destroy(This->cps.wbe2);
|
||||
ConnectionPoint_Destroy(This->cps.wbe);
|
||||
ConnectionPoint_Destroy(This->cps.pns);
|
||||
}
|
||||
|
||||
void WebBrowser_Events_Init(WebBrowser *This)
|
||||
void ConnectionPointContainer_Init(ConnectionPointContainer *This, IUnknown *impl)
|
||||
{
|
||||
This->lpConnectionPointContainerVtbl = &ConnectionPointContainerVtbl;
|
||||
|
||||
This->doc_host.cps.wbe2->container = CONPTCONT(This);
|
||||
This->doc_host.cps.wbe->container = CONPTCONT(This);
|
||||
This->doc_host.cps.pns->container = CONPTCONT(This);
|
||||
ConnectionPoint_Create(&DIID_DWebBrowserEvents2, &This->wbe2, CONPTCONT(This));
|
||||
ConnectionPoint_Create(&DIID_DWebBrowserEvents, &This->wbe, CONPTCONT(This));
|
||||
ConnectionPoint_Create(&IID_IPropertyNotifySink, &This->pns, CONPTCONT(This));
|
||||
|
||||
This->impl = impl;
|
||||
}
|
||||
|
||||
void ConnectionPointContainer_Destroy(ConnectionPointContainer *This)
|
||||
{
|
||||
ConnectionPoint_Destroy(This->wbe2);
|
||||
ConnectionPoint_Destroy(This->wbe);
|
||||
ConnectionPoint_Destroy(This->pns);
|
||||
}
|
||||
|
|
|
@ -52,9 +52,13 @@ extern HRESULT SHDOCVW_GetShellInstanceObjectClassObject(REFCLSID rclsid,
|
|||
typedef struct ConnectionPoint ConnectionPoint;
|
||||
|
||||
typedef struct {
|
||||
const IConnectionPointContainerVtbl *lpConnectionPointContainerVtbl;
|
||||
|
||||
ConnectionPoint *wbe2;
|
||||
ConnectionPoint *wbe;
|
||||
ConnectionPoint *pns;
|
||||
|
||||
IUnknown *impl;
|
||||
} ConnectionPointContainer;
|
||||
|
||||
typedef struct {
|
||||
|
@ -93,7 +97,6 @@ typedef struct {
|
|||
const IPersistStorageVtbl *lpPersistStorageVtbl;
|
||||
const IPersistStreamInitVtbl *lpPersistStreamInitVtbl;
|
||||
const IProvideClassInfo2Vtbl *lpProvideClassInfoVtbl;
|
||||
const IConnectionPointContainerVtbl *lpConnectionPointContainerVtbl;
|
||||
const IViewObject2Vtbl *lpViewObjectVtbl;
|
||||
const IOleInPlaceActiveObjectVtbl *lpOleInPlaceActiveObjectVtbl;
|
||||
const IOleCommandTargetVtbl *lpWBOleCommandTargetVtbl;
|
||||
|
@ -166,19 +169,19 @@ void WebBrowser_OleObject_Init(WebBrowser*);
|
|||
void WebBrowser_ViewObject_Init(WebBrowser*);
|
||||
void WebBrowser_Persist_Init(WebBrowser*);
|
||||
void WebBrowser_ClassInfo_Init(WebBrowser*);
|
||||
void WebBrowser_Events_Init(WebBrowser*);
|
||||
void WebBrowser_HlinkFrame_Init(WebBrowser*);
|
||||
|
||||
void WebBrowser_OleObject_Destroy(WebBrowser*);
|
||||
|
||||
void DocHost_Init(DocHost*,IDispatch*);
|
||||
void DocHost_ClientSite_Init(DocHost*);
|
||||
void DocHost_Events_Init(DocHost*);
|
||||
void DocHost_Frame_Init(DocHost*);
|
||||
|
||||
void DocHost_Release(DocHost*);
|
||||
void DocHost_ClientSite_Release(DocHost*);
|
||||
void DocHost_Events_Release(DocHost*);
|
||||
|
||||
void ConnectionPointContainer_Init(ConnectionPointContainer*,IUnknown*);
|
||||
void ConnectionPointContainer_Destroy(ConnectionPointContainer*);
|
||||
|
||||
HRESULT WebBrowser_Create(IUnknown*,REFIID,void**);
|
||||
|
||||
|
|
|
@ -83,7 +83,7 @@ static HRESULT WINAPI WebBrowser_QueryInterface(IWebBrowser2 *iface, REFIID riid
|
|||
*ppv = CLASSINFO(This);
|
||||
}else if(IsEqualGUID(&IID_IConnectionPointContainer, riid)) {
|
||||
TRACE("(%p)->(IID_IConnectionPointContainer %p)\n", This, ppv);
|
||||
*ppv = CONPTCONT(This);
|
||||
*ppv = CONPTCONT(&This->doc_host.cps);
|
||||
}else if(IsEqualGUID(&IID_IViewObject, riid)) {
|
||||
TRACE("(%p)->(IID_IViewObject %p)\n", This, ppv);
|
||||
*ppv = VIEWOBJ(This);
|
||||
|
@ -942,7 +942,6 @@ HRESULT WebBrowser_Create(IUnknown *pOuter, REFIID riid, void **ppv)
|
|||
WebBrowser_ViewObject_Init(ret);
|
||||
WebBrowser_Persist_Init(ret);
|
||||
WebBrowser_ClassInfo_Init(ret);
|
||||
WebBrowser_Events_Init(ret);
|
||||
WebBrowser_HlinkFrame_Init(ret);
|
||||
|
||||
hres = IWebBrowser_QueryInterface(WEBBROWSER(ret), riid, ppv);
|
||||
|
|
Loading…
Reference in New Issue