SignalProxy emits now the updatedRemotely() Signal of a sync call
authorMarcus Eggenberger <egs@quassel-irc.org>
Sat, 5 Jan 2008 20:39:26 +0000 (20:39 +0000)
committerMarcus Eggenberger <egs@quassel-irc.org>
Sat, 5 Jan 2008 20:39:26 +0000 (20:39 +0000)
receiver, if there is such a signal and the sync call was successfull.

src/common/signalproxy.cpp
src/common/signalproxy.h

index 0af4fdc..b2b6c77 100644 (file)
@@ -334,6 +334,12 @@ const QList<int> &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<QByteArray,int> &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 &params) {
index 23dbc9f..c52a35c 100644 (file)
@@ -90,6 +90,7 @@ public:
   static QString methodBaseName(const QMetaMethod &method);
   
   const QList<int> &argTypes(QObject *obj, int methodId);
+  bool hasUpdateSignal(QObject *obj);
   const QByteArray &methodName(QObject *obj, int methodId);
   const QHash<QByteArray, int> &syncMap(QObject *obj);
 
@@ -99,6 +100,7 @@ public:
     ArgHash argTypes;
     MethodNameHash methodNames;
     QHash<QByteArray, int> syncMap;
+    bool hasUpdateSignal;
   };
 
   void dumpProxyStats();