From: Marcus Eggenberger Date: Sat, 5 Jan 2008 20:39:26 +0000 (+0000) Subject: SignalProxy emits now the updatedRemotely() Signal of a sync call X-Git-Tag: 0.2.0-alpha1~251 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=e579b77068ae216e275fee0bb560c2a4ea9c7225 SignalProxy emits now the updatedRemotely() Signal of a sync call receiver, if there is such a signal and the sync call was successfull. --- 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) { diff --git a/src/common/signalproxy.h b/src/common/signalproxy.h index 23dbc9f2..c52a35ce 100644 --- a/src/common/signalproxy.h +++ b/src/common/signalproxy.h @@ -90,6 +90,7 @@ public: static QString methodBaseName(const QMetaMethod &method); const QList &argTypes(QObject *obj, int methodId); + bool hasUpdateSignal(QObject *obj); const QByteArray &methodName(QObject *obj, int methodId); const QHash &syncMap(QObject *obj); @@ -99,6 +100,7 @@ public: ArgHash argTypes; MethodNameHash methodNames; QHash syncMap; + bool hasUpdateSignal; }; void dumpProxyStats();