aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/util/qdeclarativetransitionmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quick/util/qdeclarativetransitionmanager.cpp')
-rw-r--r--src/quick/util/qdeclarativetransitionmanager.cpp31
1 files changed, 21 insertions, 10 deletions
diff --git a/src/quick/util/qdeclarativetransitionmanager.cpp b/src/quick/util/qdeclarativetransitionmanager.cpp
index 5542548937..a2de7dbae6 100644
--- a/src/quick/util/qdeclarativetransitionmanager.cpp
+++ b/src/quick/util/qdeclarativetransitionmanager.cpp
@@ -43,7 +43,6 @@
#include "qdeclarativetransition_p.h"
#include "qdeclarativestate_p_p.h"
-#include "qdeclarativestate_p.h"
#include <private/qdeclarativebinding_p.h>
#include <private/qdeclarativeglobal_p.h>
@@ -59,12 +58,12 @@ class QDeclarativeTransitionManagerPrivate
{
public:
QDeclarativeTransitionManagerPrivate()
- : state(0) {}
+ : state(0), transitionInstance(0) {}
void applyBindings();
typedef QList<QDeclarativeSimpleAction> SimpleActionList;
QDeclarativeState *state;
- QDeclarativeGuard<QDeclarativeTransition> transition;
+ QDeclarativeTransitionInstance *transitionInstance;
QDeclarativeStateOperation::ActionList bindingsList;
SimpleActionList completeList;
};
@@ -81,9 +80,15 @@ void QDeclarativeTransitionManager::setState(QDeclarativeState *s)
QDeclarativeTransitionManager::~QDeclarativeTransitionManager()
{
+ delete d->transitionInstance;
delete d; d = 0;
}
+bool QDeclarativeTransitionManager::isRunning() const
+{
+ return d->transitionInstance && d->transitionInstance->isRunning();
+}
+
void QDeclarativeTransitionManager::complete()
{
d->applyBindings();
@@ -97,6 +102,8 @@ void QDeclarativeTransitionManager::complete()
if (d->state)
static_cast<QDeclarativeStatePrivate*>(QObjectPrivate::get(d->state))->complete();
+
+ finished();
}
void QDeclarativeTransitionManagerPrivate::applyBindings()
@@ -116,6 +123,10 @@ void QDeclarativeTransitionManagerPrivate::applyBindings()
bindingsList.clear();
}
+void QDeclarativeTransitionManager::finished()
+{
+}
+
void QDeclarativeTransitionManager::transition(const QList<QDeclarativeAction> &list,
QDeclarativeTransition *transition)
{
@@ -196,8 +207,11 @@ void QDeclarativeTransitionManager::transition(const QList<QDeclarativeAction> &
if (transition) {
QList<QDeclarativeProperty> touched;
- d->transition = transition;
- d->transition->prepare(applyList, touched, this);
+ QDeclarativeTransitionInstance *oldInstance = d->transitionInstance;
+ d->transitionInstance = transition->prepare(applyList, touched, this);
+ d->transitionInstance->start();
+ if (oldInstance && oldInstance != d->transitionInstance)
+ delete oldInstance;
// Modify the action list to remove actions handled in the transition
for (int ii = 0; ii < applyList.count(); ++ii) {
@@ -257,11 +271,8 @@ void QDeclarativeTransitionManager::transition(const QList<QDeclarativeAction> &
void QDeclarativeTransitionManager::cancel()
{
- if (d->transition) {
- // ### this could potentially trigger a complete in rare circumstances
- d->transition->stop();
- d->transition = 0;
- }
+ if (d->transitionInstance && d->transitionInstance->isRunning())
+ d->transitionInstance->stop();
for(int i = 0; i < d->bindingsList.count(); ++i) {
QDeclarativeAction action = d->bindingsList[i];