aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlglobal_p.h
diff options
context:
space:
mode:
authorKent Hansen <kent.hansen@nokia.com>2012-06-03 20:30:49 +0200
committerQt by Nokia <qt-info@nokia.com>2012-06-10 13:47:15 +0200
commit6f7bb92e5df069716bef9639c965b4c8a9aaaabf (patch)
tree8971961afb6b046dcbddb3ba6c7778b1e3f7b2da /src/qml/qml/qqmlglobal_p.h
parenta597b4c19f372b65773bb58539b1dfb362f12fdc (diff)
Avoid string-based lookup in IS_SIGNAL_CONNECTED
Specify the signal as a member function suitable for passing to QMetaMethod::fromSignal(), and use the new function QMetaObjectPrivate::signalIndex(QMetaMethod) to get the index in the signal range. Change-Id: If16daa24c2699f7749a17decb611cf395d89d0c4 Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
Diffstat (limited to 'src/qml/qml/qqmlglobal_p.h')
-rw-r--r--src/qml/qml/qqmlglobal_p.h14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/qml/qml/qqmlglobal_p.h b/src/qml/qml/qqmlglobal_p.h
index 3ed7286ed9..75974a4e7c 100644
--- a/src/qml/qml/qqmlglobal_p.h
+++ b/src/qml/qml/qqmlglobal_p.h
@@ -45,6 +45,7 @@
#include <private/qtqmlglobal_p.h>
#include <QtCore/QObject>
#include <private/qqmlpropertycache_p.h>
+#include <private/qmetaobject_p.h>
QT_BEGIN_HEADER
@@ -165,16 +166,13 @@ T qmlobject_cast(QObject *object)
bool Q_QML_PRIVATE_EXPORT QQml_isSignalConnected(QObject*, int, int);
-#define IS_SIGNAL_CONNECTED(Sender, Signal) \
+#define IS_SIGNAL_CONNECTED(Sender, SenderType, Name, Arguments) \
do { \
QObject *sender = (Sender); \
- const char *signal = (Signal); \
- static int signalIdx = -1; \
- static int methodIdx = -1; \
- if (signalIdx < 0) { \
- signalIdx = QObjectPrivate::get(sender)->signalIndex(signal); \
- methodIdx = sender->metaObject()->indexOfSignal(signal); \
- } \
+ void (SenderType::*signal)Arguments = &SenderType::Name; \
+ static QMetaMethod method = QMetaMethod::fromSignal(signal); \
+ static int signalIdx = QMetaObjectPrivate::signalIndex(method); \
+ static int methodIdx = method.methodIndex(); \
return QQml_isSignalConnected(sender, signalIdx, methodIdx); \
} while (0)