diff options
Diffstat (limited to 'src/declarative/util/qdeclarativestate.cpp')
-rw-r--r-- | src/declarative/util/qdeclarativestate.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/declarative/util/qdeclarativestate.cpp b/src/declarative/util/qdeclarativestate.cpp index 9f56ccb02e..054d92ce7f 100644 --- a/src/declarative/util/qdeclarativestate.cpp +++ b/src/declarative/util/qdeclarativestate.cpp @@ -301,6 +301,14 @@ QDeclarativeState &QDeclarativeState::operator<<(QDeclarativeStateOperation *op) return *this; } +QDeclarativeListProperty<QDeclarativeStateChange> QDeclarativeState::stateChanges() +{ + Q_D(QDeclarativeState); + return QDeclarativeListProperty<QDeclarativeStateChange>(this, &d->stateChanges, QDeclarativeStatePrivate::stateChanges_append, + QDeclarativeStatePrivate::stateChanges_count, QDeclarativeStatePrivate::stateChanges_at, + QDeclarativeStatePrivate::stateChanges_clear); +} + void QDeclarativeStatePrivate::complete() { Q_Q(QDeclarativeState); @@ -315,6 +323,9 @@ void QDeclarativeStatePrivate::complete() } reverting.clear(); + for (int i = 0; i < stateChanges.count(); ++i) + stateChanges.at(i)->setActive(true); + emit q->completed(); } @@ -364,6 +375,15 @@ void QDeclarativeState::cancel() d->transitionManager.cancel(); } +void QDeclarativeState::prepareForExit() +{ + Q_D(QDeclarativeState); + cancel(); + + for (int i = 0; i < d->stateChanges.count(); ++i) + d->stateChanges.at(i)->setActive(false); +} + void QDeclarativeAction::deleteFromBinding() { if (fromBinding) { @@ -567,7 +587,7 @@ void QDeclarativeState::apply(QDeclarativeStateGroup *group, QDeclarativeTransit cancel(); if (revert) - revert->cancel(); + revert->prepareForExit(); d->revertList.clear(); d->reverting.clear(); |