diff options
Diffstat (limited to 'src/corelib/kernel/qobject.cpp')
-rw-r--r-- | src/corelib/kernel/qobject.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index f151acd703..c51507c2e2 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -4038,7 +4038,19 @@ QMetaObject::Connection QObject::connectImpl(const QObject *sender, void **signa } QObjectPrivate::get(s)->addConnection(signal_index, c.data()); - return QMetaObject::Connection(c.take()); + QMetaObject::Connection ret(c.take()); + locker.unlock(); + + // reconstruct the signature to call connectNotify + const char *sig = senderMetaObject->d.stringdata + senderMetaObject->d.data[ + reinterpret_cast<const QMetaObjectPrivate*>(senderMetaObject->d.data)->methodData + + 5 * (signal_index - signalOffset)]; + QVarLengthArray<char> signalSignature(qstrlen(sig) + 2); + signalSignature.data()[0] = char(QSIGNAL_CODE + '0'); + strcpy(signalSignature.data() + 1 , sig); + s->connectNotify(signalSignature.data()); + + return ret; } /*! |