Change testlib signal dumper hooks to use signal index range
authorKent Hansen <kent.hansen@nokia.com>
Thu, 31 May 2012 19:49:07 +0000 (21:49 +0200)
committerQt by Nokia <qt-info@nokia.com>
Sun, 3 Jun 2012 23:18:52 +0000 (01:18 +0200)
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 <ogoffart@woboq.com>
src/corelib/kernel/qobject.cpp
src/corelib/kernel/qobject_p.h
src/testlib/qsignaldumper.cpp
src/testlib/testlib.pro

index ae96fff..d6793e7 100644 (file)
@@ -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);
 
 }
 
index 8121e74..02c9ac6 100644 (file)
@@ -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,
index 2da4174..53c70f3 100644 (file)
@@ -49,6 +49,8 @@
 
 #include <QtTest/private/qtestlog_p.h>
 
+#include <QtCore/private/qmetaobject_p.h>
+
 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,
index 142a854..1a76a3b 100644 (file)
@@ -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