From 76e0a3b4da22fab6c5fb94e12f3a94fba83fd042 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Fri, 28 Feb 2014 16:19:10 +0100 Subject: Make it possible to call QQmlEngine::setObjectOwnership at any time QJSEngine::newQObject should call setObjectOwnership only if it wasn't called before, to preserve any policy set by the user earlier. Otherwise it's only safe to call after newQObject and then you'd have to call it _every_ time the QObject is wrapped, at all call sites. Instead this patch preserves any policy set. Task-number: QTBUG-37160 Change-Id: I6178fa38cd7f4b09d818b6f18762c21588562422 Reviewed-by: Lars Knoll --- src/qml/jsapi/qjsengine.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/qml') diff --git a/src/qml/jsapi/qjsengine.cpp b/src/qml/jsapi/qjsengine.cpp index a19c358231..1cf67a1c47 100644 --- a/src/qml/jsapi/qjsengine.cpp +++ b/src/qml/jsapi/qjsengine.cpp @@ -330,7 +330,11 @@ QJSValue QJSEngine::newQObject(QObject *object) Q_D(QJSEngine); QV4::ExecutionEngine *v4 = QV8Engine::getV4(d); QV4::Scope scope(v4); - QQmlEngine::setObjectOwnership(object, QQmlEngine::JavaScriptOwnership); + if (object) { + QQmlData *ddata = QQmlData::get(object, true); + if (!ddata || !ddata->explicitIndestructibleSet) + QQmlEngine::setObjectOwnership(object, QQmlEngine::JavaScriptOwnership); + } QV4::ScopedValue v(scope, QV4::QObjectWrapper::wrap(v4, object)); return new QJSValuePrivate(v4, v); } -- cgit v1.2.3