Module: wine Branch: master Commit: 1f21795f93131a8b06004fffff44bd937f5ec59f URL: http://source.winehq.org/git/wine.git/?a=commit;h=1f21795f93131a8b06004fffff...
Author: Aric Stewart aric@codeweavers.com Date: Tue Mar 24 08:21:39 2009 -0500
msctf: Add ITfThreadMgrEventSink to ThreadMgr.
---
dlls/msctf/threadmgr.c | 34 +++++++++++++++++++++++++++++++--- include/msctf.idl | 24 ++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 3 deletions(-)
diff --git a/dlls/msctf/threadmgr.c b/dlls/msctf/threadmgr.c index eb5918e..080c023 100644 --- a/dlls/msctf/threadmgr.c +++ b/dlls/msctf/threadmgr.c @@ -32,6 +32,7 @@ #include "shlwapi.h" #include "winerror.h" #include "objbase.h" +#include "olectl.h"
#include "wine/unicode.h" #include "wine/list.h" @@ -51,7 +52,7 @@ typedef struct tagThreadMgrSink { /* ITfKeyTraceEventSink *pITfKeyTraceEventSink; */ /* ITfPreservedKeyNotifySink *pITfPreservedKeyNotifySink; */ /* ITfThreadFocusSink *pITfThreadFocusSink; */ - /* ITfThreadMgrEventSink *pITfThreadMgrEventSink; */ + ITfThreadMgrEventSink *pITfThreadMgrEventSink; } interfaces; } ThreadMgrSink;
@@ -327,9 +328,36 @@ static ULONG WINAPI Source_Release(ITfSource *iface) static WINAPI HRESULT ThreadMgrSource_AdviseSink(ITfSource *iface, REFIID riid, IUnknown *punk, DWORD *pdwCookie) { + ThreadMgrSink *tms; ThreadMgr *This = impl_from_ITfSourceVtbl(iface); - FIXME("STUB:(%p)\n",This); - return E_NOTIMPL; + + TRACE("(%p) %s %p %p\n",This,debugstr_guid(riid),punk,pdwCookie); + + if (!riid || !punk || !pdwCookie) + return E_INVALIDARG; + + if (IsEqualIID(riid, &IID_ITfThreadMgrEventSink)) + { + tms = HeapAlloc(GetProcessHeap(),0,sizeof(ThreadMgrSink)); + if (!tms) + return E_OUTOFMEMORY; + if (!SUCCEEDED(IUnknown_QueryInterface(punk, riid, (LPVOID*)&tms->interfaces.pITfThreadMgrEventSink))) + { + HeapFree(GetProcessHeap(),0,tms); + return CONNECT_E_CANNOTCONNECT; + } + list_add_head(&This->ThreadMgrEventSink,&tms->entry); + *pdwCookie = (DWORD)tms; + } + else + { + FIXME("(%p) Unhandled Sink: %s\n",This,debugstr_guid(riid)); + return E_NOTIMPL; + } + + TRACE("cookie %x\n",*pdwCookie); + + return S_OK; }
static WINAPI HRESULT ThreadMgrSource_UnadviseSink(ITfSource *iface, DWORD pdwCookie) diff --git a/include/msctf.idl b/include/msctf.idl index d9c9710..c81c0da 100644 --- a/include/msctf.idl +++ b/include/msctf.idl @@ -486,3 +486,27 @@ interface ITfTextInputProcessor : IUnknown
HRESULT Deactivate(); }; + +[ + object, + uuid(aa80e80e-2021-11d2-93e0-0060b067b86e), + pointer_default(unique) +] +interface ITfThreadMgrEventSink : IUnknown +{ + HRESULT OnInitDocumentMgr( + [in] ITfDocumentMgr *pdim); + + HRESULT OnUninitDocumentMgr( + [in] ITfDocumentMgr *pdim); + + HRESULT OnSetFocus( + [in] ITfDocumentMgr *pdimFocus, + [in] ITfDocumentMgr *pdimPrevFocus); + + HRESULT OnPushContext( + [in] ITfContext *pic); + + HRESULT OnPopContext( + [in] ITfContext *pic); +};