From dc4d6293f9473c0f03c570430d08867d2d01c6e2 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Tue, 20 Mar 2018 08:35:10 -0500 Subject: Handle function expressions in SignalTransition Extend 22b13921f8067f8a93164875a4ad59bed85b0400 to SignalTransition. Change-Id: Ic7d03353efaa7ba894b913e5b0bc193d648d21df Task-number: QTBUG-50328 Reviewed-by: Simon Hausmann --- src/imports/statemachine/signaltransition.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'src/imports') diff --git a/src/imports/statemachine/signaltransition.cpp b/src/imports/statemachine/signaltransition.cpp index 63a969c0e8..0d35e3064b 100644 --- a/src/imports/statemachine/signaltransition.cpp +++ b/src/imports/statemachine/signaltransition.cpp @@ -176,9 +176,17 @@ void SignalTransition::connectTriggered() QMetaMethod metaMethod = target->metaObject()->method(qobjectSignal->methodIndex()); int signalIndex = QMetaObjectPrivate::signalIndex(metaMethod); - QQmlBoundSignalExpression *expression = ctxtdata ? - new QQmlBoundSignalExpression(target, signalIndex, - ctxtdata, this, m_compilationUnit->runtimeFunctions[binding->value.compiledScriptIndex]) : nullptr; + auto f = m_compilationUnit->runtimeFunctions[binding->value.compiledScriptIndex]; + + // If the function is marked as having a nested function, then the user wrote: + // onSomeSignal: function() { /*....*/ } + // So take that nested function: + if (auto closure = f->nestedFunction()) + f = closure; + + QQmlBoundSignalExpression *expression = + ctxtdata ? new QQmlBoundSignalExpression(target, signalIndex, ctxtdata, this, f) + : nullptr; if (expression) expression->setNotifyOnValueChanged(false); m_signalExpression = expression; -- cgit v1.2.3