diff options
author | johnsonj <unknown> | 2016-04-14 23:21:56 +1000 |
---|---|---|
committer | johnsonj <unknown> | 2016-04-14 23:21:56 +1000 |
commit | 483bbe47309348d096388379c1ad03e2082f647f (patch) | |
tree | 262eb1745b5b08c52a2664c2e34756b283826140 /qt/ScintillaEditBase/ScintillaEditBase.cpp | |
parent | 2af8e440eb93ba6e03de7b495bfce70016ed5868 (diff) | |
download | scintilla-mirror-483bbe47309348d096388379c1ad03e2082f647f.tar.gz |
Simplified IME caret positioning.
Diffstat (limited to 'qt/ScintillaEditBase/ScintillaEditBase.cpp')
-rw-r--r-- | qt/ScintillaEditBase/ScintillaEditBase.cpp | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/qt/ScintillaEditBase/ScintillaEditBase.cpp b/qt/ScintillaEditBase/ScintillaEditBase.cpp index 7d24d0f4c..9656af283 100644 --- a/qt/ScintillaEditBase/ScintillaEditBase.cpp +++ b/qt/ScintillaEditBase/ScintillaEditBase.cpp @@ -541,10 +541,6 @@ void ScintillaEditBase::inputMethodEvent(QInputMethodEvent *event) std::vector<int> imeIndicator = MapImeIndicators(event); - // Display preedit characters one by one. - int imeCharPos[MAXLENINPUTIME] = {0}; - int numBytes = 0; - const bool recording = sqt->recordingMacro; sqt->recordingMacro = false; for (unsigned int i = 0; i < preeditStrLen;) { @@ -553,25 +549,26 @@ void ScintillaEditBase::inputMethodEvent(QInputMethodEvent *event) const QByteArray oneChar = sqt->BytesForDocument(oneCharUTF16); const int oneCharLen = oneChar.length(); - // Record character positions for moving ime caret. - numBytes += oneCharLen; - imeCharPos[i + ucWidth] = numBytes; - sqt->AddCharUTF(oneChar.data(), oneCharLen); DrawImeIndicator(imeIndicator[i], oneCharLen); - i += ucWidth; } sqt->recordingMacro = recording; // Move IME carets. int imeCaretPos = GetImeCaretPos(event); - MoveImeCarets(- imeCharPos[preeditStrLen] + imeCharPos[imeCaretPos]); + int imeEndToImeCaretU16 = imeCaretPos - preeditStrLen; + int imeCaretPosDoc = sqt->pdoc->GetRelativePositionUTF16(sqt->CurrentPosition(), imeEndToImeCaretU16); + + MoveImeCarets(- sqt->CurrentPosition() + imeCaretPosDoc); if (IsHangul(preeditStr.at(0))) { #ifndef Q_OS_WIN - MoveImeCarets(- imeCharPos[1]); + if (imeCaretPos > 0) { + int oneCharBefore = sqt->pdoc->GetRelativePosition(sqt->CurrentPosition(), -1); + MoveImeCarets(- sqt->CurrentPosition() + oneCharBefore); + } #endif sqt->view.imeCaretBlockOverride = true; } |