forked from rime/weasel
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ThreadMgrEventSink.cpp
62 lines (53 loc) · 1.65 KB
/
ThreadMgrEventSink.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "stdafx.h"
#include "WeaselTSF.h"
STDAPI WeaselTSF::OnInitDocumentMgr(ITfDocumentMgr* pDocMgr) {
return S_OK;
}
STDAPI WeaselTSF::OnUninitDocumentMgr(ITfDocumentMgr* pDocMgr) {
return S_OK;
}
STDAPI WeaselTSF::OnSetFocus(ITfDocumentMgr* pDocMgrFocus,
ITfDocumentMgr* pDocMgrPrevFocus) {
_InitTextEditSink(pDocMgrFocus);
com_ptr<ITfDocumentMgr> pCandidateListDocumentMgr;
com_ptr<ITfContext> pTfContext = _GetUIContextDocument();
if ((nullptr != pTfContext) &&
SUCCEEDED(pTfContext->GetDocumentMgr(&pCandidateListDocumentMgr))) {
if (pCandidateListDocumentMgr != pDocMgrFocus) {
_HideUI();
} else {
_ShowUI();
}
}
return S_OK;
}
STDAPI WeaselTSF::OnPushContext(ITfContext* pContext) {
return S_OK;
}
STDAPI WeaselTSF::OnPopContext(ITfContext* pContext) {
return S_OK;
}
BOOL WeaselTSF::_InitThreadMgrEventSink() {
ITfSource* pSource;
if (_pThreadMgr->QueryInterface(IID_ITfSource, (void**)&pSource) != S_OK)
return FALSE;
if (pSource->AdviseSink(IID_ITfThreadMgrEventSink,
(ITfThreadMgrEventSink*)this,
&_dwThreadMgrEventSinkCookie) != S_OK) {
_dwThreadMgrEventSinkCookie = TF_INVALID_COOKIE;
pSource->Release();
return FALSE;
}
pSource->Release();
return TRUE;
}
void WeaselTSF::_UninitThreadMgrEventSink() {
ITfSource* pSource;
if (_dwThreadMgrEventSinkCookie == TF_INVALID_COOKIE)
return;
if (SUCCEEDED(_pThreadMgr->QueryInterface(IID_ITfSource, (void**)&pSource))) {
pSource->UnadviseSink(_dwThreadMgrEventSinkCookie);
pSource->Release();
}
_dwThreadMgrEventSinkCookie = TF_INVALID_COOKIE;
}