Pass the right line information to signal handlers in Connection element
authorKai Koehne <kai.koehne@nokia.com>
Fri, 28 Oct 2011 07:05:42 +0000 (09:05 +0200)
committerQt by Nokia <qt-info@nokia.com>
Mon, 31 Oct 2011 13:00:02 +0000 (14:00 +0100)
Make sure that the right line information is passed to v8 when executing
signal handlers in the Connection element.

Change-Id: I384caa40217e9c148fdb4943cf471d1aafcea735
Reviewed-by: Martin Jones <martin.jones@nokia.com>

src/declarative/util/qdeclarativeconnections.cpp

index c57363f..aa944f3 100644 (file)
@@ -203,6 +203,8 @@ QDeclarativeConnectionsParser::compile(const QList<QDeclarativeCustomParserPrope
     for(int ii = 0; ii < props.count(); ++ii)
     {
         QString propName = props.at(ii).name();
+        int propLine = props.at(ii).location().line;
+
         if (!propName.startsWith(QLatin1String("on")) || !propName.at(2).isUpper()) {
             error(props.at(ii), QDeclarativeConnections::tr("Cannot assign to non-existent property \"%1\"").arg(propName));
             return QByteArray();
@@ -224,6 +226,7 @@ QDeclarativeConnectionsParser::compile(const QList<QDeclarativeCustomParserPrope
                 if (v.isScript()) {
                     ds << propName;
                     ds << v.asScript();
+                    ds << propLine;
                 } else {
                     error(props.at(ii), QDeclarativeConnections::tr("Connections: script expected"));
                     return QByteArray();
@@ -256,6 +259,8 @@ void QDeclarativeConnections::connectSignals()
         ds >> propName;
         QString script;
         ds >> script;
+        int line;
+        ds >> line;
         QDeclarativeProperty prop(target(), propName);
         if (prop.isValid() && (prop.type() & QDeclarativeProperty::SignalProperty)) {
             QDeclarativeBoundSignal *signal =
@@ -263,7 +268,7 @@ void QDeclarativeConnections::connectSignals()
             QDeclarativeExpression *expression = new QDeclarativeExpression(qmlContext(this), 0, script);
             QDeclarativeData *ddata = QDeclarativeData::get(this);
             if (ddata && ddata->outerContext && !ddata->outerContext->url.isEmpty())
-                expression->setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber);
+                expression->setSourceLocation(ddata->outerContext->url.toString(), line);
             signal->setExpression(expression);
             d->boundsignals += signal;
         } else {