diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/types/qqmllistmodel.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/qml/types/qqmllistmodel.cpp b/src/qml/types/qqmllistmodel.cpp index 2b4e906617..efc61d7cdd 100644 --- a/src/qml/types/qqmllistmodel.cpp +++ b/src/qml/types/qqmllistmodel.cpp @@ -255,7 +255,12 @@ QObject *ListModel::getOrCreateModelObject(QQmlListModel *model, int elementInde { ListElement *e = elements[elementIndex]; if (e->m_objectCache == 0) { - e->m_objectCache = new QObject; + void *memory = operator new(sizeof(QObject) + sizeof(QQmlData)); + void *ddataMemory = ((char *)memory) + sizeof(QObject); + e->m_objectCache = new (memory) QObject; + QQmlData *ddata = new (ddataMemory) QQmlData; + ddata->ownMemory = false; + QObjectPrivate::get(e->m_objectCache)->declarativeData = ddata; (void)new ModelNodeMetaObject(e->m_objectCache, model, elementIndex); } return e->m_objectCache; @@ -2292,8 +2297,7 @@ QQmlV4Handle QQmlListModel::get(int index) const 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 - QV4::Value *val = scope.engine->memoryManager->m_weakValues->allocate(); - *val = result; + QQmlData::get(object)->jsWrapper.set(scope.engine, result); } } |