summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2017-11-14 15:52:34 +0100
committerNathan Collins <nathan.collins@kdab.com>2018-04-23 13:46:55 +0000
commitc579f49e2a80a55a4004ff8e5b2ee76bda146387 (patch)
treee31fe280d688bea146498aac8188cbf74905eb1b /src/widgets
parentb458cb312c433d9c955f5268c5db321126fef143 (diff)
Fix QML integration of widgets
We need to mark the object as deleted before destroying it's declarative data, otherwise all sorts of bad things can happen. This fixes the qwidgetsinqml autotest in qtdeclarative. Change-Id: I05a645ebe1ca7a50c8927e3dbd9ebb5aaf369a71 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io> (cherry picked from commit 3e91625b58b4d7d2757678de9d77eef91e84df36) Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/kernel/qwidget.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp
index c347ca0b59..a86834002c 100644
--- a/src/widgets/kernel/qwidget.cpp
+++ b/src/widgets/kernel/qwidget.cpp
@@ -1677,6 +1677,7 @@ QWidget::~QWidget()
}
}
+ d->wasDeleted = true;
if (d->declarativeData) {
if (static_cast<QAbstractDeclarativeDataImpl*>(d->declarativeData)->ownedByQml1) {
if (QAbstractDeclarativeData::destroyed_qml1)
@@ -8476,7 +8477,7 @@ bool QWidgetPrivate::close_helper(CloseMode mode)
data.is_closing = 1;
QPointer<QWidget> that = q;
- QPointer<QWidget> parentWidget = q->parentWidget();
+ QPointer<QWidget> parentWidget = (q->parentWidget() && !QObjectPrivate::get(q->parentWidget())->wasDeleted) ? q->parentWidget() : nullptr;
bool quitOnClose = q->testAttribute(Qt::WA_QuitOnClose);
if (mode != CloseNoEvent) {