From 0d53027b95e4bd9ca369bd909c17cf13612f7dd5 Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Wed, 30 Jan 2008 16:35:51 +0000 Subject: [PATCH] SignalProxy will no longer attempt to deliver data types unknown to Qt's MetaSystem --- src/common/signalproxy.cpp | 19 +++++++++++++++---- version.inc | 2 +- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/common/signalproxy.cpp b/src/common/signalproxy.cpp index f6f75d65..5c2f20e0 100644 --- a/src/common/signalproxy.cpp +++ b/src/common/signalproxy.cpp @@ -80,8 +80,14 @@ int SignalRelay::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { const QList &argTypes = proxy->argTypes(caller, _id); QVariantList params; int n = argTypes.size(); - for(int i=0; imetaObject()->className()).arg(caller->metaObject()->method(_id).signature()); + qWarning() << " - make sure all your data types are known by the Qt MetaSystem"; + return _id; + } + params.append(QVariant(argTypes[i], _a[i+1])); + } QMultiHash::const_iterator funcIter = sigNames.constFind(_id); while(funcIter != sigNames.constEnd() && funcIter.key() == _id) { proxy->dispatchSignal(funcIter.value(), params); @@ -103,7 +109,7 @@ int SignalRelay::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { proxy->dispatchSignal((int)SignalProxy::Sync, params); } } - _id -= 1; + _id -= QObject::staticMetaObject.methodCount(); } return _id; } @@ -703,7 +709,7 @@ bool SignalProxy::invokeSlot(QObject *receiver, int methodId, const QVariantList ? params.count() : args.count(); - if(minArgCount(receiver, methodId) < params.count()) { + if(minArgCount(receiver, methodId) > params.count()) { qWarning() << "SignalProxy::invokeSlot(): not enough params to invoke" << methodName(receiver, methodId); return false; } @@ -713,6 +719,11 @@ bool SignalProxy::invokeSlot(QObject *receiver, int methodId, const QVariantList 0, 0, 0, 0 , 0}; // check for argument compatibility and build params array for(int i = 0; i < numArgs; i++) { + if(!params[i].isValid()) { + qWarning() << "SignalProxy::invokeSlot(): received invalid data for argument number" << i << "of method" << QString("%1::%2()").arg(receiver->metaObject()->className()).arg(receiver->metaObject()->method(methodId).signature()); + qWarning() << " - make sure all your data types are known by the Qt MetaSystem"; + return false; + } if(args[i] != QMetaType::type(params[i].typeName())) { qWarning() << "SignalProxy::invokeSlot(): incompatible param types to invoke" << methodName(receiver, methodId); return false; diff --git a/version.inc b/version.inc index bd89ddbf..0478b2e4 100644 --- a/version.inc +++ b/version.inc @@ -5,7 +5,7 @@ quasselVersion = "0.2.0-pre"; quasselDate = "2008-01-30"; - quasselBuild = 414; + quasselBuild = 415; //! Minimum client build number the core needs clientBuildNeeded = 358; -- 2.20.1