From 483bbe47309348d096388379c1ad03e2082f647f Mon Sep 17 00:00:00 2001 From: johnsonj Date: Thu, 14 Apr 2016 23:21:56 +1000 Subject: Simplified IME caret positioning. --- gtk/ScintillaGTK.cxx | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) (limited to 'gtk') 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 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; } -- cgit v1.2.3