// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A // PARTICULAR PURPOSE. // // Copyright (c) Microsoft Corporation. All rights reserved #include "Private.h" #include "Globals.h" #include "EditSession.h" #include "SampleIME.h" ////////////////////////////////////////////////////////////////////// // // ITfEditSession // CEditSessionBase // CEndCompositionEditSession class // ////////////////////////////////////////////////////////////////////// //+--------------------------------------------------------------------------- // // CEndCompositionEditSession // //---------------------------------------------------------------------------- class CEndCompositionEditSession : public CEditSessionBase { public: CEndCompositionEditSession(_In_ CSampleIME *pTextService, _In_ ITfContext *pContext) : CEditSessionBase(pTextService, pContext) { } // ITfEditSession STDMETHODIMP DoEditSession(TfEditCookie ec) { _pTextService->_TerminateComposition(ec, _pContext, TRUE); return S_OK; } }; ////////////////////////////////////////////////////////////////////// // // CSampleIME class // ////////////////////////////////////////////////////////////////////// //+--------------------------------------------------------------------------- // // _TerminateComposition // //---------------------------------------------------------------------------- void CSampleIME::_TerminateComposition(TfEditCookie ec, _In_ ITfContext *pContext, BOOL isCalledFromDeactivate) { isCalledFromDeactivate; if (_pComposition != nullptr) { // remove the display attribute from the composition range. _ClearCompositionDisplayAttributes(ec, pContext); if (FAILED(_pComposition->EndComposition(ec))) { // if we fail to EndComposition, then we need to close the reverse reading window. _DeleteCandidateList(TRUE, pContext); } _pComposition->Release(); _pComposition = nullptr; if (_pContext) { _pContext->Release(); _pContext = nullptr; } } } //+--------------------------------------------------------------------------- // // _EndComposition // //---------------------------------------------------------------------------- void CSampleIME::_EndComposition(_In_opt_ ITfContext *pContext) { CEndCompositionEditSession *pEditSession = new (std::nothrow) CEndCompositionEditSession(this, pContext); HRESULT hr = S_OK; if (nullptr != pEditSession) { pContext->RequestEditSession(_tfClientId, pEditSession, TF_ES_ASYNCDONTCARE | TF_ES_READWRITE, &hr); pEditSession->Release(); } }