Implement QAbstractDeclarativeData::isSignalConnected hook
authorKent Hansen <kent.hansen@nokia.com>
Fri, 15 Jun 2012 09:47:56 +0000 (11:47 +0200)
committerQt by Nokia <qt-info@nokia.com>
Wed, 27 Jun 2012 03:08:52 +0000 (05:08 +0200)
QQml_isSignalConnected is no longer needed, since
QObjectPrivate::isSignalConnected will now call the declarativeData
hook.

Change-Id: I0685b0fa909d6c6c2d275bfa8d41100d9926a046
Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
Reviewed-by: Chris Adams <christopher.adams@nokia.com>
src/qml/qml/qqmldata_p.h
src/qml/qml/qqmlengine.cpp
src/qml/qml/qqmlglobal_p.h
src/quick/items/qquickitem.cpp
tests/auto/qml/qqmllanguage/testtypes.h
tests/auto/qml/qqmllanguage/tst_qqmllanguage.cpp

index 879d597..225d6d8 100644 (file)
@@ -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 *);
index 6133568..391b8e8 100644 (file)
@@ -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()
index c237af6..b3e8eb6 100644 (file)
@@ -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
index ab942f6..02a0c22 100644 (file)
@@ -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);
 }
 
 /*!
index 01f26c7..450abeb 100644 (file)
@@ -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
index ed94eff..6a4acb3 100644 (file)
@@ -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;
 }