diff options
Diffstat (limited to 'src/qml')
-rw-r--r-- | src/qml/qml/qqmlengine_p.h | 15 | ||||
-rw-r--r-- | src/qml/qml/qqmljavascriptexpression.cpp | 9 | ||||
-rw-r--r-- | src/qml/qml/qqmljavascriptexpression_p.h | 2 |
3 files changed, 15 insertions, 11 deletions
diff --git a/src/qml/qml/qqmlengine_p.h b/src/qml/qml/qqmlengine_p.h index 1f513ef8cc..7db03570e2 100644 --- a/src/qml/qml/qqmlengine_p.h +++ b/src/qml/qml/qqmlengine_p.h @@ -127,16 +127,19 @@ public: QQmlJavaScriptExpressionGuard *next; }; -struct QPropertyChangeTrigger { +struct QPropertyChangeTrigger : QPropertyObserver { + QPropertyChangeTrigger(QQmlJavaScriptExpression *expression) : QPropertyObserver(&QPropertyChangeTrigger::trigger), m_expression(expression) {} QQmlJavaScriptExpression * m_expression; - void operator()(); + QObject *target = nullptr; + int propertyIndex = 0; + static void trigger(QPropertyObserver *, QUntypedPropertyData *); }; -struct TriggerList : QPropertyChangeHandler<QPropertyChangeTrigger> { - TriggerList(QPropertyChangeTrigger trigger) : QPropertyChangeHandler<QPropertyChangeTrigger>(trigger) {}; +struct TriggerList : QPropertyChangeTrigger { + TriggerList(QQmlJavaScriptExpression *expression) + : QPropertyChangeTrigger(expression) + {} TriggerList *next = nullptr; - QObject *target = nullptr; - int propertyIndex = 0; }; class Q_QML_PRIVATE_EXPORT QQmlEnginePrivate : public QJSEnginePrivate diff --git a/src/qml/qml/qqmljavascriptexpression.cpp b/src/qml/qml/qqmljavascriptexpression.cpp index 88a9932f53..c711f0ab70 100644 --- a/src/qml/qml/qqmljavascriptexpression.cpp +++ b/src/qml/qml/qqmljavascriptexpression.cpp @@ -447,13 +447,14 @@ void QQmlJavaScriptExpression::setCompilationUnit(const QQmlRefPointer<QV4::Exec m_compilationUnit = compilationUnit; } -void QPropertyChangeTrigger::operator()() { - m_expression->expressionChanged(); +void QPropertyChangeTrigger::trigger(QPropertyObserver *observer, QUntypedPropertyData *) { + auto This = static_cast<QPropertyChangeTrigger *>(observer); + This->m_expression->expressionChanged(); } -QPropertyChangeHandler<QPropertyChangeTrigger> *QQmlJavaScriptExpression::allocatePropertyChangeTrigger(QObject *target, int propertyIndex) +QPropertyChangeTrigger *QQmlJavaScriptExpression::allocatePropertyChangeTrigger(QObject *target, int propertyIndex) { - auto trigger = QQmlEnginePrivate::get(engine())->qPropertyTriggerPool.New(QPropertyChangeTrigger { this }); + auto trigger = QQmlEnginePrivate::get(engine())->qPropertyTriggerPool.New( this ); trigger->target = target; trigger->propertyIndex = propertyIndex; auto oldHead = qpropertyChangeTriggers; diff --git a/src/qml/qml/qqmljavascriptexpression_p.h b/src/qml/qml/qqmljavascriptexpression_p.h index 458b056d5e..499d4d430f 100644 --- a/src/qml/qml/qqmljavascriptexpression_p.h +++ b/src/qml/qml/qqmljavascriptexpression_p.h @@ -164,7 +164,7 @@ public: QQmlEngine *engine() const { return m_context ? m_context->engine() : nullptr; } bool hasUnresolvedNames() const { return m_context && m_context->hasUnresolvedNames(); } - QPropertyChangeHandler<QPropertyChangeTrigger>* allocatePropertyChangeTrigger(QObject *target, int propertyIndex); + QPropertyChangeTrigger *allocatePropertyChangeTrigger(QObject *target, int propertyIndex); protected: void createQmlBinding(const QQmlRefPointer<QQmlContextData> &ctxt, QObject *scope, |