From 8c381c719ba46d117ee6e7e3e6ebaf8794006732 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Thu, 8 Jun 2023 10:57:55 +0200 Subject: [PATCH] Terminal: Fix painting multi char preedit Preedits on linux can often contain more than one character. Also changes the painting from white on black to painting with just an underline. Change-Id: I6769217ca80cf131aa3fb96b20e23b717f591467 Reviewed-by: David Schulz --- src/plugins/terminal/terminalwidget.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/plugins/terminal/terminalwidget.cpp b/src/plugins/terminal/terminalwidget.cpp index 67530473697..0c42a4d920b 100644 --- a/src/plugins/terminal/terminalwidget.cpp +++ b/src/plugins/terminal/terminalwidget.cpp @@ -974,6 +974,9 @@ void TerminalWidget::paintCursor(QPainter &p) const auto cursor = m_surface->cursor(); + if (!m_preEditString.isEmpty()) + cursor.shape = Internal::Cursor::Shape::Underline; + const bool blinkState = !cursor.blink || m_cursorBlinkState || !TerminalSettings::instance().allowBlinkingCursor.value(); @@ -1019,9 +1022,13 @@ void TerminalWidget::paintPreedit(QPainter &p) const QRectF rect = QRectF(gridToGlobal(cursor.position), gridToGlobal({cursor.position.x(), cursor.position.y()}, true, true)); - p.fillRect(rect, QColor::fromRgb(0, 0, 0)); - p.setPen(Qt::white); - p.drawText(rect, m_preEditString); + rect.setWidth(viewport()->width() - rect.x()); + + p.setPen(toQColor(ColorIndex::Foreground)); + QFont f = font(); + f.setUnderline(true); + p.setFont(f); + p.drawText(rect, Qt::TextDontClip | Qt::TextWrapAnywhere, m_preEditString); } }