summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qobject.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/kernel/qobject.cpp')
-rw-r--r--src/corelib/kernel/qobject.cpp29
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
}