aboutsummaryrefslogtreecommitdiffhomepage
path: root/gtk/ScintillaGTK.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/ScintillaGTK.cxx')
-rw-r--r--gtk/ScintillaGTK.cxx20
1 files changed, 8 insertions, 12 deletions
diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx
index 80217660b..85336ecdd 100644
--- a/gtk/ScintillaGTK.cxx
+++ b/gtk/ScintillaGTK.cxx
@@ -2453,13 +2453,8 @@ void ScintillaGTK::PreeditChangedInlineThis() {
pdoc->TentativeStart(); // TentativeActive() from now on
- // Get preedit string attribues
std::vector<int> indicator = MapImeIndicators(preeditStr.attrs, preeditStr.str);
- // Display preedit characters, one by one
- glong imeCharPos[maxLenInputIME+1] = { 0 };
- glong charWidth = 0;
-
bool tmpRecordingMacro = recordingMacro;
recordingMacro = false;
for (glong i = 0; i < preeditStr.uniStrLen; i++) {
@@ -2471,21 +2466,22 @@ void ScintillaGTK::PreeditChangedInlineThis() {
AddCharUTF(docChar.c_str(), docChar.size());
- // Draw an indicator on the character,
DrawImeIndicator(indicator[i], docChar.size());
-
- // Record character positions in UTF-8 or DBCS bytes
- charWidth += docChar.size();
- imeCharPos[i+1] = charWidth;
}
recordingMacro = tmpRecordingMacro;
// Move caret to ime cursor position.
- MoveImeCarets( - (imeCharPos[preeditStr.uniStrLen]) + imeCharPos[preeditStr.cursor_pos]);
+ int imeEndToImeCaretU32 = preeditStr.cursor_pos - preeditStr.uniStrLen;
+ int imeCaretPosDoc = pdoc->GetRelativePosition(CurrentPosition(), imeEndToImeCaretU32);
+
+ MoveImeCarets(- CurrentPosition() + imeCaretPosDoc);
if (KoreanIME()) {
#if !PLAT_GTK_WIN32
- MoveImeCarets( - imeCharPos[1]); // always 2 bytes for DBCS or 3 bytes for UTF8.
+ if (preeditStr.cursor_pos > 0) {
+ int oneCharBefore = pdoc->GetRelativePosition(CurrentPosition(), -1);
+ MoveImeCarets(- CurrentPosition() + oneCharBefore);
+ }
#endif
view.imeCaretBlockOverride = true;
}