From 7c1c94c25848e569dc106f2cd65377040bbc4074 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Wed, 4 May 2016 19:41:29 +0200 Subject: [PATCH] msctf: Added a helper macro for interating sink list. Signed-off-by: Jacek Caban Signed-off-by: Alexandre Julliard --- dlls/msctf/msctf_internal.h | 6 ++++++ dlls/msctf/threadmgr.c | 40 ++++++++++++++++++------------------- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/dlls/msctf/msctf_internal.h b/dlls/msctf/msctf_internal.h index e4da480ae87..3467f1c9784 100644 --- a/dlls/msctf/msctf_internal.h +++ b/dlls/msctf/msctf_internal.h @@ -75,6 +75,12 @@ typedef struct { } interfaces; } Sink; +#define SINK_ENTRY(cursor,type) (LIST_ENTRY(cursor,Sink,entry)->interfaces.p##type) +#define SINK_FOR_EACH(cursor,list,type,elem) \ + for ((cursor) = (list)->next, elem = SINK_ENTRY(cursor,type); \ + (cursor) != (list); \ + (cursor) = (cursor)->next, elem = SINK_ENTRY(cursor,type)) + HRESULT advise_sink(struct list *sink_list, REFIID riid, DWORD cookie_magic, IUnknown *unk, DWORD *cookie) DECLSPEC_HIDDEN; HRESULT unadvise_sink(DWORD cookie) DECLSPEC_HIDDEN; void free_sinks(struct list *sink_list) DECLSPEC_HIDDEN; diff --git a/dlls/msctf/threadmgr.c b/dlls/msctf/threadmgr.c index 62508b9ecae..e645619dceb 100644 --- a/dlls/msctf/threadmgr.c +++ b/dlls/msctf/threadmgr.c @@ -1079,15 +1079,15 @@ static ULONG WINAPI ThreadMgrEventSink_Release(ITfThreadMgrEventSink *iface) static HRESULT WINAPI ThreadMgrEventSink_OnInitDocumentMgr( ITfThreadMgrEventSink *iface,ITfDocumentMgr *pdim) { - struct list *cursor; ThreadMgr *This = impl_from_ITfThreadMgrEventSink(iface); + ITfThreadMgrEventSink *sink; + struct list *cursor; TRACE("(%p) %p\n",This,pdim); - LIST_FOR_EACH(cursor, &This->ThreadMgrEventSink) + SINK_FOR_EACH(cursor, &This->ThreadMgrEventSink, ITfThreadMgrEventSink, sink) { - Sink* sink = LIST_ENTRY(cursor,Sink,entry); - ITfThreadMgrEventSink_OnInitDocumentMgr(sink->interfaces.pITfThreadMgrEventSink,pdim); + ITfThreadMgrEventSink_OnInitDocumentMgr(sink, pdim); } return S_OK; @@ -1096,15 +1096,15 @@ static HRESULT WINAPI ThreadMgrEventSink_OnInitDocumentMgr( static HRESULT WINAPI ThreadMgrEventSink_OnUninitDocumentMgr( ITfThreadMgrEventSink *iface, ITfDocumentMgr *pdim) { - struct list *cursor; ThreadMgr *This = impl_from_ITfThreadMgrEventSink(iface); + ITfThreadMgrEventSink *sink; + struct list *cursor; TRACE("(%p) %p\n",This,pdim); - LIST_FOR_EACH(cursor, &This->ThreadMgrEventSink) + SINK_FOR_EACH(cursor, &This->ThreadMgrEventSink, ITfThreadMgrEventSink, sink) { - Sink* sink = LIST_ENTRY(cursor,Sink,entry); - ITfThreadMgrEventSink_OnUninitDocumentMgr(sink->interfaces.pITfThreadMgrEventSink,pdim); + ITfThreadMgrEventSink_OnUninitDocumentMgr(sink, pdim); } return S_OK; @@ -1114,15 +1114,15 @@ static HRESULT WINAPI ThreadMgrEventSink_OnSetFocus( ITfThreadMgrEventSink *iface, ITfDocumentMgr *pdimFocus, ITfDocumentMgr *pdimPrevFocus) { - struct list *cursor; ThreadMgr *This = impl_from_ITfThreadMgrEventSink(iface); + ITfThreadMgrEventSink *sink; + struct list *cursor; TRACE("(%p) %p %p\n",This,pdimFocus, pdimPrevFocus); - LIST_FOR_EACH(cursor, &This->ThreadMgrEventSink) + SINK_FOR_EACH(cursor, &This->ThreadMgrEventSink, ITfThreadMgrEventSink, sink) { - Sink* sink = LIST_ENTRY(cursor,Sink,entry); - ITfThreadMgrEventSink_OnSetFocus(sink->interfaces.pITfThreadMgrEventSink, pdimFocus, pdimPrevFocus); + ITfThreadMgrEventSink_OnSetFocus(sink, pdimFocus, pdimPrevFocus); } return S_OK; @@ -1131,15 +1131,15 @@ static HRESULT WINAPI ThreadMgrEventSink_OnSetFocus( static HRESULT WINAPI ThreadMgrEventSink_OnPushContext( ITfThreadMgrEventSink *iface, ITfContext *pic) { - struct list *cursor; ThreadMgr *This = impl_from_ITfThreadMgrEventSink(iface); + ITfThreadMgrEventSink *sink; + struct list *cursor; TRACE("(%p) %p\n",This,pic); - LIST_FOR_EACH(cursor, &This->ThreadMgrEventSink) + SINK_FOR_EACH(cursor, &This->ThreadMgrEventSink, ITfThreadMgrEventSink, sink) { - Sink* sink = LIST_ENTRY(cursor,Sink,entry); - ITfThreadMgrEventSink_OnPushContext(sink->interfaces.pITfThreadMgrEventSink,pic); + ITfThreadMgrEventSink_OnPushContext(sink, pic); } return S_OK; @@ -1148,15 +1148,15 @@ static HRESULT WINAPI ThreadMgrEventSink_OnPushContext( static HRESULT WINAPI ThreadMgrEventSink_OnPopContext( ITfThreadMgrEventSink *iface, ITfContext *pic) { - struct list *cursor; ThreadMgr *This = impl_from_ITfThreadMgrEventSink(iface); + ITfThreadMgrEventSink *sink; + struct list *cursor; TRACE("(%p) %p\n",This,pic); - LIST_FOR_EACH(cursor, &This->ThreadMgrEventSink) + SINK_FOR_EACH(cursor, &This->ThreadMgrEventSink, ITfThreadMgrEventSink, sink) { - Sink* sink = LIST_ENTRY(cursor,Sink,entry); - ITfThreadMgrEventSink_OnPopContext(sink->interfaces.pITfThreadMgrEventSink,pic); + ITfThreadMgrEventSink_OnPopContext(sink, pic); } return S_OK;