summaryrefslogtreecommitdiffstats
path: root/src/core/qchangearbiter.cpp
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2014-07-23 15:44:41 +0200
committerSean Harmer <sean.harmer@kdab.com>2014-07-25 13:37:23 +0200
commit53bd9547ec377990f64ed2d28b3b30cd04636e4c (patch)
treee840e1c54aea2f2d74cc61ce9a3340c95d4d847d /src/core/qchangearbiter.cpp
parent52d6c538067642ea8a539fba2a372e0bdbd5bbbc (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.cpp64
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)