aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@theqtcompany.com>2015-12-03 18:15:00 +0100
committerJ-P Nurmi <jpnurmi@theqtcompany.com>2015-12-04 10:28:53 +0000
commit435c23be984691e3de645ae8ddff440e5f1786dd (patch)
tree7a8db0e26a217004beeeb55fb6d44a822538117a
parent4ecb85d4468782378c091e42d5733a976a3e0307 (diff)
StackView: fix crash when attempting to transition null items
Don't attempt to kick off view transitions for stack elements that have failed to load. Change-Id: I6e42785a30abc815d14a07e7d16aad5bde66391d Reviewed-by: Mitch Curtis <mitch.curtis@theqtcompany.com>
-rw-r--r--src/templates/qquickstackview_p.cpp12
-rw-r--r--tests/auto/controls/data/tst_stackview.qml13
2 files changed, 19 insertions, 6 deletions
diff --git a/src/templates/qquickstackview_p.cpp b/src/templates/qquickstackview_p.cpp
index 1a08d349..ffd9934e 100644
--- a/src/templates/qquickstackview_p.cpp
+++ b/src/templates/qquickstackview_p.cpp
@@ -405,13 +405,13 @@ void QQuickStackViewPrivate::popTransition(QQuickStackElement *enter, QQuickStac
}
if (exit) {
- if (immediate || !exit->prepareTransition(transitioner, viewBounds))
+ if (immediate || !exit->item || !exit->prepareTransition(transitioner, viewBounds))
completeTransition(exit, transitioner->removeTransition);
else
exit->startTransition(transitioner);
}
if (enter) {
- if (immediate || !enter->prepareTransition(transitioner, QRectF()))
+ if (immediate || !enter->item || !enter->prepareTransition(transitioner, QRectF()))
completeTransition(enter, transitioner->removeDisplacedTransition);
else
enter->startTransition(transitioner);
@@ -437,13 +437,13 @@ void QQuickStackViewPrivate::pushTransition(QQuickStackElement *enter, QQuickSta
}
if (enter) {
- if (immediate || !enter->prepareTransition(transitioner, viewBounds))
+ if (immediate || !enter->item || !enter->prepareTransition(transitioner, viewBounds))
completeTransition(enter, transitioner->addTransition);
else
enter->startTransition(transitioner);
}
if (exit) {
- if (immediate || !exit->prepareTransition(transitioner, QRectF()))
+ if (immediate || !exit->item || !exit->prepareTransition(transitioner, QRectF()))
completeTransition(exit, transitioner->addDisplacedTransition);
else
exit->startTransition(transitioner);
@@ -470,13 +470,13 @@ void QQuickStackViewPrivate::replaceTransition(QQuickStackElement *enter, QQuick
}
if (exit) {
- if (immediate || !exit->prepareTransition(transitioner, QRectF()))
+ if (immediate || !exit->item || !exit->prepareTransition(transitioner, QRectF()))
completeTransition(exit, transitioner->moveDisplacedTransition);
else
exit->startTransition(transitioner);
}
if (enter) {
- if (immediate || !enter->prepareTransition(transitioner, viewBounds))
+ if (immediate || !enter->item || !enter->prepareTransition(transitioner, viewBounds))
completeTransition(enter, transitioner->moveTransition);
else
enter->startTransition(transitioner);
diff --git a/tests/auto/controls/data/tst_stackview.qml b/tests/auto/controls/data/tst_stackview.qml
index 23eaf317..1cd12af3 100644
--- a/tests/auto/controls/data/tst_stackview.qml
+++ b/tests/auto/controls/data/tst_stackview.qml
@@ -744,4 +744,17 @@ TestCase {
control.destroy()
}
+
+ function test_failures() {
+ var control = stackView.createObject(testCase, {initialItem: component})
+ verify(control)
+
+ ignoreWarning("QQmlComponent: Component is not ready")
+ control.push("non-existent.qml")
+ ignoreWarning("QQmlComponent: Component is not ready")
+ control.replace("non-existent.qml")
+ control.pop()
+
+ control.destroy()
+ }
}