diff options
Diffstat (limited to 'src/controls')
-rw-r--r-- | src/controls/qquickstackview.cpp | 1 | ||||
-rw-r--r-- | src/controls/qquickstackview_p.cpp | 8 | ||||
-rw-r--r-- | src/controls/qquickstackview_p_p.h | 1 |
3 files changed, 8 insertions, 2 deletions
diff --git a/src/controls/qquickstackview.cpp b/src/controls/qquickstackview.cpp index 39cca26c..1c09b6e8 100644 --- a/src/controls/qquickstackview.cpp +++ b/src/controls/qquickstackview.cpp @@ -269,6 +269,7 @@ QQuickStackView::~QQuickStackView() d->transitioner->setChangeListener(Q_NULLPTR); delete d->transitioner; } + qDeleteAll(d->removals); qDeleteAll(d->elements); } diff --git a/src/controls/qquickstackview_p.cpp b/src/controls/qquickstackview_p.cpp index 67cdde59..19ab6a39 100644 --- a/src/controls/qquickstackview_p.cpp +++ b/src/controls/qquickstackview_p.cpp @@ -389,6 +389,7 @@ void QQuickStackViewPrivate::ensureTransitioner() void QQuickStackViewPrivate::popTransition(QQuickStackElement *enter, QQuickStackElement *exit, const QRectF &viewBounds, bool immediate) { if (exit) { + exit->removal = true; exit->setStatus(QQuickStackView::Deactivating); exit->transitionNextReposition(transitioner, QQuickItemViewTransitioner::RemoveTransition, true); } @@ -504,11 +505,14 @@ void QQuickStackViewPrivate::viewItemTransitionFinished(QQuickItemViewTransition if (element->item) element->item->setVisible(false); if (element->removal || element->isPendingRemoval()) - delete element; + removals += element; } - if (transitioner->runningJobs.isEmpty()) + if (transitioner->runningJobs.isEmpty()) { + qDeleteAll(removals); + removals.clear(); setBusy(false); + } } void QQuickStackViewPrivate::setBusy(bool busy) diff --git a/src/controls/qquickstackview_p_p.h b/src/controls/qquickstackview_p_p.h index 84ed9f35..7a185b7c 100644 --- a/src/controls/qquickstackview_p_p.h +++ b/src/controls/qquickstackview_p_p.h @@ -135,6 +135,7 @@ public: QVariant initialItem; QQuickItem *currentItem; + QList<QQuickStackElement*> removals; QStack<QQuickStackElement *> elements; QQuickItemViewTransitioner *transitioner; }; |