diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2013-06-20 11:32:45 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@digia.com> | 2013-06-20 21:57:28 +0200 |
commit | 343978ce543b4b901bb009f0c5ebabb7563fe98b (patch) | |
tree | e1c97975faf705786fbe8ce644fc0bf83c127e12 /src/qml/qml/qqmlvaluetypewrapper.cpp | |
parent | 0117641a5bfb8f53ff80b291197db5426f689d0d (diff) |
Fix qqmlvaluetypewrapper auto-tests
QQmlValueTypeWrapper stores its prototype in a global variable
(PersistentValue), which doesn't work when using multiple engines. Instead
this patch introduces the QML extensions structure to hold things like
prototypes for type extensions to JS that are specific to QML.
Change-Id: I41a71029edb6ce895eb80db7aa0809aab86b31db
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/qml/qml/qqmlvaluetypewrapper.cpp')
-rw-r--r-- | src/qml/qml/qqmlvaluetypewrapper.cpp | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/src/qml/qml/qqmlvaluetypewrapper.cpp b/src/qml/qml/qqmlvaluetypewrapper.cpp index ae3934fff6..aaa7db27d6 100644 --- a/src/qml/qml/qqmlvaluetypewrapper.cpp +++ b/src/qml/qml/qqmlvaluetypewrapper.cpp @@ -50,6 +50,7 @@ #include <private/qv4engine_p.h> #include <private/qv4functionobject_p.h> #include <private/qv4variantobject_p.h> +#include <private/qv4qmlextensions_p.h> QT_BEGIN_NAMESPACE @@ -57,9 +58,6 @@ using namespace QV4; DEFINE_MANAGED_VTABLE(QmlValueTypeWrapper); -PersistentValue QmlValueTypeWrapper::proto; - - class QmlValueTypeReference : public QmlValueTypeWrapper { public: @@ -133,12 +131,12 @@ static bool readReferenceValue(const QmlValueTypeReference *reference) void QmlValueTypeWrapper::initProto(ExecutionEngine *v4) { - if (!proto.isEmpty()) + if (v4->qmlExtensions()->valueTypeWrapperPrototype) return; Object *o = v4->newObject(); o->defineDefaultProperty(v4, QStringLiteral("toString"), method_toString, 1); - proto = Value::fromObject(o); + v4->qmlExtensions()->valueTypeWrapperPrototype = o; } Value QmlValueTypeWrapper::create(QV8Engine *v8, QObject *object, int property, QQmlValueType *type) @@ -147,7 +145,7 @@ Value QmlValueTypeWrapper::create(QV8Engine *v8, QObject *object, int property, initProto(v4); QmlValueTypeReference *r = new (v4->memoryManager) QmlValueTypeReference(v8); - r->prototype = proto.value().objectValue(); + r->prototype = v4->qmlExtensions()->valueTypeWrapperPrototype; r->type = type; r->object = object; r->property = property; return Value::fromObject(r); } @@ -158,7 +156,7 @@ Value QmlValueTypeWrapper::create(QV8Engine *v8, const QVariant &value, QQmlValu initProto(v4); QmlValueTypeCopy *r = new (v4->memoryManager) QmlValueTypeCopy(v8); - r->prototype = proto.value().objectValue(); + r->prototype = v4->qmlExtensions()->valueTypeWrapperPrototype; r->type = type; r->value = value; return Value::fromObject(r); } |