diff options
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; } |