diff options
author | Andrew den Exter <andrew.den-exter@nokia.com> | 2012-03-15 15:55:24 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-15 09:01:23 +0100 |
commit | 1c7b0362b8a1d230e52b7ee5df2aa36a3217b79b (patch) | |
tree | 7543fc01024be8c61a2b62dcb0ec62e61dd517d3 /src/quick/items/qquickvisualdatamodel.cpp | |
parent | d7f2a77f2b236de6b08b4c8905722280d9c44541 (diff) |
Don't leak function objects created by VisualDataModel.
Function objects created from a FunctionTemplate are not short lived,
and the objects created by a VisualDataModel can change between
instances meaning a template is needed per instance. So use an object
template as a constructor instead of a function.
Change-Id: I364c6e4f714a623b7adb7475a3ee9862eeeeb119
Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'src/quick/items/qquickvisualdatamodel.cpp')
-rw-r--r-- | src/quick/items/qquickvisualdatamodel.cpp | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/src/quick/items/qquickvisualdatamodel.cpp b/src/quick/items/qquickvisualdatamodel.cpp index 97d137202a..88d46c60ee 100644 --- a/src/quick/items/qquickvisualdatamodel.cpp +++ b/src/quick/items/qquickvisualdatamodel.cpp @@ -1306,11 +1306,13 @@ QQuickVisualDataModelItemMetaType::QQuickVisualDataModelItemMetaType( v8::HandleScope handleScope; v8::Context::Scope contextScope(engine->context()); - v8::Local<v8::FunctionTemplate> ft = v8::FunctionTemplate::New(); - ft->InstanceTemplate()->SetHasExternalResource(true); - ft->PrototypeTemplate()->SetAccessor(v8::String::New("model"), get_model); - ft->PrototypeTemplate()->SetAccessor(v8::String::New("groups"), get_groups, set_groups); - ft->PrototypeTemplate()->SetAccessor(v8::String::New("isUnresolved"), get_member, 0, v8::Int32::New(30)); + + constructor = qPersistentNew(v8::ObjectTemplate::New()); + + constructor->SetHasExternalResource(true); + constructor->SetAccessor(v8::String::New("model"), get_model); + constructor->SetAccessor(v8::String::New("groups"), get_groups, set_groups); + constructor->SetAccessor(v8::String::New("isUnresolved"), get_member, 0, v8::Int32::New(30)); int notifierId = 0; for (int i = 0; i < groupNames.count(); ++i, ++notifierId) { @@ -1321,7 +1323,7 @@ QQuickVisualDataModelItemMetaType::QQuickVisualDataModelItemMetaType( propertyName.toUtf8(), "bool", notifierId); propertyBuilder.setWritable(true); - ft->PrototypeTemplate()->SetAccessor( + constructor->SetAccessor( engine->toString(propertyName), get_member, set_member, v8::Int32::New(i + 1)); } for (int i = 0; i < groupNames.count(); ++i, ++notifierId) { @@ -1331,13 +1333,11 @@ QQuickVisualDataModelItemMetaType::QQuickVisualDataModelItemMetaType( propertyName.toUtf8(), "int", notifierId); propertyBuilder.setWritable(true); - ft->PrototypeTemplate()->SetAccessor( + constructor->SetAccessor( engine->toString(propertyName), get_index, 0, v8::Int32::New(i + 1)); } metaObject = builder.toMetaObject(); - - constructor = qPersistentNew<v8::Function>(ft->GetFunction()); } QQuickVisualDataModelItemMetaType::~QQuickVisualDataModelItemMetaType() |