aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/templates/qquickstackview.cpp2
-rw-r--r--tests/auto/controls/data/tst_stackview.qml16
2 files changed, 17 insertions, 1 deletions
diff --git a/src/templates/qquickstackview.cpp b/src/templates/qquickstackview.cpp
index 2128f3b1..e127d79f 100644
--- a/src/templates/qquickstackview.cpp
+++ b/src/templates/qquickstackview.cpp
@@ -636,7 +636,7 @@ void QQuickStackView::replace(QQmlV4Function *args)
if (!d->elements.isEmpty())
exit = d->elements.pop();
- if (d->replaceElements(target, elements)) {
+ if (exit != target ? d->replaceElements(target, elements) : d->pushElements(elements)) {
if (depth != d->elements.count())
emit depthChanged();
QQuickStackElement *enter = d->elements.top();
diff --git a/tests/auto/controls/data/tst_stackview.qml b/tests/auto/controls/data/tst_stackview.qml
index aee82eec..2eb802bf 100644
--- a/tests/auto/controls/data/tst_stackview.qml
+++ b/tests/auto/controls/data/tst_stackview.qml
@@ -459,6 +459,22 @@ TestCase {
compare(control.depth, 1)
compare(control.currentItem, item6)
+ // replace the topmost item
+ control.push(component)
+ compare(control.depth, 2)
+ var item7 = control.replace(control.get(1), component, StackView.Immediate)
+ compare(control.depth, 2)
+ compare(control.currentItem, item7)
+
+ // replace the item in the middle
+ control.push(component)
+ control.push(component)
+ control.push(component)
+ compare(control.depth, 5)
+ var item8 = control.replace(control.get(2), component, StackView.Immediate)
+ compare(control.depth, 3)
+ compare(control.currentItem, item8)
+
control.destroy()
}