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.cpp14
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;
}
/*!