2001-01-11 23:32:44 +01:00
|
|
|
/*
|
2005-09-12 12:10:04 +02:00
|
|
|
* Implementation of event-related interfaces for WebBrowser control:
|
2002-05-05 21:40:57 +02:00
|
|
|
*
|
|
|
|
* - IConnectionPointContainer
|
|
|
|
* - IConnectionPoint
|
2001-01-11 23:32:44 +01:00
|
|
|
*
|
2002-03-10 00:29:33 +01:00
|
|
|
* Copyright 2001 John R. Sheets (for CodeWeavers)
|
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
2001-01-11 23:32:44 +01:00
|
|
|
*/
|
|
|
|
|
2001-01-26 21:43:40 +01:00
|
|
|
#include <string.h>
|
2002-03-20 02:02:15 +01:00
|
|
|
#include "wine/debug.h"
|
2002-05-05 21:40:57 +02:00
|
|
|
#include "shdocvw.h"
|
|
|
|
|
2002-03-10 00:29:33 +01:00
|
|
|
WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
|
2001-01-11 23:32:44 +01:00
|
|
|
|
2005-06-12 12:42:03 +02:00
|
|
|
static IConnectionPointImpl SHDOCVW_ConnectionPoint;
|
2001-01-11 23:32:44 +01:00
|
|
|
|
2003-09-09 21:39:31 +02:00
|
|
|
static const GUID IID_INotifyDBEvents =
|
|
|
|
{ 0xdb526cc0, 0xd188, 0x11cd, { 0xad, 0x48, 0x00, 0xaa, 0x00, 0x3c, 0x9c, 0xb6 } };
|
|
|
|
|
2002-05-05 21:40:57 +02:00
|
|
|
/**********************************************************************
|
|
|
|
* Implement the IConnectionPointContainer interface
|
|
|
|
*/
|
2001-01-11 23:32:44 +01:00
|
|
|
|
2005-09-12 12:10:04 +02:00
|
|
|
#define CONPTCONT_THIS(iface) DEFINE_THIS(WebBrowser, ConnectionPointContainer, iface)
|
2002-05-05 21:40:57 +02:00
|
|
|
|
2005-09-12 12:10:04 +02:00
|
|
|
static HRESULT WINAPI ConnectionPointContainer_QueryInterface(IConnectionPointContainer *iface,
|
|
|
|
REFIID riid, LPVOID *ppobj)
|
|
|
|
{
|
|
|
|
WebBrowser *This = CONPTCONT_THIS(iface);
|
|
|
|
return IWebBrowser_QueryInterface(WEBBROWSER(This), riid, ppobj);
|
2002-05-05 21:40:57 +02:00
|
|
|
}
|
2001-01-11 23:32:44 +01:00
|
|
|
|
2005-09-12 12:10:04 +02:00
|
|
|
static ULONG WINAPI ConnectionPointContainer_AddRef(IConnectionPointContainer *iface)
|
2002-05-05 21:40:57 +02:00
|
|
|
{
|
2005-09-12 12:10:04 +02:00
|
|
|
WebBrowser *This = CONPTCONT_THIS(iface);
|
|
|
|
return IWebBrowser_AddRef(WEBBROWSER(This));
|
2002-05-05 21:40:57 +02:00
|
|
|
}
|
2001-01-11 23:32:44 +01:00
|
|
|
|
2005-09-12 12:10:04 +02:00
|
|
|
static ULONG WINAPI ConnectionPointContainer_Release(IConnectionPointContainer *iface)
|
2002-05-05 21:40:57 +02:00
|
|
|
{
|
2005-09-12 12:10:04 +02:00
|
|
|
WebBrowser *This = CONPTCONT_THIS(iface);
|
|
|
|
return IWebBrowser_Release(WEBBROWSER(This));
|
2002-05-05 21:40:57 +02:00
|
|
|
}
|
2001-01-11 23:32:44 +01:00
|
|
|
|
2005-09-12 12:10:04 +02:00
|
|
|
static HRESULT WINAPI ConnectionPointContainer_EnumConnectionPoints(IConnectionPointContainer *iface,
|
|
|
|
LPENUMCONNECTIONPOINTS *ppEnum)
|
2001-01-11 23:32:44 +01:00
|
|
|
{
|
2005-09-12 12:10:04 +02:00
|
|
|
WebBrowser *This = CONPTCONT_THIS(iface);
|
|
|
|
FIXME("(%p)->(%p)\n", This, ppEnum);
|
|
|
|
return E_NOTIMPL;
|
2002-05-05 21:40:57 +02:00
|
|
|
}
|
2001-01-11 23:32:44 +01:00
|
|
|
|
2005-09-12 12:10:04 +02:00
|
|
|
static HRESULT WINAPI ConnectionPointContainer_FindConnectionPoint(IConnectionPointContainer *iface,
|
|
|
|
REFIID riid, LPCONNECTIONPOINT *ppCP)
|
2002-05-05 21:40:57 +02:00
|
|
|
{
|
2005-09-12 12:10:04 +02:00
|
|
|
WebBrowser *This = CONPTCONT_THIS(iface);
|
|
|
|
|
|
|
|
FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppCP);
|
2002-05-05 21:40:57 +02:00
|
|
|
|
|
|
|
/* For now, return the same IConnectionPoint object for both
|
|
|
|
* event interface requests.
|
|
|
|
*/
|
|
|
|
if (IsEqualGUID (&IID_INotifyDBEvents, riid))
|
|
|
|
{
|
|
|
|
TRACE("Returning connection point %p for IID_INotifyDBEvents\n",
|
|
|
|
&SHDOCVW_ConnectionPoint);
|
|
|
|
*ppCP = (LPCONNECTIONPOINT)&SHDOCVW_ConnectionPoint;
|
|
|
|
return S_OK;
|
|
|
|
}
|
|
|
|
else if (IsEqualGUID (&IID_IPropertyNotifySink, riid))
|
|
|
|
{
|
|
|
|
TRACE("Returning connection point %p for IID_IPropertyNotifySink\n",
|
|
|
|
&SHDOCVW_ConnectionPoint);
|
|
|
|
*ppCP = (LPCONNECTIONPOINT)&SHDOCVW_ConnectionPoint;
|
|
|
|
return S_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
return E_FAIL;
|
|
|
|
}
|
|
|
|
|
2005-09-12 12:10:04 +02:00
|
|
|
#undef CONPTCONT_THIS
|
2002-05-05 21:40:57 +02:00
|
|
|
|
2005-09-12 12:10:04 +02:00
|
|
|
static const IConnectionPointContainerVtbl ConnectionPointContainerVtbl =
|
2002-05-05 21:40:57 +02:00
|
|
|
{
|
2005-09-12 12:10:04 +02:00
|
|
|
ConnectionPointContainer_QueryInterface,
|
|
|
|
ConnectionPointContainer_AddRef,
|
|
|
|
ConnectionPointContainer_Release,
|
|
|
|
ConnectionPointContainer_EnumConnectionPoints,
|
|
|
|
ConnectionPointContainer_FindConnectionPoint
|
2002-05-05 21:40:57 +02:00
|
|
|
};
|
|
|
|
|
2001-01-11 23:32:44 +01:00
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* Implement the IConnectionPoint interface
|
|
|
|
*/
|
|
|
|
|
|
|
|
static HRESULT WINAPI WBCP_QueryInterface(LPCONNECTIONPOINT iface,
|
|
|
|
REFIID riid, LPVOID *ppobj)
|
|
|
|
{
|
2005-01-27 11:43:53 +01:00
|
|
|
FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
|
2001-01-11 23:32:44 +01:00
|
|
|
|
2005-01-27 11:43:53 +01:00
|
|
|
if (ppobj == NULL) return E_POINTER;
|
|
|
|
|
2002-05-05 21:40:57 +02:00
|
|
|
return E_NOINTERFACE;
|
2001-01-11 23:32:44 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI WBCP_AddRef(LPCONNECTIONPOINT iface)
|
|
|
|
{
|
2005-01-27 11:43:53 +01:00
|
|
|
SHDOCVW_LockModule();
|
2001-01-11 23:32:44 +01:00
|
|
|
|
2005-01-27 11:43:53 +01:00
|
|
|
return 2; /* non-heap based object */
|
2001-01-11 23:32:44 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
static ULONG WINAPI WBCP_Release(LPCONNECTIONPOINT iface)
|
|
|
|
{
|
2005-01-27 11:43:53 +01:00
|
|
|
SHDOCVW_UnlockModule();
|
2005-01-14 17:02:20 +01:00
|
|
|
|
2005-01-27 11:43:53 +01:00
|
|
|
return 1; /* non-heap based object */
|
2001-01-11 23:32:44 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
static HRESULT WINAPI WBCP_GetConnectionInterface(LPCONNECTIONPOINT iface, IID* pIId)
|
|
|
|
{
|
|
|
|
FIXME("stub: %s\n", debugstr_guid(pIId));
|
2002-05-05 21:40:57 +02:00
|
|
|
return S_OK;
|
2001-01-11 23:32:44 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Get this connection point's owning container */
|
|
|
|
static HRESULT WINAPI
|
|
|
|
WBCP_GetConnectionPointContainer(LPCONNECTIONPOINT iface,
|
|
|
|
LPCONNECTIONPOINTCONTAINER *ppCPC)
|
|
|
|
{
|
|
|
|
FIXME("stub: IConnectionPointContainer = %p\n", *ppCPC);
|
2002-05-05 21:40:57 +02:00
|
|
|
return S_OK;
|
2001-01-11 23:32:44 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Connect the pUnkSink event-handling implementation (in the control site)
|
|
|
|
* to this connection point. Return a handle to this connection in
|
|
|
|
* pdwCookie (for later use in Unadvise()).
|
|
|
|
*/
|
|
|
|
static HRESULT WINAPI WBCP_Advise(LPCONNECTIONPOINT iface,
|
|
|
|
LPUNKNOWN pUnkSink, DWORD *pdwCookie)
|
|
|
|
{
|
|
|
|
static int new_cookie;
|
|
|
|
|
|
|
|
FIXME("stub: IUnknown = %p, connection cookie = %ld\n", pUnkSink, *pdwCookie);
|
2002-05-05 21:40:57 +02:00
|
|
|
|
2001-01-11 23:32:44 +01:00
|
|
|
*pdwCookie = ++new_cookie;
|
|
|
|
TRACE ("Returning cookie = %ld\n", *pdwCookie);
|
|
|
|
|
2002-05-05 21:40:57 +02:00
|
|
|
return S_OK;
|
2001-01-11 23:32:44 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Disconnect this implementation from the connection point. */
|
|
|
|
static HRESULT WINAPI WBCP_Unadvise(LPCONNECTIONPOINT iface,
|
|
|
|
DWORD dwCookie)
|
|
|
|
{
|
2003-04-02 03:23:43 +02:00
|
|
|
FIXME("stub: cookie to disconnect = %lx\n", dwCookie);
|
2002-05-05 21:40:57 +02:00
|
|
|
return S_OK;
|
2001-01-11 23:32:44 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Get a list of connections in this connection point. */
|
|
|
|
static HRESULT WINAPI WBCP_EnumConnections(LPCONNECTIONPOINT iface,
|
|
|
|
LPENUMCONNECTIONS *ppEnum)
|
|
|
|
{
|
|
|
|
FIXME("stub: IEnumConnections = %p\n", *ppEnum);
|
2002-05-05 21:40:57 +02:00
|
|
|
return S_OK;
|
2001-01-11 23:32:44 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* IConnectionPoint virtual function table for IE Web Browser component
|
|
|
|
*/
|
|
|
|
|
2005-06-06 21:50:35 +02:00
|
|
|
static const IConnectionPointVtbl WBCP_Vtbl =
|
2001-01-11 23:32:44 +01:00
|
|
|
{
|
|
|
|
WBCP_QueryInterface,
|
|
|
|
WBCP_AddRef,
|
|
|
|
WBCP_Release,
|
|
|
|
WBCP_GetConnectionInterface,
|
|
|
|
WBCP_GetConnectionPointContainer,
|
|
|
|
WBCP_Advise,
|
|
|
|
WBCP_Unadvise,
|
|
|
|
WBCP_EnumConnections
|
|
|
|
};
|
|
|
|
|
2005-06-06 21:50:35 +02:00
|
|
|
static IConnectionPointImpl SHDOCVW_ConnectionPoint = {&WBCP_Vtbl};
|
2005-09-12 12:10:04 +02:00
|
|
|
|
|
|
|
void WebBrowser_Events_Init(WebBrowser *This)
|
|
|
|
{
|
|
|
|
This->lpConnectionPointContainerVtbl = &ConnectionPointContainerVtbl;
|
|
|
|
}
|