aboutsummaryrefslogtreecommitdiffhomepage
path: root/qt
diff options
context:
space:
mode:
Diffstat (limited to 'qt')
-rw-r--r--qt/ScintillaEditBase/ScintillaEditBase.cpp11
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();
}