Jacek Caban : msctf: Moved thread manager' s AdviseSink implementation into a more generic helper.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu May 5 10:29:33 CDT 2016
Module: wine
Branch: master
Commit: c0efd074b2fc9bec2a520d8a80bdbd74c8d562dc
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c0efd074b2fc9bec2a520d8a80bdbd74c8d562dc
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed May 4 19:40:47 2016 +0200
msctf: Moved thread manager's AdviseSink implementation into a more generic helper.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/msctf/msctf.c | 21 +++++++++++++++++++++
dlls/msctf/msctf_internal.h | 2 ++
dlls/msctf/threadmgr.c | 24 +++---------------------
3 files changed, 26 insertions(+), 21 deletions(-)
diff --git a/dlls/msctf/msctf.c b/dlls/msctf/msctf.c
index 83eaab9..23845d4 100644
--- a/dlls/msctf/msctf.c
+++ b/dlls/msctf/msctf.c
@@ -32,6 +32,7 @@
#include "shlwapi.h"
#include "shlguid.h"
#include "comcat.h"
+#include "olectl.h"
#include "rpcproxy.h"
#include "msctf.h"
#include "inputscope.h"
@@ -283,6 +284,26 @@ DWORD enumerate_Cookie(DWORD magic, DWORD *index)
return 0x0;
}
+HRESULT advise_sink(struct list *sink_list, REFIID riid, DWORD cookie_magic, IUnknown *unk, DWORD *cookie)
+{
+ Sink *sink;
+
+ sink = HeapAlloc(GetProcessHeap(), 0, sizeof(*sink));
+ if (!sink)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(IUnknown_QueryInterface(unk, riid, (void**)&sink->interfaces.pIUnknown)))
+ {
+ HeapFree(GetProcessHeap(), 0, sink);
+ return CONNECT_E_CANNOTCONNECT;
+ }
+
+ list_add_head(sink_list, &sink->entry);
+ *cookie = generate_Cookie(cookie_magic, sink);
+ TRACE("cookie %x\n", *cookie);
+ return S_OK;
+}
+
/*****************************************************************************
* Active Text Service Management
*****************************************************************************/
diff --git a/dlls/msctf/msctf_internal.h b/dlls/msctf/msctf_internal.h
index 8923c60..1f7e7df 100644
--- a/dlls/msctf/msctf_internal.h
+++ b/dlls/msctf/msctf_internal.h
@@ -75,6 +75,8 @@ typedef struct {
} interfaces;
} Sink;
+HRESULT advise_sink(struct list *sink_list, REFIID riid, DWORD cookie_magic, IUnknown *unk, DWORD *cookie) DECLSPEC_HIDDEN;
+
extern const WCHAR szwSystemTIPKey[] DECLSPEC_HIDDEN;
extern const WCHAR szwSystemCTFKey[] DECLSPEC_HIDDEN;
diff --git a/dlls/msctf/threadmgr.c b/dlls/msctf/threadmgr.c
index 44e8c87..c6a227c 100644
--- a/dlls/msctf/threadmgr.c
+++ b/dlls/msctf/threadmgr.c
@@ -643,7 +643,6 @@ static HRESULT WINAPI ThreadMgrSource_AdviseSink(ITfSource *iface,
REFIID riid, IUnknown *punk, DWORD *pdwCookie)
{
ThreadMgr *This = impl_from_ITfSource(iface);
- Sink *tms;
TRACE("(%p) %s %p %p\n",This,debugstr_guid(riid),punk,pdwCookie);
@@ -651,27 +650,10 @@ static HRESULT WINAPI ThreadMgrSource_AdviseSink(ITfSource *iface,
return E_INVALIDARG;
if (IsEqualIID(riid, &IID_ITfThreadMgrEventSink))
- {
- tms = HeapAlloc(GetProcessHeap(),0,sizeof(*tms));
- if (!tms)
- return E_OUTOFMEMORY;
- if (FAILED(IUnknown_QueryInterface(punk, riid, (LPVOID *)&tms->interfaces.pITfThreadMgrEventSink)))
- {
- HeapFree(GetProcessHeap(),0,tms);
- return CONNECT_E_CANNOTCONNECT;
- }
- list_add_head(&This->ThreadMgrEventSink,&tms->entry);
- *pdwCookie = generate_Cookie(COOKIE_MAGIC_TMSINK, tms);
- }
- else
- {
- FIXME("(%p) Unhandled Sink: %s\n",This,debugstr_guid(riid));
- return E_NOTIMPL;
- }
-
- TRACE("cookie %x\n",*pdwCookie);
+ return advise_sink(&This->ThreadMgrEventSink, &IID_ITfThreadMgrEventSink, COOKIE_MAGIC_TMSINK, punk, pdwCookie);
- return S_OK;
+ FIXME("(%p) Unhandled Sink: %s\n",This,debugstr_guid(riid));
+ return E_NOTIMPL;
}
static HRESULT WINAPI ThreadMgrSource_UnadviseSink(ITfSource *iface, DWORD pdwCookie)
More information about the wine-cvs
mailing list