diff options
Diffstat (limited to 'qt/ScintillaEditBase/ScintillaEditBase.cpp')
-rw-r--r-- | qt/ScintillaEditBase/ScintillaEditBase.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/qt/ScintillaEditBase/ScintillaEditBase.cpp b/qt/ScintillaEditBase/ScintillaEditBase.cpp index b58a118aa..f789af727 100644 --- a/qt/ScintillaEditBase/ScintillaEditBase.cpp +++ b/qt/ScintillaEditBase/ScintillaEditBase.cpp @@ -268,8 +268,15 @@ void ScintillaEditBase::keyPressEvent(QKeyEvent *event) QString text = event->text(); if (input && !text.isEmpty() && text[0].isPrint()) { - QByteArray utext = sqt->BytesForDocument(text); - sqt->InsertCharacter(std::string_view(utext.data(), utext.size()), CharacterSource::DirectInput); + const int strLen = text.length(); + for (int i = 0; i < strLen;) { + const int ucWidth = text.at(i).isHighSurrogate() ? 2 : 1; + const QString oneCharUTF16 = text.mid(i, ucWidth); + const QByteArray oneChar = sqt->BytesForDocument(oneCharUTF16); + + sqt->InsertCharacter(std::string_view(oneChar.data(), oneChar.length()), CharacterSource::DirectInput); + i += ucWidth; + } } else { event->ignore(); } |