From 5ad83ff87df54c085be87cde61215b3ee32a2e1a Mon Sep 17 00:00:00 2001 From: johnsonj Date: Sun, 18 Jun 2023 19:29:14 +1000 Subject: Implement replacement for IMEs which may help with actions like reconversion. --- qt/ScintillaEditBase/ScintillaEditBase.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'qt/ScintillaEditBase/ScintillaEditBase.cpp') diff --git a/qt/ScintillaEditBase/ScintillaEditBase.cpp b/qt/ScintillaEditBase/ScintillaEditBase.cpp index b64070407..5072cd824 100644 --- a/qt/ScintillaEditBase/ScintillaEditBase.cpp +++ b/qt/ScintillaEditBase/ScintillaEditBase.cpp @@ -542,6 +542,17 @@ void ScintillaEditBase::inputMethodEvent(QInputMethodEvent *event) sqt->view.imeCaretBlockOverride = false; preeditPos = -1; // reset not to interrupt Qt::ImCursorRectangle. + const int rpLength = event->replacementLength(); + if (rpLength != 0) { + // Qt has called setCommitString(). + // Make room for the string to sit in. + const int rpStart = event->replacementStart(); + const Scintilla::Position rpBase = sqt->CurrentPosition(); + const Scintilla::Position start = sqt->pdoc->GetRelativePositionUTF16(rpBase, rpStart); + const Scintilla::Position end = sqt->pdoc->GetRelativePositionUTF16(start, rpLength); + sqt->pdoc->DeleteChars(start, end - start); + } + if (!event->commitString().isEmpty()) { const QString &commitStr = event->commitString(); const int commitStrLen = commitStr.length(); -- cgit v1.2.3