aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/util/qdeclarativestate.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/declarative/util/qdeclarativestate.cpp')
-rw-r--r--src/declarative/util/qdeclarativestate.cpp22
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();