Aric Stewart : msctf: Implement ITfDocumentMgr::Push.

Alexandre Julliard julliard at winehq.org
Tue Feb 3 09:13:23 CST 2009


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

Author: Aric Stewart <aric at codeweavers.com>
Date:   Mon Feb  2 10:25:06 2009 -0600

msctf: Implement ITfDocumentMgr::Push.

---

 dlls/msctf/documentmgr.c |   22 ++++++++++++++++++++--
 include/msctf.idl        |    1 +
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/dlls/msctf/documentmgr.c b/dlls/msctf/documentmgr.c
index 6245037..eb6e4d2 100644
--- a/dlls/msctf/documentmgr.c
+++ b/dlls/msctf/documentmgr.c
@@ -43,11 +43,17 @@ WINE_DEFAULT_DEBUG_CHANNEL(msctf);
 typedef struct tagDocumentMgr {
     const ITfDocumentMgrVtbl *DocumentMgrVtbl;
     LONG refCount;
+
+    ITfContext*  contextStack[2]; /* limit of 2 contexts */
 } DocumentMgr;
 
 static void DocumentMgr_Destructor(DocumentMgr *This)
 {
     TRACE("destroying %p\n", This);
+    if (This->contextStack[0])
+        ITfContext_Release(This->contextStack[0]);
+    if (This->contextStack[1])
+        ITfContext_Release(This->contextStack[1]);
     HeapFree(GetProcessHeap(),0,This);
 }
 
@@ -104,8 +110,20 @@ static HRESULT WINAPI DocumentMgr_CreateContext(ITfDocumentMgr *iface,
 static HRESULT WINAPI DocumentMgr_Push(ITfDocumentMgr *iface, ITfContext *pic)
 {
     DocumentMgr *This = (DocumentMgr *)iface;
-    FIXME("STUB:(%p)\n",This);
-    return E_NOTIMPL;
+    ITfContext *check;
+
+    TRACE("(%p) %p\n",This,pic);
+
+    if (This->contextStack[1])  /* FUll */
+        return TF_E_STACKFULL;
+
+    if (!pic || FAILED(IUnknown_QueryInterface(pic,&IID_ITfContext,(LPVOID*) &check)))
+        return E_INVALIDARG;
+
+    This->contextStack[1] = This->contextStack[0];
+    This->contextStack[0] = check;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI DocumentMgr_Pop(ITfDocumentMgr *iface, DWORD dwFlags)
diff --git a/include/msctf.idl b/include/msctf.idl
index 29f3a80..fffac33 100644
--- a/include/msctf.idl
+++ b/include/msctf.idl
@@ -23,6 +23,7 @@ import "textstor.idl";
 /* import "ctfutb.idl"; */
 #endif
 
+cpp_quote("#define TF_E_STACKFULL MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0501)")
 cpp_quote("EXTERN_C const CLSID CLSID_TF_ThreadMgr;")
 
 typedef [uuid(7213778c-7bb0-4270-b050-6189ee594e97)]  DWORD TfEditCookie;




More information about the wine-cvs mailing list