Aric Stewart : msctf: Add ITfThreadMgrEventSink to ThreadMgr.

Alexandre Julliard julliard at winehq.org
Wed Mar 25 10:31:31 CDT 2009


Module: wine
Branch: master
Commit: 1f21795f93131a8b06004fffff44bd937f5ec59f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=1f21795f93131a8b06004fffff44bd937f5ec59f

Author: Aric Stewart <aric at codeweavers.com>
Date:   Tue Mar 24 08:21:39 2009 -0500

msctf: Add ITfThreadMgrEventSink to ThreadMgr.

---

 dlls/msctf/threadmgr.c |   34 +++++++++++++++++++++++++++++++---
 include/msctf.idl      |   24 ++++++++++++++++++++++++
 2 files changed, 55 insertions(+), 3 deletions(-)

diff --git a/dlls/msctf/threadmgr.c b/dlls/msctf/threadmgr.c
index eb5918e..080c023 100644
--- a/dlls/msctf/threadmgr.c
+++ b/dlls/msctf/threadmgr.c
@@ -32,6 +32,7 @@
 #include "shlwapi.h"
 #include "winerror.h"
 #include "objbase.h"
+#include "olectl.h"
 
 #include "wine/unicode.h"
 #include "wine/list.h"
@@ -51,7 +52,7 @@ typedef struct tagThreadMgrSink {
         /* ITfKeyTraceEventSink *pITfKeyTraceEventSink; */
         /* ITfPreservedKeyNotifySink *pITfPreservedKeyNotifySink; */
         /* ITfThreadFocusSink *pITfThreadFocusSink; */
-        /* ITfThreadMgrEventSink *pITfThreadMgrEventSink; */
+        ITfThreadMgrEventSink *pITfThreadMgrEventSink;
     } interfaces;
 } ThreadMgrSink;
 
@@ -327,9 +328,36 @@ static ULONG WINAPI Source_Release(ITfSource *iface)
 static WINAPI HRESULT ThreadMgrSource_AdviseSink(ITfSource *iface,
         REFIID riid, IUnknown *punk, DWORD *pdwCookie)
 {
+    ThreadMgrSink *tms;
     ThreadMgr *This = impl_from_ITfSourceVtbl(iface);
-    FIXME("STUB:(%p)\n",This);
-    return E_NOTIMPL;
+
+    TRACE("(%p) %s %p %p\n",This,debugstr_guid(riid),punk,pdwCookie);
+
+    if (!riid || !punk || !pdwCookie)
+        return E_INVALIDARG;
+
+    if (IsEqualIID(riid, &IID_ITfThreadMgrEventSink))
+    {
+        tms = HeapAlloc(GetProcessHeap(),0,sizeof(ThreadMgrSink));
+        if (!tms)
+            return E_OUTOFMEMORY;
+        if (!SUCCEEDED(IUnknown_QueryInterface(punk, riid, (LPVOID*)&tms->interfaces.pITfThreadMgrEventSink)))
+        {
+            HeapFree(GetProcessHeap(),0,tms);
+            return CONNECT_E_CANNOTCONNECT;
+        }
+        list_add_head(&This->ThreadMgrEventSink,&tms->entry);
+        *pdwCookie = (DWORD)tms;
+    }
+    else
+    {
+        FIXME("(%p) Unhandled Sink: %s\n",This,debugstr_guid(riid));
+        return E_NOTIMPL;
+    }
+
+    TRACE("cookie %x\n",*pdwCookie);
+
+    return S_OK;
 }
 
 static WINAPI HRESULT ThreadMgrSource_UnadviseSink(ITfSource *iface, DWORD pdwCookie)
diff --git a/include/msctf.idl b/include/msctf.idl
index d9c9710..c81c0da 100644
--- a/include/msctf.idl
+++ b/include/msctf.idl
@@ -486,3 +486,27 @@ interface ITfTextInputProcessor : IUnknown
 
     HRESULT Deactivate();
 };
+
+[
+  object,
+  uuid(aa80e80e-2021-11d2-93e0-0060b067b86e),
+  pointer_default(unique)
+]
+interface ITfThreadMgrEventSink : IUnknown
+{
+    HRESULT OnInitDocumentMgr(
+        [in] ITfDocumentMgr *pdim);
+
+    HRESULT OnUninitDocumentMgr(
+        [in] ITfDocumentMgr *pdim);
+
+    HRESULT OnSetFocus(
+        [in] ITfDocumentMgr *pdimFocus,
+        [in] ITfDocumentMgr *pdimPrevFocus);
+
+    HRESULT OnPushContext(
+        [in] ITfContext *pic);
+
+    HRESULT OnPopContext(
+        [in] ITfContext *pic);
+};




More information about the wine-cvs mailing list