msctf: Implement ITfContext::SetSelection.
This commit is contained in:
parent
432db51ac3
commit
584175bedf
|
@ -349,11 +349,41 @@ static HRESULT WINAPI Context_GetSelection (ITfContext *iface,
|
|||
static HRESULT WINAPI Context_SetSelection (ITfContext *iface,
|
||||
TfEditCookie ec, ULONG ulCount, const TF_SELECTION *pSelection)
|
||||
{
|
||||
TS_SELECTION_ACP *acp;
|
||||
Context *This = (Context *)iface;
|
||||
FIXME("STUB:(%p)\n",This);
|
||||
INT i;
|
||||
HRESULT hr;
|
||||
|
||||
TRACE("(%p) %i %i %p\n",This,ec,ulCount,pSelection);
|
||||
|
||||
if (!This->pITextStoreACP)
|
||||
{
|
||||
FIXME("Context does not have a ITextStoreACP\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
if (get_Cookie_magic(ec)!=COOKIE_MAGIC_EDITCOOKIE)
|
||||
return TF_E_NOLOCK;
|
||||
|
||||
acp = HeapAlloc(GetProcessHeap(), 0, sizeof(TS_SELECTION_ACP) * ulCount);
|
||||
if (!acp)
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
for (i = 0; i < ulCount; i++)
|
||||
if (FAILED(TF_SELECTION_to_TS_SELECTION_ACP(&pSelection[i], &acp[i])))
|
||||
{
|
||||
TRACE("Selection Conversion Failed\n");
|
||||
HeapFree(GetProcessHeap(), 0 , acp);
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
hr = ITextStoreACP_SetSelection(This->pITextStoreACP, ulCount, acp);
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, acp);
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI Context_GetStart (ITfContext *iface,
|
||||
TfEditCookie ec, ITfRange **ppStart)
|
||||
{
|
||||
|
|
|
@ -39,6 +39,7 @@ extern HRESULT Range_Constructor(ITfContext *context, ITextStoreACP *textstore,
|
|||
|
||||
extern HRESULT Context_Initialize(ITfContext *cxt);
|
||||
extern HRESULT Context_Uninitialize(ITfContext *cxt);
|
||||
extern HRESULT TF_SELECTION_to_TS_SELECTION_ACP(const TF_SELECTION *tf, TS_SELECTION_ACP *tsAcp);
|
||||
|
||||
/* cookie function */
|
||||
extern DWORD generate_Cookie(DWORD magic, LPVOID data);
|
||||
|
|
|
@ -344,3 +344,19 @@ HRESULT Range_Constructor(ITfContext *context, ITextStoreACP *textstore, DWORD l
|
|||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
/* Internal conversion functions */
|
||||
|
||||
HRESULT TF_SELECTION_to_TS_SELECTION_ACP(const TF_SELECTION *tf, TS_SELECTION_ACP *tsAcp)
|
||||
{
|
||||
Range *This = (Range *)tf->range;
|
||||
|
||||
if (!tf || !tsAcp || !tf->range)
|
||||
return E_INVALIDARG;
|
||||
|
||||
tsAcp->acpStart = This->anchorStart;
|
||||
tsAcp->acpEnd = This->anchorEnd;
|
||||
tsAcp->style.ase = tf->style.ase;
|
||||
tsAcp->style.fInterimChar = tf->style.fInterimChar;
|
||||
return S_OK;
|
||||
}
|
||||
|
|
|
@ -64,6 +64,7 @@ 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;
|
||||
static INT test_ACP_SetSelection = SINK_UNEXPECTED;
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
|
@ -177,7 +178,8 @@ static HRESULT WINAPI TextStoreACP_GetSelection(ITextStoreACP *iface,
|
|||
static HRESULT WINAPI TextStoreACP_SetSelection(ITextStoreACP *iface,
|
||||
ULONG ulCount, const TS_SELECTION_ACP *pSelection)
|
||||
{
|
||||
trace("\n");
|
||||
ok(test_ACP_SetSelection == SINK_EXPECTED,"Unexpected TextStoreACP_SetSelection\n");
|
||||
test_ACP_SetSelection = SINK_FIRED;
|
||||
return S_OK;
|
||||
}
|
||||
static HRESULT WINAPI TextStoreACP_GetText(ITextStoreACP *iface,
|
||||
|
@ -1449,6 +1451,20 @@ TfEditCookie ec)
|
|||
|
||||
test_InsertAtSelection(ec, cxt);
|
||||
|
||||
test_ACP_GetEndACP = SINK_EXPECTED;
|
||||
hr = ITfContext_GetEnd(cxt,ec,&range);
|
||||
ok(SUCCEEDED(hr),"Unexpected return code %x\n",hr);
|
||||
ok(range != NULL,"Range set to NULL\n");
|
||||
ok(test_ACP_GetEndACP == SINK_FIRED, "GetEndACP not fired as expected\n");
|
||||
|
||||
selection.range = range;
|
||||
selection.style.ase = TF_AE_NONE;
|
||||
selection.style.fInterimChar = FALSE;
|
||||
test_ACP_SetSelection = SINK_EXPECTED;
|
||||
hr = ITfContext_SetSelection(cxt, ec, 1, &selection);
|
||||
ok(test_ACP_SetSelection == SINK_FIRED, "SetSelection not fired as expected\n");
|
||||
ITfRange_Release(range);
|
||||
|
||||
ITfContext_Release(cxt);
|
||||
ITfDocumentMgr_Release(dm);
|
||||
return 0xdeadcafe;
|
||||
|
|
Loading…
Reference in New Issue