diff options
author | Michael Brasser <michael.brasser@nokia.com> | 2011-11-24 14:43:09 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-11-28 00:05:04 +0100 |
commit | f98ebe34e17fcf955a77b35b098b5be81dc6c7d8 (patch) | |
tree | 9b85be0d23be63cd8117d2de59033161b70a1bc6 /src/declarative/util/qdeclarativeconnections.cpp | |
parent | aae3dd6ee06e94ee366c788ca79c0dde67f426ac (diff) |
Rewrite Connections signal handlers at compile time.
Task-number: QTBUG-22726
Change-Id: I039d54661bbf7d44912c894bf0cc1d70023a9187
Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
Diffstat (limited to 'src/declarative/util/qdeclarativeconnections.cpp')
-rw-r--r-- | src/declarative/util/qdeclarativeconnections.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/declarative/util/qdeclarativeconnections.cpp b/src/declarative/util/qdeclarativeconnections.cpp index aa944f3622..ee2c6edcc5 100644 --- a/src/declarative/util/qdeclarativeconnections.cpp +++ b/src/declarative/util/qdeclarativeconnections.cpp @@ -41,7 +41,7 @@ #include "qdeclarativeconnections_p.h" -#include <qdeclarativeexpression.h> +#include <private/qdeclarativeexpression_p.h> #include <private/qdeclarativeproperty_p.h> #include <private/qdeclarativeboundsignal_p.h> #include <qdeclarativecontext.h> @@ -225,7 +225,7 @@ QDeclarativeConnectionsParser::compile(const QList<QDeclarativeCustomParserPrope QDeclarativeScript::Variant v = qvariant_cast<QDeclarativeScript::Variant>(value); if (v.isScript()) { ds << propName; - ds << v.asScript(); + ds << rewriteSignalHandler(v.asScript(), propName); ds << propLine; } else { error(props.at(ii), QDeclarativeConnections::tr("Connections: script expected")); @@ -265,10 +265,18 @@ void QDeclarativeConnections::connectSignals() if (prop.isValid() && (prop.type() & QDeclarativeProperty::SignalProperty)) { QDeclarativeBoundSignal *signal = new QDeclarativeBoundSignal(target(), prop.method(), this); - QDeclarativeExpression *expression = new QDeclarativeExpression(qmlContext(this), 0, script); + + QString location; + QDeclarativeContextData *ctxtdata = 0; QDeclarativeData *ddata = QDeclarativeData::get(this); - if (ddata && ddata->outerContext && !ddata->outerContext->url.isEmpty()) - expression->setSourceLocation(ddata->outerContext->url.toString(), line); + if (ddata) { + ctxtdata = ddata->outerContext; + if (ctxtdata && !ctxtdata->url.isEmpty()) + location = ddata->outerContext->url.toString(); + } + + QDeclarativeExpression *expression = ctxtdata ? + QDeclarativeExpressionPrivate::create(ctxtdata, 0, script, true, location, line) : 0; signal->setExpression(expression); d->boundsignals += signal; } else { |