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
parent
5db78a077b
commit
bc5a4d28af
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Reference in New Issue