Aric Stewart : msctf: Add ITfKeystrokeMgr framework to ThreadMgr.
Alexandre Julliard
julliard at winehq.org
Thu Apr 23 11:27:25 CDT 2009
Module: wine
Branch: master
Commit: 987387c7c8c88095e1b45d0dc4ce99fecf0c2912
URL: http://source.winehq.org/git/wine.git/?a=commit;h=987387c7c8c88095e1b45d0dc4ce99fecf0c2912
Author: Aric Stewart <aric at codeweavers.com>
Date: Wed Apr 22 12:37:43 2009 -0500
msctf: Add ITfKeystrokeMgr framework to ThreadMgr.
---
dlls/msctf/threadmgr.c | 168 ++++++++++++++++++++++++++++++++++++++++++++++++
include/msctf.idl | 82 +++++++++++++++++++++++
2 files changed, 250 insertions(+), 0 deletions(-)
diff --git a/dlls/msctf/threadmgr.c b/dlls/msctf/threadmgr.c
index f6f9be4..2d43a19 100644
--- a/dlls/msctf/threadmgr.c
+++ b/dlls/msctf/threadmgr.c
@@ -59,6 +59,7 @@ typedef struct tagThreadMgrSink {
typedef struct tagACLMulti {
const ITfThreadMgrVtbl *ThreadMgrVtbl;
const ITfSourceVtbl *SourceVtbl;
+ const ITfKeystrokeMgrVtbl *KeystrokeMgrVtbl;
LONG refCount;
const ITfThreadMgrEventSinkVtbl *ThreadMgrEventSinkVtbl; /* internal */
@@ -79,6 +80,11 @@ static inline ThreadMgr *impl_from_ITfSourceVtbl(ITfSource *iface)
return (ThreadMgr *)((char *)iface - FIELD_OFFSET(ThreadMgr,SourceVtbl));
}
+static inline ThreadMgr *impl_from_ITfKeystrokeMgrVtbl(ITfKeystrokeMgr *iface)
+{
+ return (ThreadMgr *)((char *)iface - FIELD_OFFSET(ThreadMgr,KeystrokeMgrVtbl));
+}
+
static inline ThreadMgr *impl_from_ITfThreadMgrEventSink(ITfThreadMgrEventSink *iface)
{
return (ThreadMgr *)((char *)iface - FIELD_OFFSET(ThreadMgr,ThreadMgrEventSinkVtbl));
@@ -153,6 +159,10 @@ static HRESULT WINAPI ThreadMgr_QueryInterface(ITfThreadMgr *iface, REFIID iid,
{
*ppvOut = &This->SourceVtbl;
}
+ else if (IsEqualIID(iid, &IID_ITfKeystrokeMgr))
+ {
+ *ppvOut = &This->KeystrokeMgrVtbl;
+ }
if (*ppvOut)
{
@@ -409,6 +419,163 @@ static const ITfSourceVtbl ThreadMgr_SourceVtbl =
};
/*****************************************************
+ * ITfKeystrokeMgr functions
+ *****************************************************/
+
+static HRESULT WINAPI KeystrokeMgr_QueryInterface(ITfKeystrokeMgr *iface, REFIID iid, LPVOID *ppvOut)
+{
+ ThreadMgr *This = impl_from_ITfKeystrokeMgrVtbl(iface);
+ return ThreadMgr_QueryInterface((ITfThreadMgr *)This, iid, *ppvOut);
+}
+
+static ULONG WINAPI KeystrokeMgr_AddRef(ITfKeystrokeMgr *iface)
+{
+ ThreadMgr *This = impl_from_ITfKeystrokeMgrVtbl(iface);
+ return ThreadMgr_AddRef((ITfThreadMgr*)This);
+}
+
+static ULONG WINAPI KeystrokeMgr_Release(ITfKeystrokeMgr *iface)
+{
+ ThreadMgr *This = impl_from_ITfKeystrokeMgrVtbl(iface);
+ return ThreadMgr_Release((ITfThreadMgr *)This);
+}
+
+static HRESULT WINAPI KeystrokeMgr_AdviseKeyEventSink(ITfKeystrokeMgr *iface,
+ TfClientId tid, ITfKeyEventSink *pSink, BOOL fForeground)
+{
+ ThreadMgr *This = impl_from_ITfKeystrokeMgrVtbl(iface);
+ FIXME("STUB:(%p)\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI KeystrokeMgr_UnadviseKeyEventSink(ITfKeystrokeMgr *iface,
+ TfClientId tid)
+{
+ ThreadMgr *This = impl_from_ITfKeystrokeMgrVtbl(iface);
+ FIXME("STUB:(%p)\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI KeystrokeMgr_GetForeground(ITfKeystrokeMgr *iface,
+ CLSID *pclsid)
+{
+ ThreadMgr *This = impl_from_ITfKeystrokeMgrVtbl(iface);
+ FIXME("STUB:(%p)\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI KeystrokeMgr_TestKeyDown(ITfKeystrokeMgr *iface,
+ WPARAM wParam, LPARAM lParam, BOOL *pfEaten)
+{
+ ThreadMgr *This = impl_from_ITfKeystrokeMgrVtbl(iface);
+ FIXME("STUB:(%p)\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI KeystrokeMgr_TestKeyUp(ITfKeystrokeMgr *iface,
+ WPARAM wParam, LPARAM lParam, BOOL *pfEaten)
+{
+ ThreadMgr *This = impl_from_ITfKeystrokeMgrVtbl(iface);
+ FIXME("STUB:(%p)\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI KeystrokeMgr_KeyDown(ITfKeystrokeMgr *iface,
+ WPARAM wParam, LPARAM lParam, BOOL *pfEaten)
+{
+ ThreadMgr *This = impl_from_ITfKeystrokeMgrVtbl(iface);
+ FIXME("STUB:(%p)\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI KeystrokeMgr_KeyUp(ITfKeystrokeMgr *iface,
+ WPARAM wParam, LPARAM lParam, BOOL *pfEaten)
+{
+ ThreadMgr *This = impl_from_ITfKeystrokeMgrVtbl(iface);
+ FIXME("STUB:(%p)\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI KeystrokeMgr_GetPreservedKey(ITfKeystrokeMgr *iface,
+ ITfContext *pic, const TF_PRESERVEDKEY *pprekey, GUID *pguid)
+{
+ ThreadMgr *This = impl_from_ITfKeystrokeMgrVtbl(iface);
+ FIXME("STUB:(%p)\n",This);
+ return E_NOTIMPL;
+}
+
+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;
+}
+
+static HRESULT WINAPI KeystrokeMgr_PreserveKey(ITfKeystrokeMgr *iface,
+ TfClientId tid, REFGUID rguid, const TF_PRESERVEDKEY *prekey,
+ const WCHAR *pchDesc, ULONG cchDesc)
+{
+ ThreadMgr *This = impl_from_ITfKeystrokeMgrVtbl(iface);
+ FIXME("STUB:(%p)\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI KeystrokeMgr_UnpreserveKey(ITfKeystrokeMgr *iface,
+ REFGUID rguid, const TF_PRESERVEDKEY *pprekey)
+{
+ ThreadMgr *This = impl_from_ITfKeystrokeMgrVtbl(iface);
+ FIXME("STUB:(%p)\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI KeystrokeMgr_SetPreservedKeyDescription(ITfKeystrokeMgr *iface,
+ REFGUID rguid, const WCHAR *pchDesc, ULONG cchDesc)
+{
+ ThreadMgr *This = impl_from_ITfKeystrokeMgrVtbl(iface);
+ FIXME("STUB:(%p)\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI KeystrokeMgr_GetPreservedKeyDescription(ITfKeystrokeMgr *iface,
+ REFGUID rguid, BSTR *pbstrDesc)
+{
+ ThreadMgr *This = impl_from_ITfKeystrokeMgrVtbl(iface);
+ FIXME("STUB:(%p)\n",This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI KeystrokeMgr_SimulatePreservedKey(ITfKeystrokeMgr *iface,
+ ITfContext *pic, REFGUID rguid, BOOL *pfEaten)
+{
+ ThreadMgr *This = impl_from_ITfKeystrokeMgrVtbl(iface);
+ FIXME("STUB:(%p)\n",This);
+ return E_NOTIMPL;
+}
+
+static const ITfKeystrokeMgrVtbl ThreadMgr_KeystrokeMgrVtbl =
+{
+ KeystrokeMgr_QueryInterface,
+ KeystrokeMgr_AddRef,
+ KeystrokeMgr_Release,
+
+ KeystrokeMgr_AdviseKeyEventSink,
+ KeystrokeMgr_UnadviseKeyEventSink,
+ KeystrokeMgr_GetForeground,
+ KeystrokeMgr_TestKeyDown,
+ KeystrokeMgr_TestKeyUp,
+ KeystrokeMgr_KeyDown,
+ KeystrokeMgr_KeyUp,
+ KeystrokeMgr_GetPreservedKey,
+ KeystrokeMgr_IsPreservedKey,
+ KeystrokeMgr_PreserveKey,
+ KeystrokeMgr_UnpreserveKey,
+ KeystrokeMgr_SetPreservedKeyDescription,
+ KeystrokeMgr_GetPreservedKeyDescription,
+ KeystrokeMgr_SimulatePreservedKey
+};
+
+/*****************************************************
* ITfThreadMgrEventSink functions (internal)
*****************************************************/
static HRESULT WINAPI ThreadMgrEventSink_QueryInterface(ITfThreadMgrEventSink *iface, REFIID iid, LPVOID *ppvOut)
@@ -550,6 +717,7 @@ HRESULT ThreadMgr_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut)
This->ThreadMgrVtbl= &ThreadMgr_ThreadMgrVtbl;
This->SourceVtbl = &ThreadMgr_SourceVtbl;
+ This->KeystrokeMgrVtbl= &ThreadMgr_KeystrokeMgrVtbl;
This->ThreadMgrEventSinkVtbl = &ThreadMgr_ThreadMgrEventSinkVtbl;
This->refCount = 1;
TlsSetValue(tlsIndex,This);
diff --git a/include/msctf.idl b/include/msctf.idl
index c81c0da..a0708ab 100644
--- a/include/msctf.idl
+++ b/include/msctf.idl
@@ -56,6 +56,7 @@ interface ITfRangeBackup;
interface IEnumTfLanguageProfiles;
interface ITfEditRecord;
interface ITfCompositionView;
+interface ITfKeyEventSink;
typedef [uuid(e1b5808d-1e46-4c19-84dc-68c5f5978cc8)] struct TF_LANGUAGEPROFILE
{
@@ -66,6 +67,12 @@ typedef [uuid(e1b5808d-1e46-4c19-84dc-68c5f5978cc8)] struct TF_LANGUAGEPROFILE
GUID guidProfile;
} TF_LANGUAGEPROFILE;
+typedef [uuid(77c12f95-b783-450d-879f-1cd2362c6521)] struct TF_PRESERVEDKEY
+{
+ UINT uVKey;
+ UINT uModifiers;
+} TF_PRESERVEDKEY;
+
[
object,
uuid(aa80e801-2021-11d2-93e0-0060b067b86e),
@@ -510,3 +517,78 @@ interface ITfThreadMgrEventSink : IUnknown
HRESULT OnPopContext(
[in] ITfContext *pic);
};
+
+[
+ object,
+ local,
+ uuid(aa80e7f0-2021-11d2-93e0-0060b067b86e),
+ pointer_default(unique)
+]
+interface ITfKeystrokeMgr : IUnknown
+{
+ HRESULT AdviseKeyEventSink(
+ [in] TfClientId tid,
+ [in] ITfKeyEventSink *pSink,
+ [in] BOOL fForeground);
+
+ HRESULT UnadviseKeyEventSink(
+ [in] TfClientId tid);
+
+ HRESULT GetForeground(
+ [out] CLSID *pclsid);
+
+ HRESULT TestKeyDown(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [out] BOOL *pfEaten);
+
+ HRESULT TestKeyUp(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [out] BOOL *pfEaten);
+
+ HRESULT KeyDown(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [out] BOOL *pfEaten);
+
+ HRESULT KeyUp(
+ [in] WPARAM wParam,
+ [in] LPARAM lParam,
+ [out] BOOL *pfEaten);
+
+ HRESULT GetPreservedKey(
+ [in] ITfContext *pic,
+ [in] const TF_PRESERVEDKEY *pprekey,
+ [out] GUID *pguid);
+
+ HRESULT IsPreservedKey(
+ [in] REFGUID rguid,
+ [in] const TF_PRESERVEDKEY *pprekey,
+ [out] BOOL *pfRegistered);
+
+ HRESULT PreserveKey(
+ [in] TfClientId tid,
+ [in] REFGUID rguid,
+ [in] const TF_PRESERVEDKEY *prekey,
+ [in, size_is(cchDesc)] const WCHAR *pchDesc,
+ [in] ULONG cchDesc);
+
+ HRESULT UnpreserveKey(
+ [in] REFGUID rguid,
+ [in] const TF_PRESERVEDKEY *pprekey);
+
+ HRESULT SetPreservedKeyDescription(
+ [in] REFGUID rguid,
+ [in, size_is(cchDesc)] const WCHAR *pchDesc,
+ [in] ULONG cchDesc);
+
+ HRESULT GetPreservedKeyDescription(
+ [in] REFGUID rguid,
+ [out] BSTR *pbstrDesc);
+
+ HRESULT SimulatePreservedKey(
+ [in] ITfContext *pic,
+ [in] REFGUID rguid,
+ [out] BOOL *pfEaten);
+};
More information about the wine-cvs
mailing list