diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2016-06-14 16:28:34 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2017-01-24 15:02:36 +0000 |
commit | ca6b787a01ea289bd5c2a3e4ff3c7442a4ff58fc (patch) | |
tree | 8d8d49fe22b9686b44e78a99e93c0ba0535aab3f /src/qml/qml/qqmlobjectcreator.cpp | |
parent | 94f6071b8a36501d9da516f2bf0f251147c8b934 (diff) |
Allow canceling incubation
Qt Quick Controls must avoid destroying any object that belongs to
a tree of objects being incubated. The problem is that QQC have no
control over the incubation process. This patch adds private API
that allows QQC to cancel incubation of a specific item that QQC
would like to destroy.
Change-Id: Id9f9004736e2b53fe46cdb6bb3055b7457def94d
Task-number: QTBUG-50992
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/qml/qqmlobjectcreator.cpp')
-rw-r--r-- | src/qml/qml/qqmlobjectcreator.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/qml/qml/qqmlobjectcreator.cpp b/src/qml/qml/qqmlobjectcreator.cpp index 09936f6e7a..38a16b8cde 100644 --- a/src/qml/qml/qqmlobjectcreator.cpp +++ b/src/qml/qml/qqmlobjectcreator.cpp @@ -1270,6 +1270,21 @@ QQmlContextData *QQmlObjectCreator::finalize(QQmlInstantiationInterrupt &interru return sharedState->rootContext; } +void QQmlObjectCreator::cancel(QObject *object) +{ + int last = sharedState->allCreatedObjects.count() - 1; + int i = last; + while (i >= 0) { + if (sharedState->allCreatedObjects.at(i) == object) { + if (i < last) + qSwap(sharedState->allCreatedObjects[i], sharedState->allCreatedObjects[last]); + sharedState->allCreatedObjects.pop(); + break; + } + --i; + } +} + void QQmlObjectCreator::clear() { if (phase == Done || phase == Finalizing || phase == Startup) |