aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/util
diff options
context:
space:
mode:
authorMichael Brasser <michael.brasser@nokia.com>2012-05-29 11:15:11 +1000
committerQt by Nokia <qt-info@nokia.com>2012-05-30 03:14:15 +0200
commit75e9f05bf3c1441ac0c1ff09b7c1e34b78e15a65 (patch)
treec0b69241ede8d30d8aad6659d959f3f8aa40d31e /src/quick/util
parent76e3e438b3bf02601869f652da6c325aad1647f3 (diff)
Change animation grouping and ownership model.
Don't rely on QObject ownership. Change-Id: Id1b27a5f8a15ef24c34b206d5736aad344bf9ada Reviewed-by: Yunqiao Yin <charles.yin@nokia.com>
Diffstat (limited to 'src/quick/util')
-rw-r--r--src/quick/util/qquickanimation.cpp15
-rw-r--r--src/quick/util/qquickanimation_p.h1
2 files changed, 10 insertions, 6 deletions
diff --git a/src/quick/util/qquickanimation.cpp b/src/quick/util/qquickanimation.cpp
index bc39355a48..f6e2e57cc8 100644
--- a/src/quick/util/qquickanimation.cpp
+++ b/src/quick/util/qquickanimation.cpp
@@ -89,6 +89,8 @@ QQuickAbstractAnimation::QQuickAbstractAnimation(QObject *parent)
QQuickAbstractAnimation::~QQuickAbstractAnimation()
{
Q_D(QQuickAbstractAnimation);
+ if (d->group)
+ setGroup(0); //remove from group
delete d->animationInstance;
}
@@ -431,15 +433,12 @@ void QQuickAbstractAnimation::setGroup(QQuickAnimationGroup *g)
if (d->group == g)
return;
if (d->group)
- static_cast<QQuickAnimationGroupPrivate *>(d->group->d_func())->animations.removeAll(this);
+ d->group->d_func()->animations.removeAll(this);
d->group = g;
- if (d->group && !static_cast<QQuickAnimationGroupPrivate *>(d->group->d_func())->animations.contains(this))
- static_cast<QQuickAnimationGroupPrivate *>(d->group->d_func())->animations.append(this);
-
- //if (g) //if removed from a group, then the group should no longer be the parent
- setParent(g);
+ if (d->group && !d->group->d_func()->animations.contains(this))
+ d->group->d_func()->animations.append(this);
}
/*!
@@ -1620,6 +1619,10 @@ void QQuickAnimationGroupPrivate::clear_animation(QQmlListProperty<QQuickAbstrac
QQuickAnimationGroup::~QQuickAnimationGroup()
{
+ Q_D(QQuickAnimationGroup);
+ for (int i = 0; i < d->animations.count(); ++i)
+ d->animations.at(i)->d_func()->group = 0;
+ d->animations.clear();
}
QQmlListProperty<QQuickAbstractAnimation> QQuickAnimationGroup::animations()
diff --git a/src/quick/util/qquickanimation_p.h b/src/quick/util/qquickanimation_p.h
index 5a5131999f..0fd746c4f5 100644
--- a/src/quick/util/qquickanimation_p.h
+++ b/src/quick/util/qquickanimation_p.h
@@ -139,6 +139,7 @@ private:
void notifyRunningChanged(bool running);
friend class QQuickBehavior;
friend class QQuickBehaviorPrivate;
+ friend class QQuickAnimationGroup;
};
class QQuickPauseAnimationPrivate;