From 32828799acfd8cffd9f0d3094071acdfd4f9c84a Mon Sep 17 00:00:00 2001 From: Aric Stewart Date: Thu, 7 May 2009 08:31:45 -0500 Subject: [PATCH] msctf: Implement ITfKeystrokeMgr::IsPreservedKey. --- dlls/msctf/tests/inputprocessor.c | 6 +++--- dlls/msctf/threadmgr.c | 21 +++++++++++++++++++-- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/dlls/msctf/tests/inputprocessor.c b/dlls/msctf/tests/inputprocessor.c index 4cc71efdf1a..2477ad856e9 100644 --- a/dlls/msctf/tests/inputprocessor.c +++ b/dlls/msctf/tests/inputprocessor.c @@ -420,14 +420,14 @@ static void test_KeystrokeMgr(void) preserved = FALSE; hr = ITfKeystrokeMgr_IsPreservedKey(keymgr, &CLSID_PreservedKey, &tfpk, &preserved); todo_wine ok(hr == S_OK, "ITfKeystrokeMgr_IsPreservedKey failed\n"); - if (hr == S_OK) todo_wine ok(preserved == TRUE,"misreporting preserved key\n"); + if (hr == S_OK) ok(preserved == TRUE,"misreporting preserved key\n"); hr = ITfKeystrokeMgr_UnpreserveKey(keymgr, &CLSID_PreservedKey,&tfpk); todo_wine ok(SUCCEEDED(hr),"ITfKeystrokeMgr_UnpreserveKey failed\n"); hr = ITfKeystrokeMgr_IsPreservedKey(keymgr, &CLSID_PreservedKey, &tfpk, &preserved); - todo_wine ok(hr == S_FALSE, "ITfKeystrokeMgr_IsPreservedKey failed\n"); - if (hr == S_FALSE) todo_wine ok(preserved == FALSE,"misreporting preserved key\n"); + ok(hr == S_FALSE, "ITfKeystrokeMgr_IsPreservedKey failed\n"); + if (hr == S_FALSE) ok(preserved == FALSE,"misreporting preserved key\n"); hr = ITfKeystrokeMgr_UnpreserveKey(keymgr, &CLSID_PreservedKey,&tfpk); ok(hr==CONNECT_E_NOCONNECTION,"ITfKeystrokeMgr_UnpreserveKey inproperly succeeded\n"); diff --git a/dlls/msctf/threadmgr.c b/dlls/msctf/threadmgr.c index 976fcbce27e..f0c76b16b37 100644 --- a/dlls/msctf/threadmgr.c +++ b/dlls/msctf/threadmgr.c @@ -547,8 +547,25 @@ static HRESULT WINAPI KeystrokeMgr_IsPreservedKey(ITfKeystrokeMgr *iface, REFGUID rguid, const TF_PRESERVEDKEY *pprekey, BOOL *pfRegistered) { ThreadMgr *This = impl_from_ITfKeystrokeMgrVtbl(iface); - FIXME("STUB:(%p)\n",This); - return E_NOTIMPL; + struct list *cursor; + + TRACE("(%p) %s (%x %x) %p\n",This,debugstr_guid(rguid), (pprekey)?pprekey->uVKey:0, (pprekey)?pprekey->uModifiers:0, pfRegistered); + + if (!rguid || !pprekey || !pfRegistered) + return E_INVALIDARG; + + LIST_FOR_EACH(cursor, &This->CurrentPreservedKeys) + { + PreservedKey* key = LIST_ENTRY(cursor,PreservedKey,entry); + if (IsEqualGUID(rguid,&key->guid) && pprekey->uVKey == key->prekey.uVKey && pprekey->uModifiers == key->prekey.uModifiers) + { + *pfRegistered = TRUE; + return S_OK; + } + } + + *pfRegistered = FALSE; + return S_FALSE; } static HRESULT WINAPI KeystrokeMgr_PreserveKey(ITfKeystrokeMgr *iface,