From 310abd3b700e09f9c14d9aa70779c73d009e54ad Mon Sep 17 00:00:00 2001 From: Tim Jenssen Date: Wed, 8 May 2024 10:54:56 +0200 Subject: [PATCH] TextEditor: use modern approach to delete TextEditorWidgetPrivate Try to tackle the crash at destruction: https://the-qt-company-00.sentry.io/issues/5315538277 https://the-qt-company-00.sentry.io/issues/5312380342 https://the-qt-company-00.sentry.io/issues/5237253338 Pick-to: qds/4.5 Change-Id: Id4436bf5adc0c725f9b5538480619ed99428413f Reviewed-by: Reviewed-by: Tim Jenssen Reviewed-by: hjk --- src/plugins/texteditor/texteditor.cpp | 16 +++++----------- src/plugins/texteditor/texteditor.h | 2 +- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index bea58df3c88..bc4e605296c 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -1262,15 +1262,15 @@ TextEditorWidget::TextEditorWidget(QWidget *parent) { // "Needed", as the creation below triggers ChildEvents that are // passed to this object's event() which uses 'd'. - d = nullptr; - d = new TextEditorWidgetPrivate(this); - + d = std::make_unique(this); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); setLayoutDirection(Qt::LeftToRight); viewport()->setMouseTracking(true); setFrameStyle(QFrame::NoFrame); } +TextEditorWidget::~TextEditorWidget() = default; + void TextEditorWidget::setTextDocument(const QSharedPointer &doc) { d->setDocument(doc); @@ -1449,12 +1449,6 @@ void TextEditorWidgetPrivate::setDocument(const QSharedPointer &do setupFromDefinition(currentDefinition()); } -TextEditorWidget::~TextEditorWidget() -{ - delete d; - d = nullptr; -} - void TextEditorWidget::print(QPrinter *printer) { const bool oldFullPage = printer->fullPage(); @@ -5796,7 +5790,7 @@ void TextEditorWidgetPrivate::paintRevisionMarker(QPainter &painter, void TextEditorWidget::extraAreaPaintEvent(QPaintEvent *e) { - ExtraAreaPaintEventData data(this, d); + ExtraAreaPaintEventData data(this, d.get()); QTC_ASSERT(data.documentLayout, return); QPainter painter(d->m_extraArea); @@ -9402,7 +9396,7 @@ void TextEditorWidget::setupGenericHighlighter() setLineSeparatorsAllowed(true); connect(textDocument(), &IDocument::filePathChanged, - d, &TextEditorWidgetPrivate::reconfigure); + d.get(), &TextEditorWidgetPrivate::reconfigure); } // diff --git a/src/plugins/texteditor/texteditor.h b/src/plugins/texteditor/texteditor.h index 85344a8dbd0..9f2a6f3b9c4 100644 --- a/src/plugins/texteditor/texteditor.h +++ b/src/plugins/texteditor/texteditor.h @@ -637,7 +637,7 @@ protected: virtual void slotCodeStyleSettingsChanged(const QVariant &); // Used in CppEditor private: - Internal::TextEditorWidgetPrivate *d; + std::unique_ptr d; friend class BaseTextEditor; friend class TextEditorFactory; friend class Internal::TextEditorFactoryPrivate;