aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Jenssen <tim.jenssen@qt.io>2023-12-19 12:40:16 +0100
committerTim Jenssen <tim.jenssen@qt.io>2023-12-21 12:56:54 +0000
commit671426f4a0a3f8b6dd80c3776868f0db3db4e24e (patch)
treecdc4adf637a22be8e5178550f293afc100c88aa5
parent93169e6b5d5a4e49f2dbfa717bdf56e17df73367 (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.cpp7
-rw-r--r--src/libs/advanceddockingsystem/dockareawidget.h4
2 files changed, 6 insertions, 5 deletions
diff --git a/src/libs/advanceddockingsystem/dockareawidget.cpp b/src/libs/advanceddockingsystem/dockareawidget.cpp
index 5cf12d7050..89fbbcfb3b 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 59f8b9ee20..dae4d942b8 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;