Aric Stewart : msctf: Implement ITfInsertAtSelection::InsertTextAtSelection .
Alexandre Julliard
julliard at winehq.org
Thu Jun 4 07:59:32 CDT 2009
Module: wine
Branch: master
Commit: 432db51ac36b4cc635bcd2f268d1a546c8815a7e
URL: http://source.winehq.org/git/wine.git/?a=commit;h=432db51ac36b4cc635bcd2f268d1a546c8815a7e
Author: Aric Stewart <aric at codeweavers.com>
Date: Wed Jun 3 11:27:24 2009 -0500
msctf: Implement ITfInsertAtSelection::InsertTextAtSelection.
---
dlls/msctf/context.c | 31 +++++++++++++++++++++++++++++--
dlls/msctf/tests/inputprocessor.c | 24 +++++++++++++++++++++++-
2 files changed, 52 insertions(+), 3 deletions(-)
diff --git a/dlls/msctf/context.c b/dlls/msctf/context.c
index 9a0c8fe..d8322e6 100644
--- a/dlls/msctf/context.c
+++ b/dlls/msctf/context.c
@@ -613,8 +613,35 @@ static WINAPI HRESULT InsertAtSelection_InsertTextAtSelection(
const WCHAR *pchText, LONG cch, ITfRange **ppRange)
{
Context *This = impl_from_ITfInsertAtSelectionVtbl(iface);
- FIXME("STUB:(%p)\n",This);
- return E_NOTIMPL;
+ EditCookie *cookie;
+ LONG acpStart, acpEnd;
+ TS_TEXTCHANGE change;
+ HRESULT hr;
+
+ TRACE("(%p) %i %x %s %p\n",This, ec, dwFlags, debugstr_wn(pchText,cch), ppRange);
+
+ if (!This->connected)
+ return TF_E_DISCONNECTED;
+
+ if (get_Cookie_magic(ec)!=COOKIE_MAGIC_EDITCOOKIE)
+ return TF_E_NOLOCK;
+
+ cookie = get_Cookie_data(ec);
+
+ if ((cookie->lockType & TS_LF_READWRITE) != TS_LF_READWRITE )
+ return TS_E_READONLY;
+
+ if (!This->pITextStoreACP)
+ {
+ FIXME("Context does not have a ITextStoreACP\n");
+ return E_NOTIMPL;
+ }
+
+ hr = ITextStoreACP_InsertTextAtSelection(This->pITextStoreACP, dwFlags, pchText, cch, &acpStart, &acpEnd, &change);
+ if (SUCCEEDED(hr))
+ Range_Constructor((ITfContext*)This, This->pITextStoreACP, cookie->lockType, change.acpStart, change.acpNewEnd, ppRange);
+
+ return hr;
}
static WINAPI HRESULT InsertAtSelection_InsertEmbeddedAtSelection(
diff --git a/dlls/msctf/tests/inputprocessor.c b/dlls/msctf/tests/inputprocessor.c
index bdb9a62..284980e 100644
--- a/dlls/msctf/tests/inputprocessor.c
+++ b/dlls/msctf/tests/inputprocessor.c
@@ -63,6 +63,7 @@ static INT test_ACP_RequestLock = SINK_UNEXPECTED;
static INT test_ACP_GetEndACP = SINK_UNEXPECTED;
static INT test_ACP_GetSelection = SINK_UNEXPECTED;
static INT test_DoEditSession = SINK_UNEXPECTED;
+static INT test_ACP_InsertTextAtSelection = SINK_UNEXPECTED;
/**********************************************************************
@@ -223,7 +224,8 @@ static HRESULT WINAPI TextStoreACP_InsertTextAtSelection(ITextStoreACP *iface,
DWORD dwFlags, const WCHAR *pchText, ULONG cch, LONG *pacpStart,
LONG *pacpEnd, TS_TEXTCHANGE *pChange)
{
- trace("\n");
+ ok(test_ACP_InsertTextAtSelection == SINK_EXPECTED,"Unexpected TextStoreACP_InsertTextAtSelection\n");
+ test_ACP_InsertTextAtSelection = SINK_FIRED;
return S_OK;
}
static HRESULT WINAPI TextStoreACP_InsertEmbeddedAtSelection(ITextStoreACP *iface,
@@ -1371,6 +1373,24 @@ static ULONG WINAPI EditSession_Release(ITfEditSession *iface)
return ret;
}
+static void test_InsertAtSelection(TfEditCookie ec, ITfContext *cxt)
+{
+ HRESULT hr;
+ ITfInsertAtSelection *iis;
+ ITfRange *range=NULL;
+ static const WCHAR txt[] = {'H','e','l','l','o',' ','W','o','r','l','d',0};
+
+ hr = ITfContext_QueryInterface(cxt, &IID_ITfInsertAtSelection , (LPVOID*)&iis);
+ ok(SUCCEEDED(hr),"Failed to get ITfInsertAtSelection interface\n");
+ test_ACP_InsertTextAtSelection = SINK_EXPECTED;
+ hr = ITfInsertAtSelection_InsertTextAtSelection(iis, ec, 0, txt, 11, &range);
+ ok(SUCCEEDED(hr),"ITfInsertAtSelection_InsertTextAtSelection failed %x\n",hr);
+ ok(test_ACP_InsertTextAtSelection == SINK_FIRED,"expected InsertTextAtSelection not fired\n");
+ ok(range != NULL,"No range returned\n");
+ ITfRange_Release(range);
+ ITfInsertAtSelection_Release(iis);
+}
+
static HRESULT WINAPI EditSession_DoEditSession(ITfEditSession *iface,
TfEditCookie ec)
{
@@ -1427,6 +1447,8 @@ TfEditCookie ec)
ok(test_ACP_GetSelection == SINK_FIRED," expected ACP_GetSepection not fired\n");
ITfRange_Release(selection.range);
+ test_InsertAtSelection(ec, cxt);
+
ITfContext_Release(cxt);
ITfDocumentMgr_Release(dm);
return 0xdeadcafe;
More information about the wine-cvs
mailing list