From 6afc3be37712416aa56940848aebe7682ad9e88f Mon Sep 17 00:00:00 2001 From: Kent Hansen Date: Fri, 15 Jun 2012 11:47:56 +0200 Subject: [PATCH] Implement QAbstractDeclarativeData::isSignalConnected hook QQml_isSignalConnected is no longer needed, since QObjectPrivate::isSignalConnected will now call the declarativeData hook. Change-Id: I0685b0fa909d6c6c2d275bfa8d41100d9926a046 Reviewed-by: Michael Brasser Reviewed-by: Chris Adams --- src/qml/qml/qqmldata_p.h | 2 ++ src/qml/qml/qqmlengine.cpp | 11 +++++------ src/qml/qml/qqmlglobal_p.h | 4 +--- src/quick/items/qquickitem.cpp | 2 +- tests/auto/qml/qqmllanguage/testtypes.h | 5 +++++ tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp | 5 +++++ 6 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/qml/qml/qqmldata_p.h b/src/qml/qml/qqmldata_p.h index 879d597..225d6d8 100644 --- a/src/qml/qml/qqmldata_p.h +++ b/src/qml/qml/qqmldata_p.h @@ -95,6 +95,7 @@ public: QAbstractDeclarativeData::parentChanged = parentChanged; QAbstractDeclarativeData::signalEmitted = signalEmitted; QAbstractDeclarativeData::receivers = receivers; + QAbstractDeclarativeData::isSignalConnected = isSignalConnected; } } @@ -102,6 +103,7 @@ public: static void parentChanged(QAbstractDeclarativeData *, QObject *, QObject *); static void signalEmitted(QAbstractDeclarativeData *, QObject *, int, void **); static int receivers(QAbstractDeclarativeData *, const QObject *, int); + static bool isSignalConnected(QAbstractDeclarativeData *, const QObject *, int); void destroyed(QObject *); void parentChanged(QObject *, QObject *); diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp index 6133568..391b8e8 100644 --- a/src/qml/qml/qqmlengine.cpp +++ b/src/qml/qml/qqmlengine.cpp @@ -570,6 +570,11 @@ int QQmlData::receivers(QAbstractDeclarativeData *d, const QObject *, int index) return static_cast(d)->endpointCount(index); } +bool QQmlData::isSignalConnected(QAbstractDeclarativeData *d, const QObject *, int index) +{ + return static_cast(d)->signalHasEndpoint(index); +} + int QQmlData::endpointCount(int index) { int count = 0; @@ -1304,12 +1309,6 @@ void QQmlData::addNotify(int index, QQmlNotifierEndpoint *endpoint) } } -bool QQml_isSignalConnected(QObject *obj, int signal_index) -{ - QQmlData *data = QQmlData::get(obj); - return QObjectPrivate::get(obj)->isSignalConnected(signal_index) || (data && data->signalHasEndpoint(signal_index)); -} - /* index MUST in the range returned by QObjectPrivate::signalIndex() This is different than the index returned by QMetaMethod::methodIndex() diff --git a/src/qml/qml/qqmlglobal_p.h b/src/qml/qml/qqmlglobal_p.h index c237af6..b3e8eb6 100644 --- a/src/qml/qml/qqmlglobal_p.h +++ b/src/qml/qml/qqmlglobal_p.h @@ -164,15 +164,13 @@ T qmlobject_cast(QObject *object) return 0; } -bool Q_QML_PRIVATE_EXPORT QQml_isSignalConnected(QObject*, int); - #define IS_SIGNAL_CONNECTED(Sender, SenderType, Name, Arguments) \ do { \ QObject *sender = (Sender); \ void (SenderType::*signal)Arguments = &SenderType::Name; \ static QMetaMethod method = QMetaMethod::fromSignal(signal); \ static int signalIdx = QMetaObjectPrivate::signalIndex(method); \ - return QQml_isSignalConnected(sender, signalIdx); \ + return QObjectPrivate::get(sender)->isSignalConnected(signalIdx); \ } while (0) struct QQmlGraphics_DerivedObject : public QObject diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index ab942f6..02a0c22 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -911,7 +911,7 @@ bool QQuickKeysAttached::isConnected(const char *signalName) { Q_D(QQuickKeysAttached); int signal_index = d->signalIndex(signalName); - return QQml_isSignalConnected(this, signal_index); + return d->isSignalConnected(signal_index); } /*! diff --git a/tests/auto/qml/qqmllanguage/testtypes.h b/tests/auto/qml/qqmllanguage/testtypes.h index 01f26c7..450abeb 100644 --- a/tests/auto/qml/qqmllanguage/testtypes.h +++ b/tests/auto/qml/qqmllanguage/testtypes.h @@ -643,10 +643,15 @@ public: int mySignalCount() { return receivers(SIGNAL(mySignal())); } int propChangedCount() { return receivers(SIGNAL(propChanged())); } + int myUnconnectedSignalCount() { return receivers(SIGNAL(myUnconnectedSignal())); } signals: void mySignal(); void propChanged(); + void myUnconnectedSignal(); + +private: + friend class tst_qqmllanguage; }; class MyDotPropertyObject : public QObject diff --git a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp index ed94eff..6a4acb3 100644 --- a/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp +++ b/tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp @@ -2738,6 +2738,11 @@ void tst_qqmllanguage::receivers() QVERIFY(o != 0); QCOMPARE(o->mySignalCount(), 1); QCOMPARE(o->propChangedCount(), 2); + QCOMPARE(o->myUnconnectedSignalCount(), 0); + + QVERIFY(o->isSignalConnected(QMetaMethod::fromSignal(&MyReceiversTestObject::mySignal))); + QVERIFY(o->isSignalConnected(QMetaMethod::fromSignal(&MyReceiversTestObject::propChanged))); + QVERIFY(!o->isSignalConnected(QMetaMethod::fromSignal(&MyReceiversTestObject::myUnconnectedSignal))); delete o; } -- 2.7.4