Set compound state's initial state to 0 if it is removed/deleted

Change-Id: I45b7c15a9b3d5a1860cb9a7da8836f9eaaa0326d
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
bb10
Kent Hansen 2012-07-03 22:13:56 +02:00 committed by Qt by Nokia
parent 5db78a077b
commit bc5a4d28af
2 changed files with 15 additions and 0 deletions

View File

@ -495,6 +495,8 @@ bool QState::event(QEvent *e)
if ((e->type() == QEvent::ChildAdded) || (e->type() == QEvent::ChildRemoved)) {
d->childStatesListNeedsRefresh = true;
d->transitionsListNeedsRefresh = true;
if ((e->type() == QEvent::ChildRemoved) && (static_cast<QChildEvent *>(e)->child() == d->initialState))
d->initialState = 0;
}
return QAbstractState::event(e);
}

View File

@ -189,6 +189,7 @@ private slots:
void initialStateIsEnteredBeforeStartedEmitted();
void deletePropertyAssignmentObjectBeforeEntry();
void deletePropertyAssignmentObjectBeforeRestore();
void deleteInitialState();
};
class TestState : public QState
@ -4073,5 +4074,17 @@ void tst_QStateMachine::deletePropertyAssignmentObjectBeforeRestore()
delete o2;
}
void tst_QStateMachine::deleteInitialState()
{
QStateMachine machine;
QState *s1 = new QState(&machine);
machine.setInitialState(s1);
delete s1;
QTest::ignoreMessage(QtWarningMsg, "QStateMachine::start: No initial state set for machine. Refusing to start.");
machine.start();
// Shouldn't crash
QCoreApplication::processEvents();
}
QTEST_MAIN(tst_QStateMachine)
#include "tst_qstatemachine.moc"