mirror of https://github.com/qt/qtbase.git
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>
This commit is contained in:
parent
a7c166ee22
commit
66a0fa62bf
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue