diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2011-10-18 14:10:36 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-10-20 13:25:45 +0200 |
commit | 3fe0716f608da26332625b98e724aad73f687993 (patch) | |
tree | 953ef5d1e85330c0327dc85384cc1089f6215fc0 /src/declarative/qml/qdeclarativeincubator.cpp | |
parent | 84af8c0ca510366a3017c1af83abc1cd18009198 (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.cpp | 14 |
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) { |