--- a/src/declarative/qml/qdeclarativecontext.cpp Fri Sep 17 08:34:18 2010 +0300
+++ b/src/declarative/qml/qdeclarativecontext.cpp Mon Oct 04 01:19:32 2010 +0300
@@ -80,10 +80,12 @@
\code
QDeclarativeEngine engine;
+ QStringListModel modelData;
QDeclarativeContext *context = new QDeclarativeContext(engine.rootContext());
- context->setContextProperty("myModel", modelData);
+ context->setContextProperty("myModel", &modelData);
- QDeclarativeComponent component(&engine, "ListView { model=myModel }");
+ QDeclarativeComponent component(&engine);
+ component.setData("import Qt 4.7\nListView { model: myModel }", QUrl());
component.create(context);
\endcode
@@ -104,12 +106,13 @@
...
};
- MyDataSet *myDataSet = new MyDataSet;
+ MyDataSet myDataSet;
QDeclarativeEngine engine;
QDeclarativeContext *context = new QDeclarativeContext(engine.rootContext());
- context->setContextObject(myDataSet);
+ context->setContextObject(&myDataSet);
- QDeclarativeComponent component(&engine, "ListView { model=myModel }");
+ QDeclarativeComponent component(&engine);
+ component.setData("import Qt 4.7\nListView { model: myModel }", QUrl());
component.create(context);
\endcode
@@ -530,8 +533,21 @@
parent = 0;
}
-void QDeclarativeContextData::clearExpressions()
+void QDeclarativeContextData::clearContext()
{
+ if (engine) {
+ while (componentAttached) {
+ QDeclarativeComponentAttached *a = componentAttached;
+ componentAttached = a->next;
+ if (componentAttached) componentAttached->prev = &componentAttached;
+
+ a->next = 0;
+ a->prev = 0;
+
+ emit a->destruction();
+ }
+ }
+
QDeclarativeAbstractExpression *expression = expressions;
while (expression) {
QDeclarativeAbstractExpression *nextExpression = expression->m_nextExpression;
@@ -552,7 +568,7 @@
if (engine) invalidate();
- clearExpressions();
+ clearContext();
while (contextObjects) {
QDeclarativeData *co = contextObjects;
@@ -644,14 +660,12 @@
if (!engine)
return;
- Q_ASSERT(script.codes.count() == 1);
-
QDeclarativeEnginePrivate *enginePriv = QDeclarativeEnginePrivate::get(engine);
QScriptEngine *scriptEngine = QDeclarativeEnginePrivate::getScriptEngine(engine);
- const QString &code = script.codes.at(0);
- const QString &url = script.files.at(0);
- const QDeclarativeParser::Object::ScriptBlock::Pragmas &pragmas = script.pragmas.at(0);
+ const QString &code = script.code;
+ const QString &url = script.file;
+ const QDeclarativeParser::Object::ScriptBlock::Pragmas &pragmas = script.pragmas;
Q_ASSERT(!url.isEmpty());