diff options
Diffstat (limited to 'src/declarative/qml/v8/qv8engine.cpp')
-rw-r--r-- | src/declarative/qml/v8/qv8engine.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/declarative/qml/v8/qv8engine.cpp b/src/declarative/qml/v8/qv8engine.cpp index 3ddac007d2..cb89d0f57f 100644 --- a/src/declarative/qml/v8/qv8engine.cpp +++ b/src/declarative/qml/v8/qv8engine.cpp @@ -1378,7 +1378,12 @@ v8::Handle<v8::Value> QV8Engine::createQmlObject(const v8::Arguments &args) QDeclarativeEngine *engine = v8engine->engine(); QDeclarativeContextData *context = v8engine->callingContext(); - Q_ASSERT(context); + QDeclarativeContext *effectiveContext = 0; + if (context->isPragmaLibraryContext) + effectiveContext = engine->rootContext(); + else + effectiveContext = context->asQDeclarativeContext(); + Q_ASSERT(context && effectiveContext); QString qml = v8engine->toString(args[0]->ToString()); if (qml.isEmpty()) @@ -1408,7 +1413,7 @@ v8::Handle<v8::Value> QV8Engine::createQmlObject(const v8::Arguments &args) if (!component.isReady()) V8THROW_ERROR("Qt.createQmlObject(): Component is not ready"); - QObject *obj = component.beginCreate(context->asQDeclarativeContext()); + QObject *obj = component.beginCreate(effectiveContext); if(obj) QDeclarativeData::get(obj, true)->setImplicitDestructible(); component.completeCreate(); @@ -1462,6 +1467,9 @@ v8::Handle<v8::Value> QV8Engine::createComponent(const v8::Arguments &args) QDeclarativeEngine *engine = v8engine->engine(); QDeclarativeContextData *context = v8engine->callingContext(); + QDeclarativeContextData *effectiveContext = context; + if (context->isPragmaLibraryContext) + effectiveContext = 0; Q_ASSERT(context); QString arg = v8engine->toString(args[0]->ToString()); @@ -1470,7 +1478,7 @@ v8::Handle<v8::Value> QV8Engine::createComponent(const v8::Arguments &args) QUrl url = context->resolvedUrl(QUrl(arg)); QDeclarativeComponent *c = new QDeclarativeComponent(engine, url, engine); - QDeclarativeComponentPrivate::get(c)->creationContext = context; + QDeclarativeComponentPrivate::get(c)->creationContext = effectiveContext; QDeclarativeData::get(c, true)->setImplicitDestructible(); return v8engine->newQObject(c); } |