aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlboundsignal.cpp
diff options
context:
space:
mode:
authorChris Adams <christopher.adams@nokia.com>2012-07-13 15:53:04 +1000
committerQt by Nokia <qt-info@nokia.com>2012-08-08 06:04:03 +0200
commit92562eacbc3c614a83a734f1108ed7df02415eae (patch)
tree05fc063849e032cb03e4f919811d8ea4da147773 /src/qml/qml/qqmlboundsignal.cpp
parentb2120f68683b7948891d72fe077f44ab7e6baf18 (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.cpp9
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);