diff options
author | Kent Hansen <kent.hansen@nokia.com> | 2012-06-03 20:30:49 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-06-10 13:47:15 +0200 |
commit | 6f7bb92e5df069716bef9639c965b4c8a9aaaabf (patch) | |
tree | 8971961afb6b046dcbddb3ba6c7778b1e3f7b2da /src/qml/qml/qqmlglobal_p.h | |
parent | a597b4c19f372b65773bb58539b1dfb362f12fdc (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.h | 14 |
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) |