diff options
author | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2014-08-18 21:09:04 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-08-19 00:42:00 +0200 |
commit | 75b62f3a172c277e8b90ef536da354deccb54d24 (patch) | |
tree | 2312151dfcaf678dc738062c3b85b32b67b51c44 /src/corelib/kernel | |
parent | 65240c602b2238f090118af816a2b051da7cf032 (diff) | |
parent | ca524e5b70ccfeb6386cf0c5df83ffb86a8771fe (diff) |
Merge "Merge remote-tracking branch 'origin/5.3' into 5.4" into refs/staging/5.4
Diffstat (limited to 'src/corelib/kernel')
-rw-r--r-- | src/corelib/kernel/qjni.cpp | 6 | ||||
-rw-r--r-- | src/corelib/kernel/qobject.cpp | 12 |
2 files changed, 11 insertions, 7 deletions
diff --git a/src/corelib/kernel/qjni.cpp b/src/corelib/kernel/qjni.cpp index aa9b196e62..4581b70ca7 100644 --- a/src/corelib/kernel/qjni.cpp +++ b/src/corelib/kernel/qjni.cpp @@ -721,7 +721,7 @@ jboolean QJNIObjectPrivate::callStaticMethod<jboolean>(jclass clazz, { va_list args; va_start(args, sig); - jboolean res = callStaticMethod<jboolean>(clazz, methodName, sig); + jboolean res = callStaticMethod<jboolean>(clazz, methodName, sig, args); va_end(args); return res; } @@ -1026,7 +1026,7 @@ jlong QJNIObjectPrivate::callStaticMethod<jlong>(jclass clazz, { va_list args; va_start(args, sig); - jlong res = callStaticMethod<jlong>(clazz, methodName, sig); + jlong res = callStaticMethod<jlong>(clazz, methodName, sig, args); va_end(args); return res; } @@ -1119,7 +1119,7 @@ jdouble QJNIObjectPrivate::callStaticMethod<jdouble>(const char *className, { va_list args; va_start(args, sig); - jdouble res = callStaticMethod<jdouble>(className, methodName, sig); + jdouble res = callStaticMethod<jdouble>(className, methodName, sig, args); va_end(args); return res; } diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index db2b086ff2..45bf4b62c5 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -4749,10 +4749,14 @@ bool QObject::disconnectImpl(const QObject *sender, void **signal, const QObject int signal_index = -1; if (signal) { void *args[] = { &signal_index, signal }; - senderMetaObject->static_metacall(QMetaObject::IndexOfMethod, 0, args); - if (signal_index < 0 || signal_index >= QMetaObjectPrivate::get(senderMetaObject)->signalCount) { - qWarning("QObject::disconnect: signal not found in %s", senderMetaObject->className()); - return false; + for (; senderMetaObject && signal_index < 0; senderMetaObject = senderMetaObject->superClass()) { + senderMetaObject->static_metacall(QMetaObject::IndexOfMethod, 0, args); + if (signal_index >= 0 && signal_index < QMetaObjectPrivate::get(senderMetaObject)->signalCount) + break; + } + if (!senderMetaObject) { + qWarning("QObject::disconnect: signal not found in %s", sender->metaObject()->className()); + return QMetaObject::Connection(0); } signal_index += QMetaObjectPrivate::signalOffset(senderMetaObject); } |