First commit.
This commit is contained in:
commit
7b83802bb2
103 files changed
+19016
No files matched your search
@@ -0,0 +1,178 @@
|
||||
// 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 "SampleIME.h"
|
||||
#include "CandidateListUIPresenter.h"
|
||||
|
||||
//+---------------------------------------------------------------------------
|
||||
//
|
||||
// ITfThreadMgrEventSink::OnInitDocumentMgr
|
||||
//
|
||||
// Sink called by the framework just before the first context is pushed onto
|
||||
// a document.
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
STDAPI CSampleIME::OnInitDocumentMgr(_In_ ITfDocumentMgr *pDocMgr)
|
||||
{
|
||||
pDocMgr;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
//+---------------------------------------------------------------------------
|
||||
//
|
||||
// ITfThreadMgrEventSink::OnUninitDocumentMgr
|
||||
//
|
||||
// Sink called by the framework just after the last context is popped off a
|
||||
// document.
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
STDAPI CSampleIME::OnUninitDocumentMgr(_In_ ITfDocumentMgr *pDocMgr)
|
||||
{
|
||||
pDocMgr;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
//+---------------------------------------------------------------------------
|
||||
//
|
||||
// ITfThreadMgrEventSink::OnSetFocus
|
||||
//
|
||||
// Sink called by the framework when focus changes from one document to
|
||||
// another. Either document may be NULL, meaning previously there was no
|
||||
// focus document, or now no document holds the input focus.
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
STDAPI CSampleIME::OnSetFocus(_In_ ITfDocumentMgr *pDocMgrFocus, _In_ ITfDocumentMgr *pDocMgrPrevFocus)
|
||||
{
|
||||
pDocMgrPrevFocus;
|
||||
|
||||
_InitTextEditSink(pDocMgrFocus);
|
||||
|
||||
_UpdateLanguageBarOnSetFocus(pDocMgrFocus);
|
||||
|
||||
//
|
||||
// We have to hide/unhide candidate list depending on whether they are
|
||||
// associated with pDocMgrFocus.
|
||||
//
|
||||
if (_pCandidateListUIPresenter)
|
||||
{
|
||||
ITfDocumentMgr* pCandidateListDocumentMgr = nullptr;
|
||||
ITfContext* pTfContext = _pCandidateListUIPresenter->_GetContextDocument();
|
||||
if ((nullptr != pTfContext) && SUCCEEDED(pTfContext->GetDocumentMgr(&pCandidateListDocumentMgr)))
|
||||
{
|
||||
if (pCandidateListDocumentMgr != pDocMgrFocus)
|
||||
{
|
||||
_pCandidateListUIPresenter->OnKillThreadFocus();
|
||||
}
|
||||
else
|
||||
{
|
||||
_pCandidateListUIPresenter->OnSetThreadFocus();
|
||||
}
|
||||
|
||||
pCandidateListDocumentMgr->Release();
|
||||
}
|
||||
}
|
||||
|
||||
if (_pDocMgrLastFocused)
|
||||
{
|
||||
_pDocMgrLastFocused->Release();
|
||||
_pDocMgrLastFocused = nullptr;
|
||||
}
|
||||
|
||||
_pDocMgrLastFocused = pDocMgrFocus;
|
||||
|
||||
if (_pDocMgrLastFocused)
|
||||
{
|
||||
_pDocMgrLastFocused->AddRef();
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
//+---------------------------------------------------------------------------
|
||||
//
|
||||
// ITfThreadMgrEventSink::OnPushContext
|
||||
//
|
||||
// Sink called by the framework when a context is pushed.
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
STDAPI CSampleIME::OnPushContext(_In_ ITfContext *pContext)
|
||||
{
|
||||
pContext;
|
||||
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
//+---------------------------------------------------------------------------
|
||||
//
|
||||
// ITfThreadMgrEventSink::OnPopContext
|
||||
//
|
||||
// Sink called by the framework when a context is popped.
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
STDAPI CSampleIME::OnPopContext(_In_ ITfContext *pContext)
|
||||
{
|
||||
pContext;
|
||||
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
//+---------------------------------------------------------------------------
|
||||
//
|
||||
// _InitThreadMgrEventSink
|
||||
//
|
||||
// Advise our sink.
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
BOOL CSampleIME::_InitThreadMgrEventSink()
|
||||
{
|
||||
ITfSource* pSource = nullptr;
|
||||
BOOL ret = FALSE;
|
||||
|
||||
if (FAILED(_pThreadMgr->QueryInterface(IID_ITfSource, (void **)&pSource)))
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (FAILED(pSource->AdviseSink(IID_ITfThreadMgrEventSink, (ITfThreadMgrEventSink *)this, &_threadMgrEventSinkCookie)))
|
||||
{
|
||||
_threadMgrEventSinkCookie = TF_INVALID_COOKIE;
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
ret = TRUE;
|
||||
|
||||
Exit:
|
||||
pSource->Release();
|
||||
return ret;
|
||||
}
|
||||
|
||||
//+---------------------------------------------------------------------------
|
||||
//
|
||||
// _UninitThreadMgrEventSink
|
||||
//
|
||||
// Unadvise our sink.
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
void CSampleIME::_UninitThreadMgrEventSink()
|
||||
{
|
||||
ITfSource* pSource = nullptr;
|
||||
|
||||
if (_threadMgrEventSinkCookie == TF_INVALID_COOKIE)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (SUCCEEDED(_pThreadMgr->QueryInterface(IID_ITfSource, (void **)&pSource)))
|
||||
{
|
||||
pSource->UnadviseSink(_threadMgrEventSinkCookie);
|
||||
pSource->Release();
|
||||
}
|
||||
|
||||
_threadMgrEventSinkCookie = TF_INVALID_COOKIE;
|
||||
}
|
||||
Reference in new issue
Block a user