Module: wine Branch: master Commit: 32828799acfd8cffd9f0d3094071acdfd4f9c84a URL: http://source.winehq.org/git/wine.git/?a=commit;h=32828799acfd8cffd9f0d30940...
Author: Aric Stewart aric@codeweavers.com Date: Thu May 7 08:31:45 2009 -0500
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 4cc71ef..2477ad8 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 976fcbc..f0c76b1 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,