diff options
author | Chris Adams <christopher.adams@nokia.com> | 2012-07-13 15:53:04 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-08-08 06:04:03 +0200 |
commit | 92562eacbc3c614a83a734f1108ed7df02415eae (patch) | |
tree | 05fc063849e032cb03e4f919811d8ea4da147773 /src/qml/qml/qqmlboundsignal.cpp | |
parent | b2120f68683b7948891d72fe077f44ab7e6baf18 (diff) |
Allow signal parameters which are custom QML object-types
This commit allows lazy resolution of signal parameter types, which
allows QML object types to be used as signal parameters. If a signal
is emitted with an incorrect parameter type, it will be passed through
as a null parameter.
Task-number: QTBUG-14550
Change-Id: I7e899ad57452826cc405bed10c541f8d35789d04
Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'src/qml/qml/qqmlboundsignal.cpp')
-rw-r--r-- | src/qml/qml/qqmlboundsignal.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/qml/qml/qqmlboundsignal.cpp b/src/qml/qml/qqmlboundsignal.cpp index 6c4465eb96..5f5e7b09af 100644 --- a/src/qml/qml/qqmlboundsignal.cpp +++ b/src/qml/qml/qqmlboundsignal.cpp @@ -186,7 +186,7 @@ class QQmlBoundSignalParameters : public QObject { Q_OBJECT public: - QQmlBoundSignalParameters(const QMetaMethod &, QQmlAbstractBoundSignal*); + QQmlBoundSignalParameters(const QMetaMethod &, QQmlAbstractBoundSignal*, QQmlEngine*); ~QQmlBoundSignalParameters(); void setValues(void **); @@ -344,7 +344,7 @@ void QQmlBoundSignal_callback(QQmlNotifierEndpoint *e, void **a) QList<QByteArray> names = QQmlPropertyCache::signalParameterNames(*s->m_scope, s->m_index); if (!names.isEmpty()) { QMetaMethod signal = QMetaObjectPrivate::signal(s->m_scope->metaObject(), s->m_index); - s->m_params = new QQmlBoundSignalParameters(signal, s); + s->m_params = new QQmlBoundSignalParameters(signal, s, s->m_expression->engine()); } s->setParamsValid(true); @@ -364,7 +364,8 @@ void QQmlBoundSignal_callback(QQmlNotifierEndpoint *e, void **a) } QQmlBoundSignalParameters::QQmlBoundSignalParameters(const QMetaMethod &method, - QQmlAbstractBoundSignal *owner) + QQmlAbstractBoundSignal *owner, + QQmlEngine *engine) : types(0), values(0) { MetaObject *mo = new MetaObject(this); @@ -389,7 +390,7 @@ QQmlBoundSignalParameters::QQmlBoundSignalParameters(const QMetaMethod &method, name = "__qt_anonymous_param_" + QByteArray::number(ii); int t = QMetaType::type(type.constData()); - if (QQmlMetaType::isQObject(t)) { + if (QQmlEnginePrivate::get(engine)->isQObject(t)) { types[ii] = QMetaType::QObjectStar; QMetaPropertyBuilder prop = mob.addProperty(name, "QObject*"); prop.setWritable(false); |