diff options
Diffstat (limited to 'src/qml/types/qqmllistmodel.cpp')
-rw-r--r-- | src/qml/types/qqmllistmodel.cpp | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/qml/types/qqmllistmodel.cpp b/src/qml/types/qqmllistmodel.cpp index 40e7be6f56..0df243b3b0 100644 --- a/src/qml/types/qqmllistmodel.cpp +++ b/src/qml/types/qqmllistmodel.cpp @@ -1350,7 +1350,7 @@ void ModelObject::put(Managed *m, String *name, const Value &value) ModelObject *that = static_cast<ModelObject*>(m); ExecutionEngine *eng = that->engine(); - const int elementIndex = that->d()->m_elementIndex; + const int elementIndex = that->d()->elementIndex(); const QString propName = name->toQString(); int roleIndex = that->d()->m_model->m_listModel->setExistingProperty(elementIndex, propName, value, eng); if (roleIndex != -1) { @@ -1384,7 +1384,7 @@ ReturnedValue ModelObject::get(const Managed *m, String *name, bool *hasProperty } } - const int elementIndex = that->d()->m_elementIndex; + const int elementIndex = that->d()->elementIndex(); QVariant value = that->d()->m_model->data(elementIndex, role->index); return that->engine()->fromVariant(value); } @@ -1402,7 +1402,7 @@ void ModelObject::advanceIterator(Managed *m, ObjectIterator *it, Value *name, u ScopedString roleName(scope, v4->newString(role.name)); name->setM(roleName->d()); *attributes = QV4::Attr_Data; - QVariant value = that->d()->m_model->data(that->d()->m_elementIndex, role.index); + QVariant value = that->d()->m_model->data(that->d()->elementIndex(), role.index); p->value = v4->fromVariant(value); return; } @@ -2338,9 +2338,14 @@ QQmlV4Handle QQmlListModel::get(int index) const result = QV4::QObjectWrapper::wrap(scope.engine, object); } else { QObject *object = m_listModel->getOrCreateModelObject(const_cast<QQmlListModel *>(this), index); - result = scope.engine->memoryManager->allocObject<QV4::ModelObject>(object, const_cast<QQmlListModel *>(this), index); - // Keep track of the QObjectWrapper in persistent value storage - QQmlData::get(object)->jsWrapper.set(scope.engine, result); + QQmlData *ddata = QQmlData::get(object); + if (ddata->jsWrapper.isNullOrUndefined()) { + result = scope.engine->memoryManager->allocObject<QV4::ModelObject>(object, const_cast<QQmlListModel *>(this)); + // Keep track of the QObjectWrapper in persistent value storage + ddata->jsWrapper.set(scope.engine, result); + } else { + result = ddata->jsWrapper.value(); + } } } |