[PATCH 2/3] msctf: Add ITfUIElementMgr stub.

Matteo Bruni mbruni at codeweavers.com
Wed Oct 28 16:27:26 CDT 2015


Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
---
This one is also queried by World of Warships but the game allows for
the query to fail. I guess it's worth sending nevertheless...

 dlls/msctf/threadmgr.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++++-
 include/msctf.idl      | 70 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 161 insertions(+), 1 deletion(-)

diff --git a/dlls/msctf/threadmgr.c b/dlls/msctf/threadmgr.c
index b56d558..d997cda 100644
--- a/dlls/msctf/threadmgr.c
+++ b/dlls/msctf/threadmgr.c
@@ -87,7 +87,7 @@ typedef struct tagACLMulti {
     /* const ITfThreadMgrExVtbl *ThreadMgrExVtbl; */
     /* const ITfConfigureSystemKeystrokeFeedVtbl *ConfigureSystemKeystrokeFeedVtbl; */
     /* const ITfLangBarItemMgrVtbl *LangBarItemMgrVtbl; */
-    /* const ITfUIElementMgrVtbl *UIElementMgrVtbl; */
+    ITfUIElementMgr ITfUIElementMgr_iface;
     ITfSourceSingle ITfSourceSingle_iface;
     LONG refCount;
 
@@ -157,6 +157,11 @@ static inline ThreadMgr *impl_from_ITfThreadMgrEventSink(ITfThreadMgrEventSink *
     return CONTAINING_RECORD(iface, ThreadMgr, ITfThreadMgrEventSink_iface);
 }
 
+static inline ThreadMgr *impl_from_ITfUIElementMgr(ITfUIElementMgr *iface)
+{
+    return CONTAINING_RECORD(iface, ThreadMgr, ITfUIElementMgr_iface);
+}
+
 static inline ThreadMgr *impl_from_ITfSourceSingle(ITfSourceSingle *iface)
 {
     return CONTAINING_RECORD(iface, ThreadMgr, ITfSourceSingle_iface);
@@ -282,6 +287,10 @@ static HRESULT WINAPI ThreadMgr_QueryInterface(ITfThreadMgrEx *iface, REFIID iid
     {
         *ppvOut = This->CompartmentMgr;
     }
+    else if (IsEqualIID(iid, &IID_ITfUIElementMgr))
+    {
+        *ppvOut = &This->ITfUIElementMgr_iface;
+    }
     else if (IsEqualIID(iid, &IID_ITfSourceSingle))
     {
         *ppvOut = &This->ITfSourceSingle_iface;
@@ -1239,6 +1248,86 @@ static const ITfThreadMgrEventSinkVtbl ThreadMgrEventSinkVtbl =
 };
 
 /*****************************************************
+ * ITfUIElementMgr functions
+ *****************************************************/
+static HRESULT WINAPI UIElementMgr_QueryInterface(ITfUIElementMgr *iface, REFIID iid, void **ppvOut)
+{
+    ThreadMgr *This = impl_from_ITfUIElementMgr(iface);
+
+    return ITfThreadMgrEx_QueryInterface(&This->ITfThreadMgrEx_iface, iid, *ppvOut);
+}
+
+static ULONG WINAPI UIElementMgr_AddRef(ITfUIElementMgr *iface)
+{
+    ThreadMgr *This = impl_from_ITfUIElementMgr(iface);
+
+    return ITfThreadMgrEx_AddRef(&This->ITfThreadMgrEx_iface);
+}
+
+static ULONG WINAPI UIElementMgr_Release(ITfUIElementMgr *iface)
+{
+    ThreadMgr *This = impl_from_ITfUIElementMgr(iface);
+
+    return ITfThreadMgrEx_Release(&This->ITfThreadMgrEx_iface);
+}
+
+static HRESULT WINAPI UIElementMgr_BeginUIElement(ITfUIElementMgr *iface, ITfUIElement *element,
+                                                  BOOL *show, DWORD *id)
+{
+    ThreadMgr *This = impl_from_ITfUIElementMgr(iface);
+
+    FIXME("STUB:(%p)\n", This);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI UIElementMgr_UpdateUIElement(ITfUIElementMgr *iface, DWORD id)
+{
+    ThreadMgr *This = impl_from_ITfUIElementMgr(iface);
+
+    FIXME("STUB:(%p)\n", This);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI UIElementMgr_EndUIElement(ITfUIElementMgr *iface, DWORD id)
+{
+    ThreadMgr *This = impl_from_ITfUIElementMgr(iface);
+
+    FIXME("STUB:(%p)\n", This);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI UIElementMgr_GetUIElement(ITfUIElementMgr *iface, DWORD id,
+                                                ITfUIElement **element)
+{
+    ThreadMgr *This = impl_from_ITfUIElementMgr(iface);
+
+    FIXME("STUB:(%p)\n", This);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI UIElementMgr_EnumUIElements(ITfUIElementMgr *iface,
+                                                  IEnumTfUIElements **enum_elements)
+{
+    ThreadMgr *This = impl_from_ITfUIElementMgr(iface);
+
+    FIXME("STUB:(%p)\n", This);
+    return E_NOTIMPL;
+}
+
+static const ITfUIElementMgrVtbl ThreadMgrUIElementMgrVtbl =
+{
+    UIElementMgr_QueryInterface,
+    UIElementMgr_AddRef,
+    UIElementMgr_Release,
+
+    UIElementMgr_BeginUIElement,
+    UIElementMgr_UpdateUIElement,
+    UIElementMgr_EndUIElement,
+    UIElementMgr_GetUIElement,
+    UIElementMgr_EnumUIElements
+};
+
+/*****************************************************
  * ITfSourceSingle functions
  *****************************************************/
 static HRESULT WINAPI ThreadMgrSourceSingle_QueryInterface(ITfSourceSingle *iface, REFIID iid, LPVOID *ppvOut)
@@ -1309,6 +1398,7 @@ HRESULT ThreadMgr_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut)
     This->ITfMessagePump_iface.lpVtbl = &MessagePumpVtbl;
     This->ITfClientId_iface.lpVtbl = &ClientIdVtbl;
     This->ITfThreadMgrEventSink_iface.lpVtbl = &ThreadMgrEventSinkVtbl;
+    This->ITfUIElementMgr_iface.lpVtbl = &ThreadMgrUIElementMgrVtbl;
     This->ITfSourceSingle_iface.lpVtbl = &SourceSingleVtbl;
     This->refCount = 1;
     TlsSetValue(tlsIndex,This);
diff --git a/include/msctf.idl b/include/msctf.idl
index 0fe2d71..0cfaacf 100644
--- a/include/msctf.idl
+++ b/include/msctf.idl
@@ -1655,6 +1655,76 @@ interface IEnumTfDocumentMgrs : IUnknown
 }
 
 [
+    object,
+    local,
+    uuid(ea1ea137-19df-11d7-a6d2-00065b84435c),
+    pointer_default(unique)
+]
+interface ITfUIElement : IUnknown
+{
+    HRESULT GetDescription(
+        [out] BSTR *description);
+
+    HRESULT GetGUID(
+        [out] GUID *guid);
+
+    HRESULT Show(
+        [in] BOOL show);
+
+    HRESULT IsShown(
+        [out] BOOL *show);
+}
+
+[
+    object,
+    local,
+    uuid(887aa91e-acba-4931-84da-3c5208cf543f),
+    pointer_default(unique)
+]
+interface IEnumTfUIElements : IUnknown
+{
+    HRESULT Clone(
+        [out] IEnumTfUIElements **enum_elements);
+
+    HRESULT Next(
+        [in] ULONG count,
+        [out, size_is(count), length_is(fetched)] ITfUIElement **element,
+        [out] ULONG fetched);
+
+    HRESULT Reset();
+
+    HRESULT Skip(
+        [in] ULONG count);
+}
+
+[
+    object,
+    local,
+    uuid(ea1ea135-19df-11d7-a6d2-00065b84435c),
+    pointer_default(unique)
+]
+interface ITfUIElementMgr : IUnknown
+{
+    HRESULT BeginUIElement(
+        [in] ITfUIElement *element,
+        [in, out] BOOL *show,
+        [out] DWORD *id);
+
+    HRESULT UpdateUIElement(
+        [in] DWORD id);
+
+    HRESULT EndUIElement(
+        [in] DWORD id);
+
+    HRESULT GetUIElement(
+        [in] DWORD id,
+        [out] ITfUIElement **element);
+
+    HRESULT EnumUIElements(
+        [out] IEnumTfUIElements **enum_elements);
+}
+
+[
   object,
   uuid(73131f9c-56a9-49dd-b0ee-d046633f7528),
   pointer_default(unique)
-- 
2.4.10




More information about the wine-patches mailing list