aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/quicktemplates2/qquickstackview.cpp8
-rw-r--r--src/quicktemplates2/qquickstackview_p.cpp8
-rw-r--r--src/quicktemplates2/qquickstackview_p_p.h4
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;
};