38#define INITIAL_SINKS 10
47 IAdviseSink_Release(
data->pAdvSink);
59 dst->pAdvSink =
src->pAdvSink;
60 if (
dst->pAdvSink) IAdviseSink_AddRef(
dst->pAdvSink );
61 dst->dwConnection =
src->dwConnection;
91 IEnumSTATDATA_AddRef(iface);
113 for(
i = 0;
i <
This->num_of_elems;
i++)
116 if (
This->holder) IUnknown_Release(
This->holder);
133 if (
This->index >=
This->num_of_elems)
145 if (fetched) *fetched =
count;
216 for(
i = 0,
count = 0;
i < array_len;
i++)
232 This->holder = holder;
233 if (holder) IUnknown_AddRef(holder);
234 *ppenum = &
This->IEnumSTATDATA_iface;
291 *
obj = &
This->IOleAdviseHolder_iface;
310 TRACE(
"%p, refcount %lu.\n", iface,
ref);
323 TRACE(
"%p, refcount %lu.\n", iface,
ref);
335 DWORD *pdwConnection)
340 static const FORMATETC empty_fmtetc = {0,
NULL, 0, -1, 0};
342 TRACE(
"(%p)->(%p, %p)\n",
This, pAdvise, pdwConnection);
344 if (pdwConnection==
NULL)
359 This->max_cons *
sizeof(*
This->connections));
362 new_conn.pAdvSink = pAdvise;
364 new_conn.formatetc = empty_fmtetc;
365 new_conn.dwConnection =
index + 1;
369 *pdwConnection = new_conn.dwConnection;
383 TRACE(
"%p, %lu.\n", iface, dwConnection);
386 index = dwConnection - 1;
405 TRACE(
"(%p)->(%p)\n",
This, enum_advise);
407 IOleAdviseHolder_QueryInterface(iface, &
IID_IUnknown, (
void**)&unk);
409 IUnknown_Release(unk);
421 TRACE(
"(%p)->(%p)\n", iface, pmk);
423 hr = IOleAdviseHolder_EnumAdvise(iface, &pEnum);
427 while (IEnumSTATDATA_Next(pEnum, 1, &statdata,
NULL) ==
S_OK)
429 IAdviseSink_OnRename(statdata.pAdvSink, pmk);
431 IAdviseSink_Release(statdata.pAdvSink);
433 IEnumSTATDATA_Release(pEnum);
447 TRACE(
"(%p)->()\n", iface);
449 hr = IOleAdviseHolder_EnumAdvise(iface, &pEnum);
453 while (IEnumSTATDATA_Next(pEnum, 1, &statdata,
NULL) ==
S_OK)
455 IAdviseSink_OnSave(statdata.pAdvSink);
457 IAdviseSink_Release(statdata.pAdvSink);
459 IEnumSTATDATA_Release(pEnum);
473 TRACE(
"(%p)->()\n", iface);
475 hr = IOleAdviseHolder_EnumAdvise(iface, &pEnum);
479 while (IEnumSTATDATA_Next(pEnum, 1, &statdata,
NULL) ==
S_OK)
481 IAdviseSink_OnClose(statdata.pAdvSink);
483 IAdviseSink_Release(statdata.pAdvSink);
485 IEnumSTATDATA_Release(pEnum);
494static const IOleAdviseHolderVtbl
oahvt =
542#define WINE_ADVF_REMOTE 0x80000000
555 TRACE(
"%p\n", ptrToDestroy);
563 IDataObject_DUnadvise(ptrToDestroy->
delegate,
584 if ( (
This==0) || (ppvObject==0) )
600 IUnknown_AddRef((
IUnknown*)*ppvObject);
611 TRACE(
"%p, refcount %lu.\n", iface,
ref);
623 TRACE(
"%p, refcount %lu.\n", iface,
ref);
637 DWORD *pdwConnection)
643 TRACE(
"%p, %p, %p, %#lx, %p, %p.\n", iface, pDataObject, pFetc, advf, pAdvise, pdwConnection);
645 if (pdwConnection==
NULL)
661 This->maxCons *
sizeof(*
This->connections));
663 This->remote_connections,
664 This->maxCons *
sizeof(*
This->remote_connections));
667 new_conn.pAdvSink = pAdvise;
668 new_conn.advf = advf & ~WINE_ADVF_REMOTE;
669 new_conn.formatetc = *pFetc;
670 new_conn.dwConnection =
index + 1;
681 hr = IDataObject_DAdvise(
This->delegate, &new_conn.formatetc,
682 new_conn.advf, new_conn.pAdvSink,
686 IDataAdviseHolder_Unadvise(iface, new_conn.dwConnection);
691 else if(advf & ADVF_PRIMEFIRST)
694 IDataAdviseHolder_SendOnDataChange(iface, pDataObject, 0, advf);
697 *pdwConnection = new_conn.dwConnection;
711 TRACE(
"%p, %lu.\n", iface, dwConnection);
714 index = dwConnection - 1;
721 IDataObject_DUnadvise(
This->delegate,
This->remote_connections[
index]);
740 TRACE(
"(%p)->(%p)\n",
This, enum_advise);
742 IDataAdviseHolder_QueryInterface(iface, &
IID_IUnknown, (
void**)&unk);
744 IUnknown_Release(unk);
760 hr = IDataAdviseHolder_EnumAdvise(iface, &pEnum);
764 while (IEnumSTATDATA_Next(pEnum, 1, &statdata,
NULL) ==
S_OK)
767 stg.tymed = TYMED_NULL;
769 stg.pUnkForRelease =
NULL;
771 if(!(statdata.advf & ADVF_NODATA))
773 hr = IDataObject_GetData(data_obj, &statdata.formatetc, &stg);
776 IAdviseSink_OnDataChange(statdata.pAdvSink, &statdata.formatetc, &stg);
778 if(statdata.advf & ADVF_ONLYONCE)
780 IDataAdviseHolder_Unadvise(iface, statdata.dwConnection);
785 IEnumSTATDATA_Release(pEnum);
815 hr = IDataObject_DAdvise(pDelegate, &
This->connections[
index].formatetc,
823 This->delegate = pDelegate;
837 IDataObject_DUnadvise(
This->delegate,
This->remote_connections[
index]);
839 This->connections[
index].advf &= ~WINE_ADVF_REMOTE;
876 TRACE(
"(%p)\n", ppOAHolder);
878 if (ppOAHolder==
NULL)
883 if (*ppOAHolder !=
NULL)
894 TRACE(
"(%p)\n", ppDAHolder);
896 if (ppDAHolder==
NULL)
901 if (*ppDAHolder !=
NULL)
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
INT copy(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], INT append, DWORD lpdwFlags, BOOL bTouch)
static HRESULT copy_formatetc(FORMATETC *dst, const FORMATETC *src)
#define HeapFree(x, y, z)
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
void WINAPI CoTaskMemFree(void *ptr)
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
static HRESULT WINAPI EnumSTATDATA_Next(IEnumSTATDATA *iface, ULONG num, LPSTATDATA data, ULONG *fetched)
HRESULT EnumSTATDATA_Construct(IUnknown *holder, ULONG index, DWORD array_len, STATDATA *data, BOOL copy, IEnumSTATDATA **ppenum)
static HRESULT WINAPI EnumSTATDATA_QueryInterface(IEnumSTATDATA *iface, REFIID riid, void **ppv)
static EnumSTATDATA * impl_from_IEnumSTATDATA(IEnumSTATDATA *iface)
static HRESULT copy_statdata(STATDATA *dst, const STATDATA *src)
HRESULT WINAPI CreateDataAdviseHolder(IDataAdviseHolder **ppDAHolder)
static const IOleAdviseHolderVtbl oahvt
HRESULT WINAPI CreateOleAdviseHolder(IOleAdviseHolder **ppOAHolder)
static ULONG WINAPI OleAdviseHolderImpl_Release(IOleAdviseHolder *iface)
static HRESULT WINAPI DataAdviseHolder_SendOnDataChange(IDataAdviseHolder *iface, IDataObject *data_obj, DWORD dwReserved, DWORD advf)
static HRESULT WINAPI EnumSTATDATA_Clone(IEnumSTATDATA *iface, IEnumSTATDATA **ppenum)
static HRESULT WINAPI EnumSTATDATA_Reset(IEnumSTATDATA *iface)
static HRESULT WINAPI DataAdviseHolder_QueryInterface(IDataAdviseHolder *iface, REFIID riid, void **ppvObject)
static HRESULT WINAPI OleAdviseHolderImpl_Unadvise(IOleAdviseHolder *iface, DWORD dwConnection)
static HRESULT WINAPI DataAdviseHolder_EnumAdvise(IDataAdviseHolder *iface, IEnumSTATDATA **enum_advise)
static ULONG WINAPI DataAdviseHolder_Release(IDataAdviseHolder *iface)
static const IEnumSTATDATAVtbl EnumSTATDATA_VTable
static HRESULT WINAPI OleAdviseHolderImpl_SendOnSave(IOleAdviseHolder *iface)
static HRESULT WINAPI OleAdviseHolderImpl_SendOnRename(IOleAdviseHolder *iface, IMoniker *pmk)
static void release_statdata(STATDATA *data)
HRESULT DataAdviseHolder_OnConnect(IDataAdviseHolder *iface, IDataObject *pDelegate)
static const IDataAdviseHolderVtbl DataAdviseHolderImpl_VTable
static DataAdviseHolder * impl_from_IDataAdviseHolder(IDataAdviseHolder *iface)
static ULONG WINAPI EnumSTATDATA_AddRef(IEnumSTATDATA *iface)
static ULONG WINAPI DataAdviseHolder_AddRef(IDataAdviseHolder *iface)
void DataAdviseHolder_OnDisconnect(IDataAdviseHolder *iface)
static IOleAdviseHolder * OleAdviseHolderImpl_Constructor(void)
static HRESULT WINAPI EnumSTATDATA_Skip(IEnumSTATDATA *iface, ULONG num)
static HRESULT WINAPI OleAdviseHolderImpl_EnumAdvise(IOleAdviseHolder *iface, IEnumSTATDATA **enum_advise)
static HRESULT WINAPI OleAdviseHolderImpl_QueryInterface(IOleAdviseHolder *iface, REFIID iid, void **obj)
static void DataAdviseHolder_Destructor(DataAdviseHolder *ptrToDestroy)
static OleAdviseHolderImpl * impl_from_IOleAdviseHolder(IOleAdviseHolder *iface)
static IDataAdviseHolder * DataAdviseHolder_Constructor(void)
static ULONG WINAPI EnumSTATDATA_Release(IEnumSTATDATA *iface)
static void OleAdviseHolderImpl_Destructor(OleAdviseHolderImpl *This)
static HRESULT WINAPI OleAdviseHolderImpl_SendOnClose(IOleAdviseHolder *iface)
static HRESULT WINAPI DataAdviseHolder_Advise(IDataAdviseHolder *iface, IDataObject *pDataObject, FORMATETC *pFetc, DWORD advf, IAdviseSink *pAdvise, DWORD *pdwConnection)
static HRESULT WINAPI OleAdviseHolderImpl_Advise(IOleAdviseHolder *iface, IAdviseSink *pAdvise, DWORD *pdwConnection)
static HRESULT WINAPI DataAdviseHolder_Unadvise(IDataAdviseHolder *iface, DWORD dwConnection)
static ULONG WINAPI OleAdviseHolderImpl_AddRef(IOleAdviseHolder *iface)
const GUID IID_IOleAdviseHolder
const GUID IID_IDataAdviseHolder
const GUID IID_IEnumSTATDATA
#define IsEqualIID(riid1, riid2)
IDataAdviseHolder IDataAdviseHolder_iface
DWORD * remote_connections
IEnumSTATDATA IEnumSTATDATA_iface
IOleAdviseHolder IOleAdviseHolder_iface
#define CONTAINING_RECORD(address, type, field)
#define OLE_E_NOCONNECTION