From 1b78d9fa1f8fecf46fd094636f049cd157e21d29 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 17 May 2020 21:48:43 +0200 Subject: [PATCH] LibVT: Handle keydown events with multi-byte text correctly TerminalWidget can now handle keydown events that contain multi-byte UTF-8 sequences. :^) --- Libraries/LibVT/TerminalWidget.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Libraries/LibVT/TerminalWidget.cpp b/Libraries/LibVT/TerminalWidget.cpp index 97cb2c8544..d068c90c09 100644 --- a/Libraries/LibVT/TerminalWidget.cpp +++ b/Libraries/LibVT/TerminalWidget.cpp @@ -260,8 +260,9 @@ void TerminalWidget::keydown_event(GUI::KeyEvent& event) // Key event was not one of the above special cases, // attempt to treat it as a character... - char ch = !event.text().is_empty() ? event.text()[0] : 0; - if (ch) { + if (event.text().length() == 1) { + // 1 byte input == ASCII + char ch = !event.text().is_empty() ? event.text()[0] : 0; if (event.ctrl()) { if (ch >= 'a' && ch <= 'z') { ch = ch - 'a' + 1; @@ -285,6 +286,9 @@ void TerminalWidget::keydown_event(GUI::KeyEvent& event) } write(m_ptm_fd, &ch, 1); + } else if (event.text().length() > 1) { + // 2+ byte input == Unicode + write(m_ptm_fd, event.text().characters(), event.text().length()); } if (event.key() != Key_Control && event.key() != Key_Alt && event.key() != Key_Shift && event.key() != Key_Logo)