diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2014-07-25 11:30:56 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2014-08-13 20:18:52 +0200 |
commit | 543fd7aa1d4b683c26165901b7d0383a9cb56eef (patch) | |
tree | 414adcf355343821bd052478fb786d6d98428ba2 /src/core/qchangearbiter.cpp | |
parent | 27b1255ab869768d49837dd892ffbb2f62c9eff4 (diff) |
QChangeArbiter can register/unregister observers from a node QUuid
Change-Id: Ie608e5be3a3c26bb59cd741ab9e3d3cf9fb3d94e
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/core/qchangearbiter.cpp')
-rw-r--r-- | src/core/qchangearbiter.cpp | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/src/core/qchangearbiter.cpp b/src/core/qchangearbiter.cpp index 0d2f4fd6b..9a5b808aa 100644 --- a/src/core/qchangearbiter.cpp +++ b/src/core/qchangearbiter.cpp @@ -143,8 +143,8 @@ void QChangeArbiter::distributeQueueChanges(ChangeQueue *changeQueue) case QSceneChange::Node: { QNode *subject = change->subject().m_node; - if (d->m_nodeObservations.contains(subject)) { - QObserverList &observers = d->m_nodeObservations[subject]; + if (d->m_nodeObservations.contains(subject->uuid())) { + QObserverList &observers = d->m_nodeObservations[subject->uuid()]; Q_FOREACH (const QObserverPair&observer, observers) { if ((change->type() & observer.first)) observer.second->sceneChangeEvent(change); @@ -195,6 +195,16 @@ void QChangeArbiter::syncChanges() } void QChangeArbiter::registerObserver(QObserverInterface *observer, + const QUuid &nodeId, + ChangeFlags changeFlags) +{ + Q_D(QChangeArbiter); + QMutexLocker locker(&d->m_mutex); + QObserverList &observerList = d->m_nodeObservations[nodeId]; + observerList.append(QObserverPair(changeFlags, observer)); +} + +void QChangeArbiter::registerObserver(QObserverInterface *observer, QObservableInterface *observable, ChangeFlags changeFlags) { @@ -210,7 +220,9 @@ void QChangeArbiter::registerObserver(QObserverInterface *observer, { Q_D(QChangeArbiter); QMutexLocker locker(&d->m_mutex); - QObserverList &observerList = d->m_nodeObservations[observable]; + if (!observable) + return; + QObserverList &observerList = d->m_nodeObservations[observable->uuid()]; registerObserverHelper(observerList, observer, observable, changeFlags); } @@ -259,10 +271,15 @@ void QChangeArbiter::unregisterObserver(QObserverInterface *observer, void QChangeArbiter::unregisterObserver(QObserverInterface *observer, QNode *subject) { + unregisterObserver(observer, subject->uuid()); +} + +void QChangeArbiter::unregisterObserver(QObserverInterface *observer, const QUuid &nodeId) +{ Q_D(QChangeArbiter); QMutexLocker locker(&d->m_mutex); - if (d->m_nodeObservations.contains(subject)) { - QObserverList &observers = d->m_nodeObservations[subject]; + if (d->m_nodeObservations.contains(nodeId)) { + QObserverList &observers = d->m_nodeObservations[nodeId]; for (int i = observers.count() - 1; i >= 0; i--) { if (observers[i].second == observer) observers.removeAt(i); |