summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan Solovev <ivan.solovev@qt.io>2023-10-02 17:59:56 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-10-05 16:24:20 +0000
commitb6919ced51d7d4c910ab9864c8807edfd4056341 (patch)
tree9f3008e27303df8f2556626d2bab0dd0aeb72ef1
parent24154f43c7611aba0085ca1693b6b831390f2aa1 (diff)
QScxmlStateMachineLoader: fix binding loops - simple cases
By using (set)ValueBypassingBindings() in the property setters. Remove the dependency of initialValues and dataModel setter from the m_stateMachine property. Task-number: QTBUG-116542 Change-Id: Ic16e7fde2b319d4c3b3471356e69be8e61d9806f Reviewed-by: Ulf Hermann <ulf.hermann@qt.io> (cherry picked from commit 36c3daa7081971549494cab8ee5ba7d6ee4b2931) Reviewed-by: Ivan Solovev <ivan.solovev@qt.io> (cherry picked from commit 809020809198bf2c84c6333ac40609fd7fda4e9a) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/scxmlqml/statemachineloader.cpp27
1 files changed, 15 insertions, 12 deletions
diff --git a/src/scxmlqml/statemachineloader.cpp b/src/scxmlqml/statemachineloader.cpp
index 8b225b9..c67b175 100644
--- a/src/scxmlqml/statemachineloader.cpp
+++ b/src/scxmlqml/statemachineloader.cpp
@@ -90,13 +90,15 @@ QVariantMap QScxmlStateMachineLoader::initialValues() const
void QScxmlStateMachineLoader::setInitialValues(const QVariantMap &initialValues)
{
- if (initialValues == m_initialValues.value()) {
- m_initialValues.removeBindingUnlessInWrapper();
+ m_initialValues.removeBindingUnlessInWrapper();
+ if (initialValues == m_initialValues.valueBypassingBindings())
return;
- }
- m_initialValues = initialValues;
- if (m_stateMachine.value())
- m_stateMachine.value()->setInitialValues(initialValues);
+
+ m_initialValues.setValueBypassingBindings(initialValues);
+
+ const auto stateMachine = m_stateMachine.valueBypassingBindings();
+ if (stateMachine)
+ stateMachine->setInitialValues(initialValues);
m_initialValues.notify();
}
@@ -112,16 +114,17 @@ QScxmlDataModel *QScxmlStateMachineLoader::dataModel() const
void QScxmlStateMachineLoader::setDataModel(QScxmlDataModel *dataModel)
{
- if (dataModel == m_dataModel.value()) {
- m_dataModel.removeBindingUnlessInWrapper();
+ m_dataModel.removeBindingUnlessInWrapper();
+ if (dataModel == m_dataModel.valueBypassingBindings()) {
return;
}
- m_dataModel = dataModel;
- if (m_stateMachine.value()) {
+ m_dataModel.setValueBypassingBindings(dataModel);
+ const auto stateMachine = m_stateMachine.valueBypassingBindings();
+ if (stateMachine) {
if (dataModel)
- m_stateMachine.value()->setDataModel(dataModel);
+ stateMachine->setDataModel(dataModel);
else
- m_stateMachine.value()->setDataModel(m_implicitDataModel);
+ stateMachine->setDataModel(m_implicitDataModel);
}
m_dataModel.notify();
}