X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fsyncableobject.cpp;h=325f0be32fdd6002dbc539afafd7b19c171da72b;hp=526e47a1359f46d97ac45e950f70343778ef6cf9;hb=70283ef877bdf3339fb067667ad9130ceabd8b9a;hpb=f824db0e31b54969e0b7fa0b5405b1e9173d482c diff --git a/src/common/syncableobject.cpp b/src/common/syncableobject.cpp index 526e47a1..325f0be3 100644 --- a/src/common/syncableobject.cpp +++ b/src/common/syncableobject.cpp @@ -49,6 +49,15 @@ SyncableObject::SyncableObject(const SyncableObject &other, QObject *parent) { } +SyncableObject::~SyncableObject() { + QList::iterator proxyIter = _signalProxies.begin(); + while(proxyIter != _signalProxies.end()) { + SignalProxy *proxy = (*proxyIter); + proxyIter = _signalProxies.erase(proxyIter); + proxy->stopSynchronize(this); + } +} + SyncableObject &SyncableObject::operator=(const SyncableObject &other) { if(this == &other) return *this; @@ -140,7 +149,9 @@ void SyncableObject::renameObject(const QString &newName) { const QString oldName = objectName(); if(oldName != newName) { setObjectName(newName); - emit objectRenamed(newName, oldName); + foreach(SignalProxy *proxy, _signalProxies) { + proxy->renameObject(this, newName, oldName); + } } } @@ -155,3 +166,28 @@ void SyncableObject::requestUpdate(const QVariantMap &properties) { } emit updateRequested(properties); } + +void SyncableObject::sync_call__(SignalProxy::ProxyMode modeType, const char *funcname, ...) const { + //qDebug() << Q_FUNC_INFO << modeType << funcname; + foreach(SignalProxy *proxy, _signalProxies) { + va_list ap; + va_start(ap, funcname); + proxy->sync_call__(this, modeType, funcname, ap); + va_end(ap); + } +} + +void SyncableObject::synchronize(SignalProxy *proxy) { + if(_signalProxies.contains(proxy)) + return; + _signalProxies << proxy; +} + +void SyncableObject::stopSynchronize(SignalProxy *proxy) { + for(int i = 0; i < _signalProxies.count(); i++) { + if(_signalProxies[i] == proxy) { + _signalProxies.removeAt(i); + break; + } + } +}