X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fsignalproxy.cpp;h=b2b6c771e80e1dc0519a27fb1fe232c2da7a1684;hp=0af4fdc070452080946f368471e237bb0f1775bc;hb=e579b77068ae216e275fee0bb560c2a4ea9c7225;hpb=17a902604b2631d1165fb8c7af65e064e37a49d7 diff --git a/src/common/signalproxy.cpp b/src/common/signalproxy.cpp index 0af4fdc0..b2b6c771 100644 --- a/src/common/signalproxy.cpp +++ b/src/common/signalproxy.cpp @@ -334,6 +334,12 @@ const QList &SignalProxy::argTypes(QObject *obj, int methodId) { return _classInfo[obj->metaObject()]->argTypes[methodId]; } +bool SignalProxy::hasUpdateSignal(QObject *obj) { + if(!_classInfo.contains(obj->metaObject())) + return false; + return _classInfo[obj->metaObject()]->hasUpdateSignal; +} + void SignalProxy::setMethodName(QObject *obj, int methodId) { const QMetaObject *meta = obj->metaObject(); QByteArray method(::methodName(meta->method(methodId))); @@ -392,8 +398,12 @@ const QHash &SignalProxy::syncMap(QObject *obj) { } void SignalProxy::createClassInfo(QObject *obj) { - if(!_classInfo.contains(obj->metaObject())) - _classInfo[obj->metaObject()] = new ClassInfo(); + if(_classInfo.contains(obj->metaObject())) + return; + + ClassInfo *classInfo = new ClassInfo(); + classInfo->hasUpdateSignal = (obj->metaObject()->indexOfSignal(QMetaObject::normalizedSignature("updatedRemotely()")) != -1); + _classInfo[obj->metaObject()] = classInfo; } bool SignalProxy::attachSignal(QObject* sender, const char* signal, const QByteArray& sigName) { @@ -615,8 +625,12 @@ void SignalProxy::handleSync(QVariantList params) { } int slotId = syncMap(receiver)[signal]; - if(!invokeSlot(receiver, slotId, params)) + if(!invokeSlot(receiver, slotId, params)) { qWarning("SignalProxy::handleSync(): invokeMethod for \"%s\" failed ", methodName(receiver, slotId).constData()); + return; + } + if(hasUpdateSignal(receiver)) + QMetaObject::invokeMethod(receiver, "updatedRemotely"); } void SignalProxy::handleInitRequest(QIODevice *sender, const QVariantList ¶ms) {