diff options
-rw-r--r-- | src/qml/qml/qqmldata_p.h | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmlengine.cpp | 11 | ||||
-rw-r--r-- | src/qml/qml/qqmlglobal_p.h | 4 | ||||
-rw-r--r-- | src/quick/items/qquickitem.cpp | 2 | ||||
-rw-r--r-- | tests/auto/qml/qqmllanguage/testtypes.h | 5 | ||||
-rw-r--r-- | 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 879d59722b..225d6d854d 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 6133568426..391b8e89b3 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<QQmlData *>(d)->endpointCount(index); } +bool QQmlData::isSignalConnected(QAbstractDeclarativeData *d, const QObject *, int index) +{ + return static_cast<QQmlData *>(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 c237af6a7c..b3e8eb6421 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 ab942f6489..02a0c22c5d 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 01f26c7f67..450abebad4 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 ed94eff574..6a4acb3280 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; } |