diff options
author | Tim Jenssen <tim.jenssen@qt.io> | 2023-12-19 12:40:16 +0100 |
---|---|---|
committer | Tim Jenssen <tim.jenssen@qt.io> | 2023-12-21 12:56:54 +0000 |
commit | 671426f4a0a3f8b6dd80c3776868f0db3db4e24e (patch) | |
tree | cdc4adf637a22be8e5178550f293afc100c88aa5 | |
parent | 93169e6b5d5a4e49f2dbfa717bdf56e17df73367 (diff) |
ADS: fix crash on exit
None QObjects are not children of something - so they
need to get tracked.
Task-number: QDS-11555
Change-Id: I866097f9553a6080b30f0c12362bf7ec66321c05
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
-rw-r--r-- | src/libs/advanceddockingsystem/dockareawidget.cpp | 7 | ||||
-rw-r--r-- | src/libs/advanceddockingsystem/dockareawidget.h | 4 |
2 files changed, 6 insertions, 5 deletions
diff --git a/src/libs/advanceddockingsystem/dockareawidget.cpp b/src/libs/advanceddockingsystem/dockareawidget.cpp index 5cf12d70509..89fbbcfb3b6 100644 --- a/src/libs/advanceddockingsystem/dockareawidget.cpp +++ b/src/libs/advanceddockingsystem/dockareawidget.cpp @@ -189,7 +189,8 @@ struct DockAreaWidgetPrivate { DockAreaWidget *q = nullptr; QBoxLayout *m_layout = nullptr; - DockAreaLayout *m_contentsLayout = nullptr; + // DockAreaLayout is not a QObject -> std::unique_ptr manages deletion + std::unique_ptr<DockAreaLayout> m_contentsLayout; DockAreaTitleBar *m_titleBar = nullptr; DockManager *m_dockManager = nullptr; AutoHideDockContainer *m_autoHideDockContainer = nullptr; @@ -328,7 +329,7 @@ DockAreaWidget::DockAreaWidget(DockManager *dockManager, DockContainerWidget *pa setLayout(d->m_layout); d->createTitleBar(); - d->m_contentsLayout = new DockAreaLayout(d->m_layout); + d->m_contentsLayout = std::make_unique<DockAreaLayout>(d->m_layout); if (d->m_dockManager) emit d->m_dockManager->dockAreaCreated(this); } @@ -336,8 +337,6 @@ DockAreaWidget::DockAreaWidget(DockManager *dockManager, DockContainerWidget *pa DockAreaWidget::~DockAreaWidget() { qCInfo(adsLog) << Q_FUNC_INFO; - delete d->m_contentsLayout; - delete d; } DockManager *DockAreaWidget::dockManager() const diff --git a/src/libs/advanceddockingsystem/dockareawidget.h b/src/libs/advanceddockingsystem/dockareawidget.h index 59f8b9ee207..dae4d942b8c 100644 --- a/src/libs/advanceddockingsystem/dockareawidget.h +++ b/src/libs/advanceddockingsystem/dockareawidget.h @@ -9,6 +9,8 @@ #include <QFrame> +#include <memory> + QT_BEGIN_NAMESPACE class QAbstractButton; class QXmlStreamWriter; @@ -33,7 +35,7 @@ class ADS_EXPORT DockAreaWidget : public QFrame { Q_OBJECT private: - DockAreaWidgetPrivate *d; ///< private data (pimpl) + std::unique_ptr<DockAreaWidgetPrivate> d; ///< private data (pimpl) friend struct DockAreaWidgetPrivate; friend class DockContainerWidget; friend class DockContainerWidgetPrivate; |