aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/qml/qdeclarativeincubator.cpp
diff options
context:
space:
mode:
authorAaron Kennedy <aaron.kennedy@nokia.com>2011-10-18 14:10:36 +1000
committerQt by Nokia <qt-info@nokia.com>2011-10-20 13:25:45 +0200
commit3fe0716f608da26332625b98e724aad73f687993 (patch)
tree953ef5d1e85330c0327dc85384cc1089f6215fc0 /src/declarative/qml/qdeclarativeincubator.cpp
parent84af8c0ca510366a3017c1af83abc1cd18009198 (diff)
Allow one incubator to start in the statusChanged() of another
Change-Id: I91cb7e2a8ecc67f34cdcadc0b71f819c2881e2da Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'src/declarative/qml/qdeclarativeincubator.cpp')
-rw-r--r--src/declarative/qml/qdeclarativeincubator.cpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/declarative/qml/qdeclarativeincubator.cpp b/src/declarative/qml/qdeclarativeincubator.cpp
index abd759dcc0..d1afac2d13 100644
--- a/src/declarative/qml/qdeclarativeincubator.cpp
+++ b/src/declarative/qml/qdeclarativeincubator.cpp
@@ -313,13 +313,21 @@ void QDeclarativeIncubatorPrivate::incubate(QDeclarativeVME::Interrupt &i)
finishIncubate:
if (progress == QDeclarativeIncubatorPrivate::Completed && waitingFor.isEmpty()) {
+ typedef QDeclarativeIncubatorPrivate IP;
+
QDeclarativeIncubatorPrivate *isWaiting = waitingOnMe;
clear();
- if (isWaiting) isWaiting->incubate(i);
- enginePriv->inProgressCreations--;
+ if (isWaiting) {
+ QRecursionWatcher<IP, &IP::recursion> watcher(isWaiting);
+ changeStatus(calculateStatus());
+ if (!watcher.hasRecursed())
+ isWaiting->incubate(i);
+ } else {
+ changeStatus(calculateStatus());
+ }
- changeStatus(calculateStatus());
+ enginePriv->inProgressCreations--;
if (0 == enginePriv->inProgressCreations) {
while (enginePriv->erroredBindings) {