forked from rime/weasel
-
Notifications
You must be signed in to change notification settings - Fork 0
/
EditSession.cpp
50 lines (43 loc) · 1.3 KB
/
EditSession.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
#include "stdafx.h"
#include "WeaselTSF.h"
#include "CandidateList.h"
#include "ResponseParser.h"
STDAPI WeaselTSF::DoEditSession(TfEditCookie ec)
{
// get commit string from server
std::wstring commit;
weasel::Status status;
weasel::Config config;
auto context = std::make_shared<weasel::Context>();
weasel::ResponseParser parser(&commit, context.get(), &status, &config, &_cand->style());
bool ok = m_client.GetResponseData(std::ref(parser));
_UpdateUI(*context, status);
_UpdateLanguageBar(status);
if (ok)
{
if (!commit.empty())
{
// For auto-selecting, commit and preedit can both exist.
// Commit and close the original composition first.
if (!_IsComposing()) {
_StartComposition(_pEditSessionContext, _fCUASWorkaroundEnabled && !config.inline_preedit);
}
_InsertText(_pEditSessionContext, commit);
_EndComposition(_pEditSessionContext, false);
}
if (status.composing && !_IsComposing())
{
_StartComposition(_pEditSessionContext, _fCUASWorkaroundEnabled && !config.inline_preedit);
}
else if (!status.composing && _IsComposing())
{
_EndComposition(_pEditSessionContext, true);
}
_UpdateCompositionWindow(_pEditSessionContext);
if (_IsComposing() && config.inline_preedit)
{
_ShowInlinePreedit(_pEditSessionContext, context);
}
}
return TRUE;
}