diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2014-07-23 15:44:41 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2014-07-25 13:37:23 +0200 |
commit | 53bd9547ec377990f64ed2d28b3b30cd04636e4c (patch) | |
tree | e840e1c54aea2f2d74cc61ce9a3340c95d4d847d /src/core/qchangearbiter.cpp | |
parent | 52d6c538067642ea8a539fba2a372e0bdbd5bbbc (diff) |
QChangeArbiter: SceneObservers notified of NodeCreated/Delete
Change-Id: Ia82ba24a631bc136b3fa843783d26e5c4cb42f15
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/core/qchangearbiter.cpp')
-rw-r--r-- | src/core/qchangearbiter.cpp | 64 |
1 files changed, 42 insertions, 22 deletions
diff --git a/src/core/qchangearbiter.cpp b/src/core/qchangearbiter.cpp index 62d3e0361..0d2f4fd6b 100644 --- a/src/core/qchangearbiter.cpp +++ b/src/core/qchangearbiter.cpp @@ -44,11 +44,11 @@ #include "qjobmanagerinterface.h" #include "corelogging.h" +#include "qsceneobserverinterface.h" #include <QMutexLocker> #include <QReadLocker> #include <QThread> #include <QWriteLocker> - #include <private/qchangearbiter_p.h> QT_BEGIN_NAMESPACE @@ -111,33 +111,53 @@ void QChangeArbiter::distributeQueueChanges(ChangeQueue *changeQueue) if (change.isNull()) continue; - switch (change->observableType()) { + switch (change->type()) { - case QSceneChange::Observable: { - QObservableInterface *subject = change->subject().m_observable; - if (d->m_aspectObservations.contains(subject)) { - QObserverList &observers = d->m_aspectObservations[subject]; - Q_FOREACH (const QObserverPair &observer, observers) { - if ((change->type() & observer.first)) - observer.second->sceneChangeEvent(change); - } - } + case NodeCreated: { + Q_FOREACH (QSceneObserverInterface *observer, d->m_sceneObservers) + observer->sceneNodeAdded(change); + break; + } + + case NodeDeleted: + case NodeAboutToBeDeleted: { + Q_FOREACH (QSceneObserverInterface *observer, d->m_sceneObservers) + observer->sceneNodeRemoved(change); break; } - case QSceneChange::Node: { - QNode *subject = change->subject().m_node; - if (d->m_nodeObservations.contains(subject)) { - QObserverList &observers = d->m_nodeObservations[subject]; - Q_FOREACH (const QObserverPair&observer, observers) { - if ((change->type() & observer.first)) - observer.second->sceneChangeEvent(change); + default : { + switch (change->observableType()) { + + case QSceneChange::Observable: { + QObservableInterface *subject = change->subject().m_observable; + if (d->m_aspectObservations.contains(subject)) { + QObserverList &observers = d->m_aspectObservations[subject]; + Q_FOREACH (const QObserverPair &observer, observers) { + if ((change->type() & observer.first)) + observer.second->sceneChangeEvent(change); + } } + break; } + + case QSceneChange::Node: { + QNode *subject = change->subject().m_node; + if (d->m_nodeObservations.contains(subject)) { + QObserverList &observers = d->m_nodeObservations[subject]; + Q_FOREACH (const QObserverPair&observer, observers) { + if ((change->type() & observer.first)) + observer.second->sceneChangeEvent(change); + } + } + break; + } + + } // observableType switch break; - } + } // default - } + } // change type switch } } @@ -260,14 +280,14 @@ void QChangeArbiter::unregisterSceneObserver(QSceneObserverInterface *observer) void QChangeArbiter::sceneChangeEvent(const QSceneChangePtr &e) { -// qCDebug(ChangeArbiter) << Q_FUNC_INFO << QThread::currentThread(); + // qCDebug(ChangeArbiter) << Q_FUNC_INFO << QThread::currentThread(); Q_D(QChangeArbiter); // Add the change to the thread local storage queue - no locking required => yay! ChangeQueue *localChangeQueue = d->m_tlsChangeQueue.localData(); localChangeQueue->append(e); -// qCDebug(ChangeArbiter) << "Change queue for thread" << QThread::currentThread() << "now contains" << localChangeQueue->count() << "items"; + // qCDebug(ChangeArbiter) << "Change queue for thread" << QThread::currentThread() << "now contains" << localChangeQueue->count() << "items"; } void QChangeArbiter::sceneChangeEventWithLock(const QSceneChangePtr &e) |