aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Alpert <alan.alpert@nokia.com>2011-06-14 14:09:30 +1000
committerAlan Alpert <alan.alpert@nokia.com>2011-06-14 14:13:23 +1000
commit7b22f02961a97c0fa07127ea3ff26b8435a617b8 (patch)
treefd96799dab3db175a4c87fa00a3548a61fa0b69e
parentba7e87ffe0f1cb356dc31dc2d43640d06309eaa7 (diff)
Safer cleanup in model/item particle
-rw-r--r--src/declarative/particles/qsgitemparticle.cpp4
-rw-r--r--src/declarative/particles/qsgmodelparticle.cpp22
2 files changed, 14 insertions, 12 deletions
diff --git a/src/declarative/particles/qsgitemparticle.cpp b/src/declarative/particles/qsgitemparticle.cpp
index 498dd90a87..42f0062148 100644
--- a/src/declarative/particles/qsgitemparticle.cpp
+++ b/src/declarative/particles/qsgitemparticle.cpp
@@ -102,8 +102,8 @@ void QSGItemParticle::tick()
mpa->detach();//reparent as well?
//TODO: Delete iff we created it
m_activeCount--;
- m_deletables.removeAll(item);
}
+ m_deletables.clear();
foreach(int pos, m_loadables){
if(m_stasis.contains(m_items[pos]))
@@ -133,8 +133,8 @@ void QSGItemParticle::tick()
m_items[pos]->setOpacity(0.);
m_activeCount++;
}
- m_loadables.removeAll(pos);
}
+ m_loadables.clear();
}
void QSGItemParticle::reload(QSGParticleData* d)
diff --git a/src/declarative/particles/qsgmodelparticle.cpp b/src/declarative/particles/qsgmodelparticle.cpp
index b0b4fa4ad2..f87c0d31b9 100644
--- a/src/declarative/particles/qsgmodelparticle.cpp
+++ b/src/declarative/particles/qsgmodelparticle.cpp
@@ -177,21 +177,23 @@ void QSGModelParticle::processPending()
foreach(QSGItem* item, m_deletables){
item->setOpacity(0.);
m_model->release(item);
- m_deletables.removeAll(item);
}
+ m_deletables.clear();
foreach(int pos, m_requests){
- m_items[pos] = m_model->item(m_available.first());
- m_idx[pos] = m_available.first();
- m_available.pop_front();
- QSGModelParticleAttached* mpa = qobject_cast<QSGModelParticleAttached*>(qmlAttachedPropertiesObject<QSGModelParticle>(m_items[pos]));
- if(mpa){
- mpa->m_mp = this;
- mpa->attach();
+ if(!m_available.isEmpty()){
+ m_items[pos] = m_model->item(m_available.first());
+ m_idx[pos] = m_available.first();
+ m_available.pop_front();
+ QSGModelParticleAttached* mpa = qobject_cast<QSGModelParticleAttached*>(qmlAttachedPropertiesObject<QSGModelParticle>(m_items[pos]));
+ if(mpa){
+ mpa->m_mp = this;
+ mpa->attach();
+ }
+ m_items[pos]->setParentItem(this);
}
- m_items[pos]->setParentItem(this);
- m_requests.removeAll(pos);
}
+ m_requests.clear();
}
void QSGModelParticle::reload(QSGParticleData* d)