aboutsummaryrefslogtreecommitdiffhomepage
path: root/win32
diff options
context:
space:
mode:
authorZufu Liu <unknown>2019-06-30 08:34:46 +1000
committerZufu Liu <unknown>2019-06-30 08:34:46 +1000
commitd7e2afd1f88bf735b010461ff505470bfa468547 (patch)
tree0305fc8fd126909438c6da42cf90d53a3201b8c2 /win32
parent24bff87107d89a09e724993e053e7151945596e8 (diff)
downloadscintilla-mirror-d7e2afd1f88bf735b010461ff505470bfa468547.tar.gz
Bug [#2038]. Source of input reported in SCN_CHARADDED.
This may be SC_CHARACTERSOURCE_DIRECT_INPUT, SC_CHARACTERSOURCE_TENTATIVE_INPUT, or SC_CHARACTERSOURCE_IME_RESULT.
Diffstat (limited to 'win32')
-rw-r--r--win32/ScintillaWin.cxx19
1 files changed, 8 insertions, 11 deletions
diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx
index 0f79fccb5..ec9cb5498 100644
--- a/win32/ScintillaWin.cxx
+++ b/win32/ScintillaWin.cxx
@@ -340,7 +340,7 @@ class ScintillaWin :
void SelectionToHangul();
void EscapeHanja();
void ToggleHanja();
- void AddWString(std::wstring_view wsv);
+ void AddWString(std::wstring_view wsv, CharacterSource charSource);
UINT CodePageOfDocument() const;
bool ValidCodePage(int codePage) const override;
@@ -893,7 +893,7 @@ sptr_t ScintillaWin::HandleCompositionWindowed(uptr_t wParam, sptr_t lParam) {
if (lParam & GCS_RESULTSTR) {
IMContext imc(MainHWND());
if (imc.hIMC) {
- AddWString(imc.GetCompositionString(GCS_RESULTSTR));
+ AddWString(imc.GetCompositionString(GCS_RESULTSTR), CharacterSource::imeResult);
// Set new position after converted
const Point pos = PointMainCaret();
@@ -1046,7 +1046,7 @@ std::vector<int> MapImeIndicators(std::vector<BYTE> inputStyle) {
}
-void ScintillaWin::AddWString(std::wstring_view wsv) {
+void ScintillaWin::AddWString(std::wstring_view wsv, CharacterSource charSource) {
if (wsv.empty())
return;
@@ -1055,7 +1055,7 @@ void ScintillaWin::AddWString(std::wstring_view wsv) {
const size_t ucWidth = UTF16CharLength(wsv[i]);
const std::string docChar = StringEncode(wsv.substr(i, ucWidth), codePage);
- InsertCharacter(docChar);
+ InsertCharacter(docChar, charSource);
i += ucWidth;
}
}
@@ -1096,20 +1096,17 @@ sptr_t ScintillaWin::HandleCompositionInline(uptr_t, sptr_t lParam) {
std::vector<int> imeIndicator = MapImeIndicators(imc.GetImeAttributes());
- const bool tmpRecordingMacro = recordingMacro;
- recordingMacro = false;
const int codePage = CodePageOfDocument();
const std::wstring_view wsv = wcs;
for (size_t i = 0; i < wsv.size(); ) {
const size_t ucWidth = UTF16CharLength(wsv[i]);
const std::string docChar = StringEncode(wsv.substr(i, ucWidth), codePage);
- InsertCharacter(docChar);
+ InsertCharacter(docChar, CharacterSource::tentativeInput);
DrawImeIndicator(imeIndicator[i], static_cast<unsigned int>(docChar.size()));
i += ucWidth;
}
- recordingMacro = tmpRecordingMacro;
// Move IME caret from current last position to imeCaretPos.
const int imeEndToImeCaretU16 = imc.GetImeCaretPos() - static_cast<unsigned int>(wcs.size());
@@ -1121,7 +1118,7 @@ sptr_t ScintillaWin::HandleCompositionInline(uptr_t, sptr_t lParam) {
view.imeCaretBlockOverride = true;
}
} else if (lParam & GCS_RESULTSTR) {
- AddWString(imc.GetCompositionString(GCS_RESULTSTR));
+ AddWString(imc.GetCompositionString(GCS_RESULTSTR), CharacterSource::imeResult);
}
EnsureCaretVisible();
SetCandidateWindowPos();
@@ -1479,7 +1476,7 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam
lastHighSurrogateChar = 0;
wclen = 2;
}
- AddWString(std::wstring_view(wcs, wclen));
+ AddWString(std::wstring_view(wcs, wclen), CharacterSource::directInput);
}
return 0;
@@ -1491,7 +1488,7 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam
} else {
wchar_t wcs[3] = {0};
const unsigned int wclen = UTF16FromUTF32Character(static_cast<unsigned int>(wParam), wcs);
- AddWString(std::wstring_view(wcs, wclen));
+ AddWString(std::wstring_view(wcs, wclen), CharacterSource::directInput);
return FALSE;
}