From ef5cc7ebf4994ec6617884acf6ea74fdb02bec35 Mon Sep 17 00:00:00 2001 From: Krzysztof Chrusciel Date: Thu, 9 Jan 2025 14:24:20 +0100 Subject: [PATCH] TextEditor: Fix width of carrier widget in accordance to scrollbar Change-Id: I28184ce1a4103ba978945b6e9c4bc52dc4c2ce3e Reviewed-by: Marcus Tillmanns --- src/plugins/texteditor/texteditor.cpp | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index f5e4b7c12bd..8455815504d 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -3942,9 +3942,9 @@ public: , m_embed(embed) , m_textEditorWidget(textEditorWidget) { - QVBoxLayout *layout = new QVBoxLayout(this); - layout->setContentsMargins(0, 0, 0, 0); - layout->addWidget(m_embed); + m_layout = new QVBoxLayout(this); + updateContentMargins(); + m_layout->addWidget(m_embed); setFixedWidth(m_textEditorWidget->width() - m_textEditorWidget->extraAreaWidth()); setFixedHeight(m_embed->minimumSizeHint().height()); @@ -3952,13 +3952,31 @@ public: connect(m_textEditorWidget, &TextEditorWidget::resized, this, [this] { setFixedWidth(m_textEditorWidget->width() - m_textEditorWidget->extraAreaWidth()); }); + + m_textEditorWidget->viewport()->installEventFilter(this); } int embedHeight() { return m_embed->sizeHint().height(); } + bool eventFilter(QObject *obj, QEvent *event) override + { + if (event->type() == QEvent::Resize) + updateContentMargins(); + return QObject::eventFilter(obj, event); + } + private: + void updateContentMargins() { + bool verticalScrollBarVisible = m_textEditorWidget->verticalScrollBar()->isVisible(); + int verticalScrollBarWidth = m_textEditorWidget->verticalScrollBar()->width(); + + // Value 4 here is the liitle space between extraArea (space with line numbers) and code. + m_layout->setContentsMargins(0, 0, 4 + (verticalScrollBarVisible ? verticalScrollBarWidth : 0), 0); + } + QWidget *m_embed; TextEditorWidget *m_textEditorWidget; + QVBoxLayout *m_layout; }; EmbeddedWidgetInterface::~EmbeddedWidgetInterface()