summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qobject.cpp
diff options
context:
space:
mode:
authorAhmad Samir <a.samirh78@gmail.com>2025-05-31 20:54:23 +0300
committerAhmad Samir <a.samirh78@gmail.com>2025-08-22 04:54:22 +0300
commit66a0fa62bf43bc161c07c74692325290f364da4e (patch)
tree9c64241e57627fac10c19a1c7ff41f3ead3956c6 /src/corelib/kernel/qobject.cpp
parenta7c166ee2262efb5d08271cdcd68e77fcb76f866 (diff)
QObject: (dis)connect(): normalize/decode the same signature
The SIGNAL/SLOT() macros add an integer to the beginning of a signal/method's signature as a marker; when calling QMOP::decodeMethodSiganture() we pass the function's signature without the marker, so logically the same should be done when calling QMO::normalizedSignature(). The behavior doesn't change, but we don't inc/decrement the signal/slot pointers back and forth, which makes the code more readable. Pick-to: 6.10 Change-Id: I967a78a5a2076ab2dabcbed589b061746cdd39f7 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/kernel/qobject.cpp')
-rw-r--r--src/corelib/kernel/qobject.cpp18
1 files changed, 8 insertions, 10 deletions
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
index 3cf3e9d39ba..991d88c6ee0 100644
--- a/src/corelib/kernel/qobject.cpp
+++ b/src/corelib/kernel/qobject.cpp
@@ -3055,8 +3055,8 @@ QMetaObject::Connection QObject::connect(const QObject *sender, const char *sign
&smeta, signalName, signalTypes.size(), signalTypes.constData());
if (signal_index < 0) {
// check for normalized signatures
- pinnedSignal = QMetaObject::normalizedSignature(signal - 1);
- signal = pinnedSignal.constData() + 1;
+ pinnedSignal = QMetaObject::normalizedSignature(signal);
+ signal = pinnedSignal.constData();
signalTypes.clear();
signalName = QMetaObjectPrivate::decodeMethodSignature(signal, signalTypes);
@@ -3321,19 +3321,22 @@ bool QObject::disconnect(const QObject *sender, const char *signal,
return false;
}
+ const char *signal_arg = signal;
if (signal) {
if (!check_signal_macro(sender, signal, "disconnect", "unbind"))
return false;
+ ++signal; // skip code
}
+ const char *method_arg = method;
int membcode = -1;
if (method) {
membcode = extract_code(method);
if (!check_method_code(membcode, receiver, method, "disconnect"))
return false;
+ ++method; // skip code
}
- const char *signal_arg = signal;
QByteArray pinnedSignal;
bool signal_found = false;
if (signal) {
@@ -3342,15 +3345,12 @@ bool QObject::disconnect(const QObject *sender, const char *signal,
signal = pinnedSignal.constData();
} QT_CATCH (const std::bad_alloc &) {
// if the signal is already normalized, we can continue.
- if (sender->metaObject()->indexOfSignal(signal + 1) == -1)
+ if (sender->metaObject()->indexOfSignal(signal) == -1)
QT_RETHROW;
}
-
- signal++; // skip code
}
QByteArray pinnedMethod;
- const char *method_arg = method;
bool method_found = false;
if (method) {
QT_TRY {
@@ -3358,11 +3358,9 @@ bool QObject::disconnect(const QObject *sender, const char *signal,
method = pinnedMethod.constData();
} QT_CATCH(const std::bad_alloc &) {
// if the method is already normalized, we can continue.
- if (receiver->metaObject()->indexOfMethod(method + 1) == -1)
+ if (receiver->metaObject()->indexOfMethod(method) == -1)
QT_RETHROW;
}
-
- method++; // skip code
}
/* We now iterate through all the sender's and receiver's meta