Module: wine Branch: master Commit: 619b3896ec44ada1c0b0daaf0482cda40cb74fd5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=619b3896ec44ada1c0b0daaf04...
Author: Aric Stewart aric@codeweavers.com Date: Tue May 12 12:50:08 2009 -0500
msctf: Support advising ITfLanguageProfileNotifySink in ITfInputProcessorProfiles.
---
dlls/msctf/inputprocessor.c | 27 ++++++++++++++++++++++++--- include/msctf.idl | 14 ++++++++++++++ 2 files changed, 38 insertions(+), 3 deletions(-)
diff --git a/dlls/msctf/inputprocessor.c b/dlls/msctf/inputprocessor.c index f5e5989..8d36cd5 100644 --- a/dlls/msctf/inputprocessor.c +++ b/dlls/msctf/inputprocessor.c @@ -52,7 +52,7 @@ typedef struct tagInputProcessorProfilesSink { union { /* InputProcessorProfile Sinks */ IUnknown *pIUnknown; - /* ITfLanguageProfileNotifySink *pITfLanguageProfileNotifySink; */ + ITfLanguageProfileNotifySink *pITfLanguageProfileNotifySink; } interfaces; } InputProcessorProfilesSink;
@@ -599,6 +599,7 @@ static ULONG WINAPI IPPSource_Release(ITfSource *iface) static WINAPI HRESULT IPPSource_AdviseSink(ITfSource *iface, REFIID riid, IUnknown *punk, DWORD *pdwCookie) { + InputProcessorProfilesSink *ipps; InputProcessorProfiles *This = impl_from_ITfSourceVtbl(iface);
TRACE("(%p) %s %p %p\n",This,debugstr_guid(riid),punk,pdwCookie); @@ -606,8 +607,28 @@ static WINAPI HRESULT IPPSource_AdviseSink(ITfSource *iface, if (!riid || !punk || !pdwCookie) return E_INVALIDARG;
- FIXME("(%p) Unhandled Sink: %s\n",This,debugstr_guid(riid)); - return E_NOTIMPL; + if (IsEqualIID(riid, &IID_ITfLanguageProfileNotifySink)) + { + ipps = HeapAlloc(GetProcessHeap(),0,sizeof(InputProcessorProfilesSink)); + if (!ipps) + return E_OUTOFMEMORY; + if (!SUCCEEDED(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 S_OK; }
static WINAPI HRESULT IPPSource_UnadviseSink(ITfSource *iface, DWORD pdwCookie) diff --git a/include/msctf.idl b/include/msctf.idl index 7e643f4..40853ee 100644 --- a/include/msctf.idl +++ b/include/msctf.idl @@ -699,3 +699,17 @@ interface ITfClientId : IUnknown [in] REFCLSID rclsid, [out] TfClientId *ptid); }; + +[ + object, + uuid(43c9fe15-f494-4c17-9de2-b8a4ac350aa8), + pointer_default(unique) +] +interface ITfLanguageProfileNotifySink : IUnknown +{ + HRESULT OnLanguageChange( + [in] LANGID langid, + [out] BOOL *pfAccept); + + HRESULT OnLanguageChanged(); +}