aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Alpert <aalpert@blackberry.com>2013-05-01 17:22:14 -0700
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-05-08 03:09:47 +0200
commit7c0156309eef50b5cfd3e498eaed6d7218dc40f8 (patch)
tree8eee615bff20d5a548d21ca6ec09f05633e85e82
parent9b5a55101d7c519446c1cf3706a235dea81ad4de (diff)
Fix Instantiator response to model changev5.1.0-beta1
Objects were not being created correctly when the model changed after componentComplete. After correcting that the model change can lead to an intermediate count change when the old model is cleared, so a flag is set to ignore intermediate changes fom the QQmlDelegateModel when the model changes. Task-number: QTBUG-30379 Change-Id: I55519c9ee378a1b0569567137ebd378f32a6c85c Reviewed-by: Caroline Chao <caroline.chao@digia.com> Reviewed-by: Christopher Adams <chris.adams@jollamobile.com> Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
-rw-r--r--src/qml/types/qqmlinstantiator.cpp10
-rw-r--r--src/qml/types/qqmlinstantiator_p_p.h1
2 files changed, 8 insertions, 3 deletions
diff --git a/src/qml/types/qqmlinstantiator.cpp b/src/qml/types/qqmlinstantiator.cpp
index a2a1fa23ad..234494e088 100644
--- a/src/qml/types/qqmlinstantiator.cpp
+++ b/src/qml/types/qqmlinstantiator.cpp
@@ -52,6 +52,7 @@ QT_BEGIN_NAMESPACE
QQmlInstantiatorPrivate::QQmlInstantiatorPrivate()
: componentComplete(true)
+ , effectiveReset(false)
, active(true)
, async(false)
, ownModel(false)
@@ -124,7 +125,7 @@ void QQmlInstantiatorPrivate::_q_modelUpdated(const QQmlChangeSet &changeSet, bo
{
Q_Q(QQmlInstantiator);
- if (componentComplete)
+ if (!componentComplete || effectiveReset)
return;
if (reset) {
@@ -162,7 +163,7 @@ void QQmlInstantiatorPrivate::_q_modelUpdated(const QQmlChangeSet &changeSet, bo
objects = objects.mid(0, index) + movedObjects + objects.mid(index);
} else for (int i = 0; i < insert.count; ++i) {
int modelIndex = index + i;
- QObject* obj = instanceModel->object(i, async);
+ QObject* obj = instanceModel->object(modelIndex, async);
if (obj)
_q_createdItem(modelIndex, obj);
}
@@ -378,8 +379,11 @@ void QQmlInstantiator::setModel(const QVariant &v)
if (!d->ownModel)
d->makeModel();
- if (QQmlDelegateModel *dataModel = qobject_cast<QQmlDelegateModel *>(d->instanceModel))
+ if (QQmlDelegateModel *dataModel = qobject_cast<QQmlDelegateModel *>(d->instanceModel)) {
+ d->effectiveReset = true;
dataModel->setModel(v);
+ d->effectiveReset = false;
+ }
}
if (d->instanceModel != prevModel) {
diff --git a/src/qml/types/qqmlinstantiator_p_p.h b/src/qml/types/qqmlinstantiator_p_p.h
index 79459299dc..ac25ce809c 100644
--- a/src/qml/types/qqmlinstantiator_p_p.h
+++ b/src/qml/types/qqmlinstantiator_p_p.h
@@ -76,6 +76,7 @@ public:
void _q_modelUpdated(const QQmlChangeSet &, bool);
bool componentComplete;
+ bool effectiveReset;
bool active;
bool async;
bool ownModel;