src/declarative/qml/qdeclarativecontext.cpp
changeset 37 758a864f9613
parent 33 3e2da88830cd
--- 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());