aboutsummaryrefslogtreecommitdiffhomepage
path: root/qt/ScintillaEditBase/ScintillaEditBase.cpp
diff options
context:
space:
mode:
authorjohnsonj <unknown>2016-04-14 23:21:56 +1000
committerjohnsonj <unknown>2016-04-14 23:21:56 +1000
commit483bbe47309348d096388379c1ad03e2082f647f (patch)
tree262eb1745b5b08c52a2664c2e34756b283826140 /qt/ScintillaEditBase/ScintillaEditBase.cpp
parent2af8e440eb93ba6e03de7b495bfce70016ed5868 (diff)
downloadscintilla-mirror-483bbe47309348d096388379c1ad03e2082f647f.tar.gz
Simplified IME caret positioning.
Diffstat (limited to 'qt/ScintillaEditBase/ScintillaEditBase.cpp')
-rw-r--r--qt/ScintillaEditBase/ScintillaEditBase.cpp19
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;
}