From 161fa4bc3044c00b57a0f4db33716bda939855d1 Mon Sep 17 00:00:00 2001 From: Aric Stewart Date: Fri, 8 May 2009 08:51:07 -0500 Subject: [PATCH] msctf: Implement ITfKeystrokeMgr::UnadviseKeyEventSink. --- dlls/msctf/tests/inputprocessor.c | 2 +- dlls/msctf/threadmgr.c | 27 +++++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/dlls/msctf/tests/inputprocessor.c b/dlls/msctf/tests/inputprocessor.c index 4ea2ec91eb1..5ab645d8fe4 100644 --- a/dlls/msctf/tests/inputprocessor.c +++ b/dlls/msctf/tests/inputprocessor.c @@ -437,7 +437,7 @@ static void test_KeystrokeMgr(void) ok(hr==CONNECT_E_NOCONNECTION,"ITfKeystrokeMgr_UnpreserveKey inproperly succeeded\n"); hr = ITfKeystrokeMgr_UnadviseKeyEventSink(keymgr,tid); - todo_wine ok(SUCCEEDED(hr),"ITfKeystrokeMgr_UnadviseKeyEventSink failed\n"); + ok(SUCCEEDED(hr),"ITfKeystrokeMgr_UnadviseKeyEventSink failed\n"); ITfKeystrokeMgr_Release(keymgr); ITfKeyEventSink_Release(sink); diff --git a/dlls/msctf/threadmgr.c b/dlls/msctf/threadmgr.c index e8743ec0ff1..5ee08dd2eb4 100644 --- a/dlls/msctf/threadmgr.c +++ b/dlls/msctf/threadmgr.c @@ -546,8 +546,31 @@ static HRESULT WINAPI KeystrokeMgr_UnadviseKeyEventSink(ITfKeystrokeMgr *iface, TfClientId tid) { ThreadMgr *This = impl_from_ITfKeystrokeMgrVtbl(iface); - FIXME("STUB:(%p)\n",This); - return E_NOTIMPL; + CLSID textservice; + ITfKeyEventSink *check = NULL; + TRACE("(%p) %x\n",This,tid); + + if (!tid) + return E_INVALIDARG; + + textservice = get_textservice_clsid(tid); + if (IsEqualCLSID(&GUID_NULL,&textservice)) + return E_INVALIDARG; + + get_textservice_sink(tid, &IID_ITfKeyEventSink, (IUnknown**)&check); + + if (!check) + return CONNECT_E_NOCONNECTION; + + set_textservice_sink(tid, &IID_ITfKeyEventSink, NULL); + ITfKeyEventSink_Release(check); + + if (This->forgroundKeyEventSink == check) + { + ITfKeyEventSink_Release(This->forgroundKeyEventSink); + This->forgroundKeyEventSink = NULL; + } + return S_OK; } static HRESULT WINAPI KeystrokeMgr_GetForeground(ITfKeystrokeMgr *iface,