summaryrefslogtreecommitdiffstats
path: root/src/declarative/qml
diff options
context:
space:
mode:
authorMartin Jones <martin.jones@nokia.com>2010-05-06 06:16:08 (GMT)
committerMartin Jones <martin.jones@nokia.com>2010-05-06 06:16:08 (GMT)
commitbf965a3b74a10636a63f72d72ad41e169a9851e3 (patch)
treebdc89890964200f2f119e3c92177d924939aa180 /src/declarative/qml
parent385799a8269dfb5b48de9e84e52af780fb400272 (diff)
downloadQt-bf965a3b74a10636a63f72d72ad41e169a9851e3.zip
Qt-bf965a3b74a10636a63f72d72ad41e169a9851e3.tar.gz
Qt-bf965a3b74a10636a63f72d72ad41e169a9851e3.tar.bz2
Avoid warnings as delegates with bindings to parent are created and destroyed.
Task-number: QTBUG-10359
Diffstat (limited to 'src/declarative/qml')
-rw-r--r--src/declarative/qml/qdeclarativecontext.cpp17
-rw-r--r--src/declarative/qml/qdeclarativecontext_p.h1
-rw-r--r--src/declarative/qml/qdeclarativeengine.cpp4
3 files changed, 15 insertions, 7 deletions
diff --git a/src/declarative/qml/qdeclarativecontext.cpp b/src/declarative/qml/qdeclarativecontext.cpp
index ae4223e..b61b8cb 100644
--- a/src/declarative/qml/qdeclarativecontext.cpp
+++ b/src/declarative/qml/qdeclarativecontext.cpp
@@ -528,13 +528,8 @@ void QDeclarativeContextData::invalidate()
parent = 0;
}
-void QDeclarativeContextData::destroy()
+void QDeclarativeContextData::clearExpressions()
{
- if (linkedContext)
- linkedContext->destroy();
-
- if (engine) invalidate();
-
QDeclarativeAbstractExpression *expression = expressions;
while (expression) {
QDeclarativeAbstractExpression *nextExpression = expression->m_nextExpression;
@@ -546,6 +541,16 @@ void QDeclarativeContextData::destroy()
expression = nextExpression;
}
expressions = 0;
+}
+
+void QDeclarativeContextData::destroy()
+{
+ if (linkedContext)
+ linkedContext->destroy();
+
+ if (engine) invalidate();
+
+ clearExpressions();
while (contextObjects) {
QDeclarativeData *co = contextObjects;
diff --git a/src/declarative/qml/qdeclarativecontext_p.h b/src/declarative/qml/qdeclarativecontext_p.h
index c7fb099..6b6cd0a 100644
--- a/src/declarative/qml/qdeclarativecontext_p.h
+++ b/src/declarative/qml/qdeclarativecontext_p.h
@@ -113,6 +113,7 @@ class QDeclarativeContextData
public:
QDeclarativeContextData();
QDeclarativeContextData(QDeclarativeContext *);
+ void clearExpressions();
void destroy();
void invalidate();
diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp
index cc6c5fe..9f5cafe 100644
--- a/src/declarative/qml/qdeclarativeengine.cpp
+++ b/src/declarative/qml/qdeclarativeengine.cpp
@@ -329,8 +329,10 @@ void QDeclarativePrivate::qdeclarativeelement_destructor(QObject *o)
QObjectPrivate *p = QObjectPrivate::get(o);
Q_ASSERT(p->declarativeData);
QDeclarativeData *d = static_cast<QDeclarativeData*>(p->declarativeData);
- if (d->ownContext)
+ if (d->ownContext && d->context) {
d->context->destroy();
+ d->context = 0;
+ }
}
void QDeclarativeData::destroyed(QAbstractDeclarativeData *d, QObject *o)