You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.9 KiB
111 lines
3.9 KiB
//
|
|
// cleanup.cpp
|
|
//
|
|
// ITfCleanupContextDurationSink, ITfCleanupContextSink implementation.
|
|
//
|
|
|
|
#include "globals.h"
|
|
#include "mark.h"
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// ITfCleanupContextDurationSink::OnStartCleanupContext
|
|
//
|
|
// TSF calls this method before it starts making OnCleanupContext callbacks.
|
|
// When this happens, we know we're just about to be shut down, and this will
|
|
// be our last chance to modify text in the document. So we'll set a flag so
|
|
// we know not to initialize any contexts that might get created during the
|
|
// shutdown.
|
|
//----------------------------------------------------------------------------
|
|
|
|
STDAPI CMarkTextService::OnStartCleanupContext()
|
|
{
|
|
_fCleaningUp = TRUE;
|
|
return S_OK;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// ITfCleanupContextDurationSink::OnEndCleanupContext
|
|
//
|
|
// Clear the cleanup flag.
|
|
//----------------------------------------------------------------------------
|
|
|
|
STDAPI CMarkTextService::OnEndCleanupContext()
|
|
{
|
|
_fCleaningUp = FALSE;
|
|
return S_OK;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// ITfCleanupContextSink::OnCleanupContext
|
|
//
|
|
// The system calls this method if we're about to be deactivated. It's our
|
|
// last chance to modify text in the context. This is the time to abort any
|
|
// ongoing compositions.
|
|
//
|
|
// You won't see this callback shutting down the app if the app destroys all
|
|
// contexts before deactivating TSF. Another way to get here is by installing
|
|
// a non-english keyboard layout or text service. If you switch languages
|
|
// from english, the mark text service will be shut down before the context,
|
|
// and this method will be called.
|
|
//
|
|
// There's intentionally no way to get an edit cookie when a context is popped.
|
|
// In this case, it is assumed the context state is going to be thrown away.
|
|
// It's the owner's responsibility to terminate any compositions/text services
|
|
// before a Pop if they care about the contents afterwards.
|
|
//----------------------------------------------------------------------------
|
|
|
|
STDAPI CMarkTextService::OnCleanupContext(TfEditCookie ecWrite, ITfContext *pContext)
|
|
{
|
|
// this sample has nothing to do here...a real text service wouldn't bother
|
|
// to advise the sink in the first place if it took no action
|
|
return S_OK;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// _InitCleanupContextSink
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
BOOL CMarkTextService::_InitCleanupContextDurationSink()
|
|
{
|
|
return AdviseSingleSink(_tfClientId, _pThreadMgr, (ITfCleanupContextDurationSink *)this,
|
|
IID_ITfCleanupContextDurationSink);
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// _UninitCleanupContextSink
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
void CMarkTextService::_UninitCleanupContextDurationSink()
|
|
{
|
|
UnadviseSingleSink(_tfClientId, _pThreadMgr, IID_ITfCleanupContextDurationSink);
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// _InitCleanupContextSink
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
BOOL CMarkTextService::_InitCleanupContextSink(ITfContext *pContext)
|
|
{
|
|
return AdviseSingleSink(_tfClientId, pContext, (ITfCleanupContextSink *)this,
|
|
IID_ITfCleanupContextSink);
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// _UninitCleanupContextSink
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
void CMarkTextService::_UninitCleanupContextSink(ITfContext *pContext)
|
|
{
|
|
UnadviseSingleSink(_tfClientId, pContext, IID_ITfCleanupContextSink);
|
|
}
|