summaryrefslogtreecommitdiffstats
path: root/src/statemachine/qhistorystate.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/statemachine/qhistorystate.cpp')
-rw-r--r--src/statemachine/qhistorystate.cpp20
1 files changed, 9 insertions, 11 deletions
diff --git a/src/statemachine/qhistorystate.cpp b/src/statemachine/qhistorystate.cpp
index 90239a6..19eab72 100644
--- a/src/statemachine/qhistorystate.cpp
+++ b/src/statemachine/qhistorystate.cpp
@@ -172,11 +172,10 @@ QAbstractTransition *QHistoryState::defaultTransition() const
void QHistoryState::setDefaultTransition(QAbstractTransition *transition)
{
Q_D(QHistoryState);
- if (d->defaultTransition.value() == transition) {
- d->defaultTransition.removeBindingUnlessInWrapper();
+ d->defaultTransition.removeBindingUnlessInWrapper();
+ if (d->defaultTransition.valueBypassingBindings() == transition)
return;
- }
- d->defaultTransition = transition;
+ d->defaultTransition.setValueBypassingBindings(transition);
if (transition)
transition->setParent(this);
d->defaultTransition.notify();
@@ -219,14 +218,13 @@ void QHistoryState::setDefaultState(QAbstractState *state)
"to this history state's group (%p)", state, parentState());
return;
}
- if (!d->defaultTransition.value()
- || !isSoleEntry(d->defaultTransition->targetStates(), state)) {
- if (!d->defaultTransition.value()
- || !qobject_cast<DefaultStateTransition*>(d->defaultTransition)) {
+ // evaluate the binding once
+ auto *defaultTransition = d->defaultTransition.value();
+ if (!defaultTransition || !isSoleEntry(defaultTransition->targetStates(), state)) {
+ if (!defaultTransition || !qobject_cast<DefaultStateTransition*>(defaultTransition))
d->defaultTransition.setValue(new DefaultStateTransition(this, state));
- } else {
- d->defaultTransition->setTargetState(state);
- }
+ else
+ defaultTransition->setTargetState(state);
emit defaultStateChanged(QHistoryState::QPrivateSignal());
}
}