diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/quicktemplates2/qquickstackview.cpp | 8 | ||||
-rw-r--r-- | src/quicktemplates2/qquickstackview_p.cpp | 8 | ||||
-rw-r--r-- | src/quicktemplates2/qquickstackview_p_p.h | 4 |
3 files changed, 14 insertions, 6 deletions
diff --git a/src/quicktemplates2/qquickstackview.cpp b/src/quicktemplates2/qquickstackview.cpp index cf2b5a66..83a26e4f 100644 --- a/src/quicktemplates2/qquickstackview.cpp +++ b/src/quicktemplates2/qquickstackview.cpp @@ -310,7 +310,8 @@ QQuickStackView::~QQuickStackView() d->transitioner->setChangeListener(nullptr); delete d->transitioner; } - qDeleteAll(d->removals); + qDeleteAll(d->removing); + qDeleteAll(d->removed); qDeleteAll(d->elements); } @@ -599,6 +600,7 @@ void QQuickStackView::pop(QQmlV4Function *args) if (d->popElements(enter)) { if (exit) { exit->removal = true; + d->removing.insert(exit); previousItem = exit->item; } emit depthChanged(); @@ -742,8 +744,10 @@ void QQuickStackView::replace(QQmlV4Function *args) if (exit != target ? d->replaceElements(target, elements) : d->pushElements(elements)) { if (depth != d->elements.count()) emit depthChanged(); - if (exit) + if (exit) { exit->removal = true; + d->removing.insert(exit); + } QQuickStackElement *enter = d->elements.top(); d->startTransition(QQuickStackTransition::replaceExit(operation, exit, this), QQuickStackTransition::replaceEnter(operation, enter, this), diff --git a/src/quicktemplates2/qquickstackview_p.cpp b/src/quicktemplates2/qquickstackview_p.cpp index 34301c2d..fd367f08 100644 --- a/src/quicktemplates2/qquickstackview_p.cpp +++ b/src/quicktemplates2/qquickstackview_p.cpp @@ -249,14 +249,16 @@ void QQuickStackViewPrivate::viewItemTransitionFinished(QQuickItemViewTransition element->setStatus(QQuickStackView::Inactive); element->setVisible(false); if (element->removal || element->isPendingRemoval()) - removals += element; + removed += element; } if (transitioner->runningJobs.isEmpty()) { - qDeleteAll(removals); - removals.clear(); + qDeleteAll(removed); + removed.clear(); setBusy(false); } + + removing.remove(element); } void QQuickStackViewPrivate::setBusy(bool b) diff --git a/src/quicktemplates2/qquickstackview_p_p.h b/src/quicktemplates2/qquickstackview_p_p.h index 39a9ba9b..ca610153 100644 --- a/src/quicktemplates2/qquickstackview_p_p.h +++ b/src/quicktemplates2/qquickstackview_p_p.h @@ -53,6 +53,7 @@ #include <QtQuick/private/qquickitemviewtransition_p.h> #include <QtQuick/private/qquickitemchangelistener_p.h> #include <QtQml/private/qv4value_p.h> +#include <QtCore/qset.h> QT_BEGIN_NAMESPACE @@ -92,7 +93,8 @@ public: bool busy; QVariant initialItem; QQuickItem *currentItem; - QList<QQuickStackElement*> removals; + QSet<QQuickStackElement*> removing; + QList<QQuickStackElement*> removed; QStack<QQuickStackElement *> elements; QQuickItemViewTransitioner *transitioner; }; |