summaryrefslogtreecommitdiffstats
path: root/src/core/qchangearbiter.cpp
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2014-07-25 11:30:56 +0200
committerSean Harmer <sean.harmer@kdab.com>2014-08-13 20:18:52 +0200
commit543fd7aa1d4b683c26165901b7d0383a9cb56eef (patch)
tree414adcf355343821bd052478fb786d6d98428ba2 /src/core/qchangearbiter.cpp
parent27b1255ab869768d49837dd892ffbb2f62c9eff4 (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.cpp27
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);