diff options
Diffstat (limited to 'src/corelib/kernel/qobject.cpp')
| -rw-r--r-- | src/corelib/kernel/qobject.cpp | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index 5ce14c6b8eb..3cf3e9d39ba 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -3036,10 +3036,15 @@ QMetaObject::Connection QObject::connect(const QObject *sender, const char *sign (method && *method) ? method + 1 : "(nullptr)"); return QMetaObject::Connection(nullptr); } - QByteArray pinnedSignal; if (!check_signal_macro(sender, signal, "connect", "bind")) return QMetaObject::Connection(nullptr); + + int membcode = extract_code(method); + if (!check_method_code(membcode, receiver, method, "connect")) + return QMetaObject::Connection(nullptr); + + QByteArray pinnedSignal; const QMetaObject *smeta = sender->metaObject(); const char *signal_arg = signal; ++signal; // skip code @@ -3068,10 +3073,6 @@ QMetaObject::Connection QObject::connect(const QObject *sender, const char *sign signal_index += QMetaObjectPrivate::signalOffset(smeta); QByteArray pinnedMethod; - int membcode = extract_code(method); - - if (!check_method_code(membcode, receiver, method, "connect")) - return QMetaObject::Connection(nullptr); const char *method_arg = method; ++method; // skip code @@ -3320,6 +3321,18 @@ bool QObject::disconnect(const QObject *sender, const char *signal, return false; } + if (signal) { + if (!check_signal_macro(sender, signal, "disconnect", "unbind")) + return false; + } + + int membcode = -1; + if (method) { + membcode = extract_code(method); + if (!check_method_code(membcode, receiver, method, "disconnect")) + return false; + } + const char *signal_arg = signal; QByteArray pinnedSignal; bool signal_found = false; @@ -3333,14 +3346,11 @@ bool QObject::disconnect(const QObject *sender, const char *signal, QT_RETHROW; } - if (!check_signal_macro(sender, signal, "disconnect", "unbind")) - return false; signal++; // skip code } QByteArray pinnedMethod; const char *method_arg = method; - int membcode = -1; bool method_found = false; if (method) { QT_TRY { @@ -3352,9 +3362,6 @@ bool QObject::disconnect(const QObject *sender, const char *signal, QT_RETHROW; } - membcode = extract_code(method); - if (!check_method_code(membcode, receiver, method, "disconnect")) - return false; method++; // skip code } |
