diff options
-rw-r--r-- | src/core/qchangearbiter.cpp | 7 | ||||
-rw-r--r-- | src/core/qchangearbiter_p.h | 1 | ||||
-rw-r--r-- | src/core/qlockableobserverinterface_p.h | 3 | ||||
-rw-r--r-- | tests/auto/core/nodes/tst_nodes.cpp | 7 | ||||
-rw-r--r-- | tests/auto/core/qscene/tst_qscene.cpp | 1 |
5 files changed, 19 insertions, 0 deletions
diff --git a/src/core/qchangearbiter.cpp b/src/core/qchangearbiter.cpp index 886b74036..6d84eebfd 100644 --- a/src/core/qchangearbiter.cpp +++ b/src/core/qchangearbiter.cpp @@ -260,6 +260,13 @@ void QChangeArbiter::sceneChangeEventWithLock(const QSceneChangePtr &e) sceneChangeEvent(e); } +void QChangeArbiter::sceneChangeEventWithLock(const QSceneChangeList &e) +{ + QMutexLocker locker(&m_mutex); + QChangeQueue *localChangeQueue = m_tlsChangeQueue.localData(); + localChangeQueue->insert(localChangeQueue->end(), e.begin(), e.end()); +} + // Either we have the postman or we could make the QChangeArbiter agnostic to the postman // but that would require adding it to every QObserverList in m_aspectObservations. void QChangeArbiter::setPostman(QObserverInterface *postman) diff --git a/src/core/qchangearbiter_p.h b/src/core/qchangearbiter_p.h index b18835e98..a2046caab 100644 --- a/src/core/qchangearbiter_p.h +++ b/src/core/qchangearbiter_p.h @@ -84,6 +84,7 @@ public: void sceneChangeEvent(const QSceneChangePtr &e) Q_DECL_OVERRIDE; // QLockableObserverInterface impl void sceneChangeEventWithLock(const QSceneChangePtr &e) Q_DECL_OVERRIDE; // QLockableObserverInterface impl + void sceneChangeEventWithLock(const QSceneChangeList &e) Q_DECL_OVERRIDE; // QLockableObserverInterface impl Q_INVOKABLE void setPostman(Qt3D::QObserverInterface *postman); Q_INVOKABLE void setScene(Qt3D::QSceneInterface *scene); diff --git a/src/core/qlockableobserverinterface_p.h b/src/core/qlockableobserverinterface_p.h index b0a64118a..088f3eda7 100644 --- a/src/core/qlockableobserverinterface_p.h +++ b/src/core/qlockableobserverinterface_p.h @@ -43,11 +43,14 @@ QT_BEGIN_NAMESPACE namespace Qt3D { +typedef std::vector<QSceneChangePtr> QSceneChangeList; + class QT3DCORESHARED_EXPORT QLockableObserverInterface : public QObserverInterface { public: virtual ~QLockableObserverInterface(); virtual void sceneChangeEventWithLock(const QSceneChangePtr &e) = 0; + virtual void sceneChangeEventWithLock(const QSceneChangeList &e) = 0; }; } // namespace Qt3D diff --git a/tests/auto/core/nodes/tst_nodes.cpp b/tests/auto/core/nodes/tst_nodes.cpp index 05af6b615..d2248aa93 100644 --- a/tests/auto/core/nodes/tst_nodes.cpp +++ b/tests/auto/core/nodes/tst_nodes.cpp @@ -114,6 +114,13 @@ public: events << ChangeRecord(e, true); } + void sceneChangeEventWithLock(const Qt3D::QSceneChangeList &e) Q_DECL_OVERRIDE + { + for (uint i = 0, m = e.size(); i < m; ++i) { + events << ChangeRecord(e.at(i), false); + } + } + void sceneChangeEvent(const Qt3D::QSceneChangePtr &e) Q_DECL_OVERRIDE { events << ChangeRecord(e, false); diff --git a/tests/auto/core/qscene/tst_qscene.cpp b/tests/auto/core/qscene/tst_qscene.cpp index 51a469836..9c76b9eb6 100644 --- a/tests/auto/core/qscene/tst_qscene.cpp +++ b/tests/auto/core/qscene/tst_qscene.cpp @@ -66,6 +66,7 @@ class tst_LockableObserver : public Qt3D::QLockableObserverInterface public: void sceneChangeEvent(const Qt3D::QSceneChangePtr &) Q_DECL_OVERRIDE {} void sceneChangeEventWithLock(const Qt3D::QSceneChangePtr &) Q_DECL_OVERRIDE {} + void sceneChangeEventWithLock(const Qt3D::QSceneChangeList &) Q_DECL_OVERRIDE {} }; class tst_Observable : public Qt3D::QObservableInterface |