diff --git a/src/particles/qquickcustomaffector.cpp b/src/particles/qquickcustomaffector.cpp index 72b1536c541d9b3e2cc784767934ed08de8ff7e8..819dd128fa9d1c9b498e615df0b8cacf83b92890 100644 --- a/src/particles/qquickcustomaffector.cpp +++ b/src/particles/qquickcustomaffector.cpp @@ -103,7 +103,7 @@ QQuickCustomAffector::QQuickCustomAffector(QQuickItem *parent) : bool QQuickCustomAffector::isAffectConnected() { - IS_SIGNAL_CONNECTED(this, "affectParticles(QQmlV8Handle,qreal)"); + IS_SIGNAL_CONNECTED(this, QQuickCustomAffector, affectParticles, (QQmlV8Handle,qreal)); } void QQuickCustomAffector::affectSystem(qreal dt) diff --git a/src/particles/qquickparticleaffector.cpp b/src/particles/qquickparticleaffector.cpp index 978c53e9a23b9302a1bf47d89b1dfd57ab971539..61396b1579ffaa9b25dcda2e3a6f5c8726be1905 100644 --- a/src/particles/qquickparticleaffector.cpp +++ b/src/particles/qquickparticleaffector.cpp @@ -135,7 +135,7 @@ QQuickParticleAffector::QQuickParticleAffector(QQuickItem *parent) : bool QQuickParticleAffector::isAffectedConnected() { - IS_SIGNAL_CONNECTED(this, "affected(qreal,qreal)"); + IS_SIGNAL_CONNECTED(this, QQuickParticleAffector, affected, (qreal,qreal)); } diff --git a/src/particles/qquickparticleemitter.cpp b/src/particles/qquickparticleemitter.cpp index eb965a7f81c23716fb8635a938ebb016b4c6169c..6e53b0940ce669ea677573f8013672d8b3ee0962 100644 --- a/src/particles/qquickparticleemitter.cpp +++ b/src/particles/qquickparticleemitter.cpp @@ -255,7 +255,7 @@ QQuickParticleEmitter::~QQuickParticleEmitter() bool QQuickParticleEmitter::isEmitConnected() { - IS_SIGNAL_CONNECTED(this, "emitParticles(QQmlV8Handle)"); + IS_SIGNAL_CONNECTED(this, QQuickParticleEmitter, emitParticles, (QQmlV8Handle)); } void QQuickParticleEmitter::componentComplete() diff --git a/src/particles/qquicktrailemitter.cpp b/src/particles/qquicktrailemitter.cpp index e9d86118c03edd569e50da2a5597dc025bc4a480..68b43a0e991372d2b8e903e4a81650beec21d819 100644 --- a/src/particles/qquicktrailemitter.cpp +++ b/src/particles/qquicktrailemitter.cpp @@ -128,7 +128,7 @@ QQuickTrailEmitter::QQuickTrailEmitter(QQuickItem *parent) : bool QQuickTrailEmitter::isEmitFollowConnected() { - IS_SIGNAL_CONNECTED(this, "emitFollowParticles(QQmlV8Handle,QQmlV8Handle)"); + IS_SIGNAL_CONNECTED(this, QQuickTrailEmitter, emitFollowParticles, (QQmlV8Handle,QQmlV8Handle)); } void QQuickTrailEmitter::recalcParticlesPerSecond(){ diff --git a/src/qml/qml/qqmlglobal_p.h b/src/qml/qml/qqmlglobal_p.h index 3ed7286ed99646f9e178224391f13a810d67543e..75974a4e7c54aec67029ae9145e913e8c576bae2 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) diff --git a/src/quick/items/context2d/qquickcanvasitem.cpp b/src/quick/items/context2d/qquickcanvasitem.cpp index 88f0fd11cac124424f1e2cc103a5665f6bd6abf2..24d71acf265f763876fb862a4c909d6f486a2590 100644 --- a/src/quick/items/context2d/qquickcanvasitem.cpp +++ b/src/quick/items/context2d/qquickcanvasitem.cpp @@ -556,7 +556,7 @@ QQuickCanvasContext* QQuickCanvasItem::rawContext() const bool QQuickCanvasItem::isPaintConnected() { - IS_SIGNAL_CONNECTED(this, "paint(QRect)"); + IS_SIGNAL_CONNECTED(this, QQuickCanvasItem, paint, (const QRect &)); } void QQuickCanvasItem::sceneGraphInitialized() @@ -1074,4 +1074,4 @@ QRect QQuickCanvasItem::tiledRect(const QRectF &window, const QSize &tileSize) the Canvas has been rendered. */ -QT_END_NAMESPACE \ No newline at end of file +QT_END_NAMESPACE diff --git a/src/quick/items/qquickmousearea.cpp b/src/quick/items/qquickmousearea.cpp index e56197655362edde2c065383661815503aaab58a..c1d1c9dd8de1da7d5a1b067821cd63618f38d19a 100644 --- a/src/quick/items/qquickmousearea.cpp +++ b/src/quick/items/qquickmousearea.cpp @@ -220,25 +220,25 @@ void QQuickMouseAreaPrivate::saveEvent(QMouseEvent *event) bool QQuickMouseAreaPrivate::isPressAndHoldConnected() { Q_Q(QQuickMouseArea); - IS_SIGNAL_CONNECTED(q, "pressAndHold(QQuickMouseEvent*)"); + IS_SIGNAL_CONNECTED(q, QQuickMouseArea, pressAndHold, (QQuickMouseEvent *)); } bool QQuickMouseAreaPrivate::isDoubleClickConnected() { Q_Q(QQuickMouseArea); - IS_SIGNAL_CONNECTED(q, "doubleClicked(QQuickMouseEvent*)"); + IS_SIGNAL_CONNECTED(q, QQuickMouseArea, doubleClicked, (QQuickMouseEvent *)); } bool QQuickMouseAreaPrivate::isClickConnected() { Q_Q(QQuickMouseArea); - IS_SIGNAL_CONNECTED(q, "clicked(QQuickMouseEvent*)"); + IS_SIGNAL_CONNECTED(q, QQuickMouseArea, clicked, (QQuickMouseEvent *)); } bool QQuickMouseAreaPrivate::isWheelConnected() { Q_Q(QQuickMouseArea); - IS_SIGNAL_CONNECTED(q, "wheel(QQuickWheelEvent*)"); + IS_SIGNAL_CONNECTED(q, QQuickMouseArea, wheel, (QQuickWheelEvent *)); } void QQuickMouseAreaPrivate::propagate(QQuickMouseEvent* event, PropagateType t) diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp index 1f16cbdb51929944b2a0437029e025068a8f4363..4ab56494a090e82a740d1a75d0ffb617ceb00dbb 100644 --- a/src/quick/items/qquicktext.cpp +++ b/src/quick/items/qquicktext.cpp @@ -595,7 +595,7 @@ void QQuickText::doLayout() bool QQuickTextPrivate::isLineLaidOutConnected() { Q_Q(QQuickText); - IS_SIGNAL_CONNECTED(q, "lineLaidOut(QQuickTextLine*)"); + IS_SIGNAL_CONNECTED(q, QQuickText, lineLaidOut, (QQuickTextLine *)); } void QQuickTextPrivate::setupCustomLineGeometry(QTextLine &line, qreal &height, int lineOffset) @@ -2422,7 +2422,7 @@ QString QQuickTextPrivate::anchorAt(const QPointF &mousePos) bool QQuickTextPrivate::isLinkActivatedConnected() { Q_Q(QQuickText); - IS_SIGNAL_CONNECTED(q, "linkActivated(QString)"); + IS_SIGNAL_CONNECTED(q, QQuickText, linkActivated, (const QString &)); } /*! \internal */ diff --git a/src/quick/items/qquickvisualdatamodel.cpp b/src/quick/items/qquickvisualdatamodel.cpp index fe0dd00cbe29a80ad8861d2dcc8b927e62609396..6f5934e4f1b4b449e0341393608208f1d4ee09f3 100644 --- a/src/quick/items/qquickvisualdatamodel.cpp +++ b/src/quick/items/qquickvisualdatamodel.cpp @@ -2060,15 +2060,16 @@ void QQuickVisualDataGroupPrivate::setModel(QQuickVisualDataModel *m, Compositor group = g; } -static bool isChangedConnected(QObject *obj) +bool QQuickVisualDataGroupPrivate::isChangedConnected() { - IS_SIGNAL_CONNECTED(obj, "changed(QQmlV8Handle,QQmlV8Handle)"); + Q_Q(QQuickVisualDataGroup); + IS_SIGNAL_CONNECTED(q, QQuickVisualDataGroup, changed, (const QQmlV8Handle &,const QQmlV8Handle &)); } void QQuickVisualDataGroupPrivate::emitChanges(QV8Engine *engine) { Q_Q(QQuickVisualDataGroup); - if (isChangedConnected(q) && !changeSet.isEmpty()) { + if (isChangedConnected() && !changeSet.isEmpty()) { v8::HandleScope handleScope; v8::Context::Scope contextScope(engine->context()); v8::Local<v8::Object> removed = engineData(engine)->array(engine, changeSet.removes()); diff --git a/src/quick/items/qquickvisualdatamodel_p_p.h b/src/quick/items/qquickvisualdatamodel_p_p.h index 9a6c8c3738b295c548ab9ef7f9634226f2fa427f..b88c8a42da0eb5c5e3095d6c26369d4b236d67c2 100644 --- a/src/quick/items/qquickvisualdatamodel_p_p.h +++ b/src/quick/items/qquickvisualdatamodel_p_p.h @@ -210,6 +210,7 @@ public: return static_cast<QQuickVisualDataGroupPrivate *>(QObjectPrivate::get(group)); } void setModel(QQuickVisualDataModel *model, Compositor::Group group); + bool isChangedConnected(); void emitChanges(QV8Engine *engine); void emitModelUpdated(bool reset);