receiver, if there is such a signal and the sync call was successfull.
return _classInfo[obj->metaObject()]->argTypes[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)));
void SignalProxy::setMethodName(QObject *obj, int methodId) {
const QMetaObject *meta = obj->metaObject();
QByteArray method(::methodName(meta->method(methodId)));
}
void SignalProxy::createClassInfo(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) {
}
bool SignalProxy::attachSignal(QObject* sender, const char* signal, const QByteArray& sigName) {
}
int slotId = syncMap(receiver)[signal];
}
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());
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) {
}
void SignalProxy::handleInitRequest(QIODevice *sender, const QVariantList ¶ms) {
static QString methodBaseName(const QMetaMethod &method);
const QList<int> &argTypes(QObject *obj, int methodId);
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);
const QByteArray &methodName(QObject *obj, int methodId);
const QHash<QByteArray, int> &syncMap(QObject *obj);
ArgHash argTypes;
MethodNameHash methodNames;
QHash<QByteArray, int> syncMap;
ArgHash argTypes;
MethodNameHash methodNames;
QHash<QByteArray, int> syncMap;
};
void dumpProxyStats();
};
void dumpProxyStats();