From ff505197689062264bf2abc0661d03d371e997df Mon Sep 17 00:00:00 2001 From: Kent Hansen Date: Thu, 31 May 2012 21:49:07 +0200 Subject: Change testlib signal dumper hooks to use signal index range Another step towards getting rid of the class method offset computation in QMetaObject::activate(). Since QMetaObjectPrivate::signal() is private API, this also required adding a testlib dependency on core-private (and getting rid of the duplicated QSignalSpyCallbackSet struct). Change-Id: I0d830f35392a6b44fc321c5285877ec0bf437100 Reviewed-by: Olivier Goffart --- src/corelib/kernel/qobject.cpp | 8 +++----- src/corelib/kernel/qobject_p.h | 6 +++--- src/testlib/qsignaldumper.cpp | 21 +++++---------------- src/testlib/testlib.pro | 2 +- 4 files changed, 12 insertions(+), 25 deletions(-) (limited to 'src') diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index ae96fffcec..d6793e7568 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -3299,11 +3299,9 @@ void QMetaObject::activate(QObject *sender, int methodOffset, int signalOffset, if (sender->d_func()->blockSig) return; - int signal_absolute_index = methodOffset + local_signal_index; - void *empty_argv[] = { 0 }; if (qt_signal_spy_callback_set.signal_begin_callback != 0) { - qt_signal_spy_callback_set.signal_begin_callback(sender, signal_absolute_index, + qt_signal_spy_callback_set.signal_begin_callback(sender, signal_index, argv ? argv : empty_argv); } @@ -3337,7 +3335,7 @@ void QMetaObject::activate(QObject *sender, int methodOffset, int signalOffset, if (!connectionLists.connectionLists) { locker.unlock(); if (qt_signal_spy_callback_set.signal_end_callback != 0) - qt_signal_spy_callback_set.signal_end_callback(sender, signal_absolute_index); + qt_signal_spy_callback_set.signal_end_callback(sender, signal_index); return; } @@ -3441,7 +3439,7 @@ void QMetaObject::activate(QObject *sender, int methodOffset, int signalOffset, } if (qt_signal_spy_callback_set.signal_end_callback != 0) - qt_signal_spy_callback_set.signal_end_callback(sender, signal_absolute_index); + qt_signal_spy_callback_set.signal_end_callback(sender, signal_index); } diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h index 8121e74245..02c9ac61a7 100644 --- a/src/corelib/kernel/qobject_p.h +++ b/src/corelib/kernel/qobject_p.h @@ -69,11 +69,11 @@ class QThreadData; class QObjectConnectionListVector; namespace QtSharedPointer { struct ExternalRefCountData; } -/* mirrored in QtTestLib, DON'T CHANGE without prior warning */ +/* for QtTestLib */ struct QSignalSpyCallbackSet { - typedef void (*BeginCallback)(QObject *caller, int method_index, void **argv); - typedef void (*EndCallback)(QObject *caller, int method_index); + typedef void (*BeginCallback)(QObject *caller, int signal_or_method_index, void **argv); + typedef void (*EndCallback)(QObject *caller, int signal_or_method_index); BeginCallback signal_begin_callback, slot_begin_callback; EndCallback signal_end_callback, diff --git a/src/testlib/qsignaldumper.cpp b/src/testlib/qsignaldumper.cpp index 2da4174e3a..53c70f3101 100644 --- a/src/testlib/qsignaldumper.cpp +++ b/src/testlib/qsignaldumper.cpp @@ -49,6 +49,8 @@ #include +#include + QT_BEGIN_NAMESPACE namespace QTest @@ -64,12 +66,12 @@ static int iLevel = 0; static int ignoreLevel = 0; enum { IndentSpacesCount = 4 }; -static void qSignalDumperCallback(QObject *caller, int method_index, void **argv) +static void qSignalDumperCallback(QObject *caller, int signal_index, void **argv) { Q_ASSERT(caller); Q_ASSERT(argv); Q_UNUSED(argv); const QMetaObject *mo = caller->metaObject(); Q_ASSERT(mo); - QMetaMethod member = mo->method(method_index); + QMetaMethod member = QMetaObjectPrivate::signal(mo, signal_index); Q_ASSERT(member.isValid()); if (QTest::ignoreClasses() && QTest::ignoreClasses()->contains(mo->className())) { @@ -151,7 +153,7 @@ static void qSignalDumperCallbackSlot(QObject *caller, int method_index, void ** qPrintMessage(str); } -static void qSignalDumperCallbackEndSignal(QObject *caller, int /*method_index*/) +static void qSignalDumperCallbackEndSignal(QObject *caller, int /*signal_index*/) { Q_ASSERT(caller); Q_ASSERT(caller->metaObject()); if (QTest::ignoreClasses() @@ -166,19 +168,6 @@ static void qSignalDumperCallbackEndSignal(QObject *caller, int /*method_index*/ } -// this struct is copied from qobject_p.h to prevent us -// from including private Qt headers. -struct QSignalSpyCallbackSet -{ - typedef void (*BeginCallback)(QObject *caller, int method_index, void **argv); - typedef void (*EndCallback)(QObject *caller, int method_index); - BeginCallback signal_begin_callback, - slot_begin_callback; - EndCallback signal_end_callback, - slot_end_callback; -}; -extern void Q_CORE_EXPORT qt_register_signal_spy_callbacks(const QSignalSpyCallbackSet &); - void QSignalDumper::startDump() { static QSignalSpyCallbackSet set = { QTest::qSignalDumperCallback, diff --git a/src/testlib/testlib.pro b/src/testlib/testlib.pro index 142a854693..1a76a3b556 100644 --- a/src/testlib/testlib.pro +++ b/src/testlib/testlib.pro @@ -2,7 +2,7 @@ load(qt_module) TARGET = QtTest QPRO_PWD = $$PWD -QT = core +QT = core-private CONFIG += module exceptions MODULE_PRI = ../modules/qt_testlib.pri -- cgit v1.2.3