Module: wine Branch: master Commit: 361f0690f62ad57c576673211fc4f5af4ccbdbec URL: http://source.winehq.org/git/wine.git/?a=commit;h=361f0690f62ad57c576673211f...
Author: Jacek Caban jacek@codeweavers.com Date: Wed May 4 19:42:07 2016 +0200
msctf: Use generic sinks in InputProcessorProfiles object.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/msctf/inputprocessor.c | 68 +++++++-------------------------------------- dlls/msctf/msctf_internal.h | 1 + 2 files changed, 11 insertions(+), 58 deletions(-)
diff --git a/dlls/msctf/inputprocessor.c b/dlls/msctf/inputprocessor.c index 08e51fd..0e8ad22 100644 --- a/dlls/msctf/inputprocessor.c +++ b/dlls/msctf/inputprocessor.c @@ -51,15 +51,6 @@ static const WCHAR szwDefault[] = {'D','e','f','a','u','l','t',0}; static const WCHAR szwProfile[] = {'P','r','o','f','i','l','e',0}; static const WCHAR szwDefaultFmt[] = {'%','s','\','%','s','\','0','x','%','0','8','x','\','%','s',0};
-typedef struct tagInputProcessorProfilesSink { - struct list entry; - union { - /* InputProcessorProfile Sinks */ - IUnknown *pIUnknown; - ITfLanguageProfileNotifySink *pITfLanguageProfileNotifySink; - } interfaces; -} InputProcessorProfilesSink; - typedef struct tagInputProcessorProfiles { ITfInputProcessorProfiles ITfInputProcessorProfiles_iface; ITfSource ITfSource_iface; @@ -217,25 +208,11 @@ static inline EnumTfLanguageProfiles *impl_from_IEnumTfLanguageProfiles(IEnumTfL return CONTAINING_RECORD(iface, EnumTfLanguageProfiles, IEnumTfLanguageProfiles_iface); }
-static void free_sink(InputProcessorProfilesSink *sink) -{ - IUnknown_Release(sink->interfaces.pIUnknown); - HeapFree(GetProcessHeap(),0,sink); -} - static void InputProcessorProfiles_Destructor(InputProcessorProfiles *This) { - struct list *cursor, *cursor2; TRACE("destroying %p\n", This);
- /* free sinks */ - LIST_FOR_EACH_SAFE(cursor, cursor2, &This->LanguageProfileNotifySink) - { - InputProcessorProfilesSink* sink = LIST_ENTRY(cursor,InputProcessorProfilesSink,entry); - list_remove(cursor); - free_sink(sink); - } - + free_sinks(&This->LanguageProfileNotifySink); HeapFree(GetProcessHeap(),0,This); }
@@ -605,18 +582,18 @@ static HRESULT WINAPI InputProcessorProfiles_ChangeCurrentLanguage( ITfInputProcessorProfiles *iface, LANGID langid) { InputProcessorProfiles *This = impl_from_ITfInputProcessorProfiles(iface); + ITfLanguageProfileNotifySink *sink; struct list *cursor; BOOL accept;
FIXME("STUB:(%p)\n",This);
- LIST_FOR_EACH(cursor, &This->LanguageProfileNotifySink) + SINK_FOR_EACH(cursor, &This->LanguageProfileNotifySink, ITfLanguageProfileNotifySink, sink) { - InputProcessorProfilesSink* sink = LIST_ENTRY(cursor,InputProcessorProfilesSink,entry); accept = TRUE; - ITfLanguageProfileNotifySink_OnLanguageChange(sink->interfaces.pITfLanguageProfileNotifySink, langid, &accept); + ITfLanguageProfileNotifySink_OnLanguageChange(sink, langid, &accept); if (!accept) - return E_FAIL; + return E_FAIL; }
/* TODO: On successful language change call OnLanguageChanged sink */ @@ -928,7 +905,6 @@ static HRESULT WINAPI IPPSource_AdviseSink(ITfSource *iface, REFIID riid, IUnknown *punk, DWORD *pdwCookie) { InputProcessorProfiles *This = impl_from_ITfSource(iface); - InputProcessorProfilesSink *ipps;
TRACE("(%p) %s %p %p\n",This,debugstr_guid(riid),punk,pdwCookie);
@@ -936,47 +912,23 @@ static HRESULT WINAPI IPPSource_AdviseSink(ITfSource *iface, return E_INVALIDARG;
if (IsEqualIID(riid, &IID_ITfLanguageProfileNotifySink)) - { - ipps = HeapAlloc(GetProcessHeap(),0,sizeof(InputProcessorProfilesSink)); - if (!ipps) - return E_OUTOFMEMORY; - if (FAILED(IUnknown_QueryInterface(punk, riid, (LPVOID *)&ipps->interfaces.pITfLanguageProfileNotifySink))) - { - HeapFree(GetProcessHeap(),0,ipps); - return CONNECT_E_CANNOTCONNECT; - } - list_add_head(&This->LanguageProfileNotifySink,&ipps->entry); - *pdwCookie = generate_Cookie(COOKIE_MAGIC_IPPSINK, ipps); - } - else - { - FIXME("(%p) Unhandled Sink: %s\n",This,debugstr_guid(riid)); - return E_NOTIMPL; - } - - TRACE("cookie %x\n",*pdwCookie); + return advise_sink(&This->LanguageProfileNotifySink, &IID_ITfLanguageProfileNotifySink, + COOKIE_MAGIC_IPPSINK, punk, pdwCookie);
- return S_OK; + FIXME("(%p) Unhandled Sink: %s\n",This,debugstr_guid(riid)); + return E_NOTIMPL; }
static HRESULT WINAPI IPPSource_UnadviseSink(ITfSource *iface, DWORD pdwCookie) { InputProcessorProfiles *This = impl_from_ITfSource(iface); - InputProcessorProfilesSink *sink;
TRACE("(%p) %x\n",This,pdwCookie);
if (get_Cookie_magic(pdwCookie)!=COOKIE_MAGIC_IPPSINK) return E_INVALIDARG;
- sink = remove_Cookie(pdwCookie); - if (!sink) - return CONNECT_E_NOCONNECTION; - - list_remove(&sink->entry); - free_sink(sink); - - return S_OK; + return unadvise_sink(pdwCookie); }
static const ITfSourceVtbl InputProcessorProfilesSourceVtbl = diff --git a/dlls/msctf/msctf_internal.h b/dlls/msctf/msctf_internal.h index f272465..181c4fd 100644 --- a/dlls/msctf/msctf_internal.h +++ b/dlls/msctf/msctf_internal.h @@ -74,6 +74,7 @@ typedef struct { ITfThreadMgrEventSink *pITfThreadMgrEventSink; ITfCompartmentEventSink *pITfCompartmentEventSink; ITfTextEditSink *pITfTextEditSink; + ITfLanguageProfileNotifySink *pITfLanguageProfileNotifySink; } interfaces; } Sink;