diff options
Diffstat (limited to 'qt/ScintillaEditBase/ScintillaEditBase.cpp')
-rw-r--r-- | qt/ScintillaEditBase/ScintillaEditBase.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/qt/ScintillaEditBase/ScintillaEditBase.cpp b/qt/ScintillaEditBase/ScintillaEditBase.cpp index f789af727..b6c35f16e 100644 --- a/qt/ScintillaEditBase/ScintillaEditBase.cpp +++ b/qt/ScintillaEditBase/ScintillaEditBase.cpp @@ -485,8 +485,6 @@ static std::vector<int> MapImeIndicators(QInputMethodEvent *event) int indicator = IndicatorUnknown; switch (charFormat.underlineStyle()) { case QTextCharFormat::NoUnderline: // win32, linux - indicator = IndicatorTarget; - break; case QTextCharFormat::SingleUnderline: // osx case QTextCharFormat::DashUnderline: // win32, linux indicator = IndicatorInput; @@ -542,6 +540,7 @@ void ScintillaEditBase::inputMethodEvent(QInputMethodEvent *event) } sqt->view.imeCaretBlockOverride = false; + preeditPos = -1; // reset not to interrupt Qt::ImCursorRectangle. if (!event->commitString().isEmpty()) { const QString &commitStr = event->commitString(); @@ -568,6 +567,9 @@ void ScintillaEditBase::inputMethodEvent(QInputMethodEvent *event) sqt->ClearBeforeTentativeStart(); sqt->pdoc->TentativeStart(); // TentativeActive() from now on. + // Fix candidate window position at the start of preeditString. + preeditPos = sqt->CurrentPosition(); + std::vector<int> imeIndicator = MapImeIndicators(event); for (int i = 0; i < preeditStrLen;) { @@ -599,10 +601,14 @@ void ScintillaEditBase::inputMethodEvent(QInputMethodEvent *event) sqt->view.imeCaretBlockOverride = true; } - // Set candidate box position for Qt::ImMicroFocus. - preeditPos = sqt->CurrentPosition(); + // Set Candidate window position again at imeCaret when target input. + const bool targetAny = std::any_of(imeIndicator.begin(), imeIndicator.end(), [](int i) noexcept { + return i == IndicatorTarget; + }); + if (targetAny) + preeditPos = sqt->CurrentPosition(); + sqt->EnsureCaretVisible(); - updateMicroFocus(); } sqt->ShowCaretAtCurrentPosition(); } |