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/qqmlincubator.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/qqmlincubator.cpp')
-rw-r--r-- | src/qml/qml/qqmlincubator.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/qml/qml/qqmlincubator.cpp b/src/qml/qml/qqmlincubator.cpp index 963638ca34..54d0b240f5 100644 --- a/src/qml/qml/qqmlincubator.cpp +++ b/src/qml/qml/qqmlincubator.cpp @@ -380,6 +380,23 @@ finishIncubate: } } +void QQmlIncubatorPrivate::cancel(QObject *object, QQmlContext *context) +{ + if (!context) + context = qmlContext(object); + if (!context) + return; + + QQmlContextData *data = QQmlContextData::get(context); + QQmlIncubatorPrivate *p = (QQmlIncubatorPrivate *)data->activeVMEData; + if (!p) + return; + + p->vmeGuard.unguard(object); + if (!p->creator.isNull()) + p->creator->cancel(object); +} + /*! Incubate objects for \a msecs, or until there are no more objects to incubate. */ |