summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/aspects/qabstractaspect.cpp32
1 files changed, 21 insertions, 11 deletions
diff --git a/src/core/aspects/qabstractaspect.cpp b/src/core/aspects/qabstractaspect.cpp
index b5712a33a..12dcb33e1 100644
--- a/src/core/aspects/qabstractaspect.cpp
+++ b/src/core/aspects/qabstractaspect.cpp
@@ -122,21 +122,31 @@ void QAbstractAspect::registerBackendType(const QMetaObject &obj, const QBackend
d->m_backendCreatorFunctors.insert(&obj, functor);
}
-void QAbstractAspectPrivate::sceneNodeAdded(QSceneChangePtr &e)
+void QAbstractAspectPrivate::sceneNodeAdded(QSceneChangePtr &change)
{
- QScenePropertyChangePtr propertyChange = e.staticCast<QScenePropertyChange>();
- QNodePtr nodePtr = propertyChange->value().value<QNodePtr>();
- QNode *n = nodePtr.data();
- QNodeVisitor visitor;
- visitor.traverse(n, this, &QAbstractAspectPrivate::createBackendNode);
+ if (m_useCloning) {
+ QScenePropertyChangePtr propertyChange = change.staticCast<QScenePropertyChange>();
+ QNodePtr nodePtr = propertyChange->value().value<QNodePtr>();
+ QNode *n = nodePtr.data();
+ QNodeVisitor visitor;
+ visitor.traverse(n, this, &QAbstractAspectPrivate::createBackendNode);
+ } else {
+ QNodeCreatedChangeBasePtr creationChange = qSharedPointerCast<QNodeCreatedChangeBase>(change);
+ createBackendNodeNoClone(creationChange);
+ }
}
-void QAbstractAspectPrivate::sceneNodeRemoved(QSceneChangePtr &e)
+void QAbstractAspectPrivate::sceneNodeRemoved(QSceneChangePtr &change)
{
- QScenePropertyChangePtr propertyChange = e.staticCast<QScenePropertyChange>();
- QNodePtr nodePtr = propertyChange->value().value<QNodePtr>();
- QNode *n = nodePtr.data();
- clearBackendNode(n);
+ if (m_useCloning) {
+ QScenePropertyChangePtr propertyChange = change.staticCast<QScenePropertyChange>();
+ QNodePtr nodePtr = propertyChange->value().value<QNodePtr>();
+ QNode *n = nodePtr.data();
+ clearBackendNode(n);
+ } else {
+ QNodeDestroyedChangePtr destructionChange = qSharedPointerCast<QNodeDestroyedChange>(change);
+ clearBackendNodeNoClone(destructionChange);
+ }
}
QVariant QAbstractAspect::executeCommand(const QStringList &args)