summaryrefslogtreecommitdiffstats
path: root/src/corelib/statemachine
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/statemachine')
-rw-r--r--src/corelib/statemachine/qstatemachine.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/corelib/statemachine/qstatemachine.cpp b/src/corelib/statemachine/qstatemachine.cpp
index f1ca421de2..6412d7a0a9 100644
--- a/src/corelib/statemachine/qstatemachine.cpp
+++ b/src/corelib/statemachine/qstatemachine.cpp
@@ -1341,6 +1341,9 @@ void QStateMachinePrivate::_q_start()
#ifndef QT_NO_ANIMATION
QList<QAbstractAnimation*> selectedAnimations = selectAnimations(transitions);
#endif
+ // enterStates() will set stopProcessingReason to Finished if a final
+ // state is entered.
+ stopProcessingReason = EventQueueEmpty;
enterStates(&nullEvent, exitedStates, enteredStates, statesForDefaultEntry,
assignmentsForEnteredStates
#ifndef QT_NO_ANIMATION
@@ -1355,7 +1358,15 @@ void QStateMachinePrivate::_q_start()
emit q->started();
- _q_process();
+ if (stopProcessingReason == Finished) {
+ // The state machine immediately reached a final state.
+ processingScheduled = false;
+ state = NotRunning;
+ unregisterAllTransitions();
+ emit q->finished();
+ } else {
+ _q_process();
+ }
}
void QStateMachinePrivate::_q_process()