aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlan Alpert <alan.alpert@nokia.com>2011-07-27 16:25:38 +1000
committerQt by Nokia <qt-info@nokia.com>2011-07-28 05:14:47 +0200
commit44e58a337a9c314d4542ee6f2acc571aba877ccb (patch)
tree1d071eee1f47d269b68bcac039e90d89e1ada854 /src
parent3b3a997cfaf24d18202ebda263d04629956738e8 (diff)
Delete scene if you aren't going to use it.
Also make QDeclarativeOpenMetaObjectType zero its engine when the engine dies, because this was leading to problems when the scene wasn't deleted. Also fixes a few other potential deletion problems. Change-Id: I37fa2d1a0b438a6ea7d8cf4c5c9d0bd869faa959 Reviewed-on: http://codereview.qt.nokia.com/2250 Reviewed-by: Alan Alpert <alan.alpert@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/declarative/items/qsgpathview.cpp2
-rw-r--r--src/declarative/particles/qsgimageparticle.cpp18
-rw-r--r--src/declarative/particles/qsgmodelparticle.cpp6
-rw-r--r--src/declarative/particles/qsgmodelparticle_p.h1
-rw-r--r--src/declarative/util/qdeclarativeopenmetaobject.cpp6
-rw-r--r--src/declarative/util/qdeclarativeopenmetaobject_p.h4
-rw-r--r--src/qtquick1/util/qdeclarativeview.cpp2
7 files changed, 31 insertions, 8 deletions
diff --git a/src/declarative/items/qsgpathview.cpp b/src/declarative/items/qsgpathview.cpp
index 68ed319069..7dd58c55f3 100644
--- a/src/declarative/items/qsgpathview.cpp
+++ b/src/declarative/items/qsgpathview.cpp
@@ -398,7 +398,7 @@ void QSGPathView::setModel(const QVariant &model)
d->model = vim;
} else {
if (!d->ownModel) {
- d->model = new QSGVisualDataModel(qmlContext(this), this);
+ d->model = new QSGVisualDataModel(qmlContext(this));
d->ownModel = true;
}
if (QSGVisualDataModel *dataModel = qobject_cast<QSGVisualDataModel*>(d->model))
diff --git a/src/declarative/particles/qsgimageparticle.cpp b/src/declarative/particles/qsgimageparticle.cpp
index 8c04175010..e4ba67f6e7 100644
--- a/src/declarative/particles/qsgimageparticle.cpp
+++ b/src/declarative/particles/qsgimageparticle.cpp
@@ -59,7 +59,11 @@ class UltraMaterial : public QSGMaterial
{
public:
UltraMaterial(bool withSprites=false)
- : timestamp(0)
+ : texture(0)
+ , colortable(0)
+ , sizetable(0)
+ , opacitytable(0)
+ , timestamp(0)
, framecount(1)
, animcount(1)
, usesSprites(withSprites)
@@ -69,10 +73,14 @@ public:
~UltraMaterial()
{
- delete texture;
- delete colortable;
- delete sizetable;
- delete opacitytable;
+ if (texture)
+ delete texture;
+ if (colortable)
+ delete colortable;
+ if (sizetable)
+ delete sizetable;
+ if (opacitytable)
+ delete opacitytable;
}
virtual QSGMaterialType *type() const { static QSGMaterialType type; return &type; }
diff --git a/src/declarative/particles/qsgmodelparticle.cpp b/src/declarative/particles/qsgmodelparticle.cpp
index 1d06a96def..08646e32ae 100644
--- a/src/declarative/particles/qsgmodelparticle.cpp
+++ b/src/declarative/particles/qsgmodelparticle.cpp
@@ -68,6 +68,12 @@ QSGModelParticle::QSGModelParticle(QSGItem *parent) :
manageDelegates->start();
}
+QSGModelParticle::~QSGModelParticle()
+{
+ if (m_ownModel)
+ delete m_model;
+}
+
QVariant QSGModelParticle::model() const
{
return m_dataSource;
diff --git a/src/declarative/particles/qsgmodelparticle_p.h b/src/declarative/particles/qsgmodelparticle_p.h
index 5092ddc9cd..c6dd40d51e 100644
--- a/src/declarative/particles/qsgmodelparticle_p.h
+++ b/src/declarative/particles/qsgmodelparticle_p.h
@@ -63,6 +63,7 @@ class QSGModelParticle : public QSGParticlePainter
Q_CLASSINFO("DefaultProperty", "delegate")
public:
explicit QSGModelParticle(QSGItem *parent = 0);
+ virtual ~QSGModelParticle();
QVariant model() const;
void setModel(const QVariant &);
diff --git a/src/declarative/util/qdeclarativeopenmetaobject.cpp b/src/declarative/util/qdeclarativeopenmetaobject.cpp
index cab2888c26..a5f47c2ef6 100644
--- a/src/declarative/util/qdeclarativeopenmetaobject.cpp
+++ b/src/declarative/util/qdeclarativeopenmetaobject.cpp
@@ -66,7 +66,7 @@ public:
};
QDeclarativeOpenMetaObjectType::QDeclarativeOpenMetaObjectType(const QMetaObject *base, QDeclarativeEngine *engine)
- : d(new QDeclarativeOpenMetaObjectTypePrivate)
+ : QDeclarativeCleanup(engine), d(new QDeclarativeOpenMetaObjectTypePrivate)
{
d->engine = engine;
d->init(base);
@@ -81,6 +81,10 @@ QDeclarativeOpenMetaObjectType::~QDeclarativeOpenMetaObjectType()
delete d;
}
+void QDeclarativeOpenMetaObjectType::clear()
+{
+ d->engine = 0;
+}
int QDeclarativeOpenMetaObjectType::propertyOffset() const
{
diff --git a/src/declarative/util/qdeclarativeopenmetaobject_p.h b/src/declarative/util/qdeclarativeopenmetaobject_p.h
index 602f2c4b89..e5cfee7eb6 100644
--- a/src/declarative/util/qdeclarativeopenmetaobject_p.h
+++ b/src/declarative/util/qdeclarativeopenmetaobject_p.h
@@ -46,6 +46,7 @@
#include <QtCore/QObject>
#include <private/qdeclarativerefcount_p.h>
+#include <private/qdeclarativecleanup_p.h>
#include <private/qdeclarativeglobal_p.h>
#include <private/qobject_p.h>
@@ -58,7 +59,7 @@ QT_MODULE(Declarative)
class QDeclarativeEngine;
class QMetaPropertyBuilder;
class QDeclarativeOpenMetaObjectTypePrivate;
-class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeOpenMetaObjectType : public QDeclarativeRefCount
+class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeOpenMetaObjectType : public QDeclarativeRefCount, public QDeclarativeCleanup
{
public:
QDeclarativeOpenMetaObjectType(const QMetaObject *base, QDeclarativeEngine *engine);
@@ -71,6 +72,7 @@ public:
protected:
virtual void propertyCreated(int, QMetaPropertyBuilder &);
+ virtual void clear();
private:
QDeclarativeOpenMetaObjectTypePrivate *d;
diff --git a/src/qtquick1/util/qdeclarativeview.cpp b/src/qtquick1/util/qdeclarativeview.cpp
index cc19828c40..32f2183cad 100644
--- a/src/qtquick1/util/qdeclarativeview.cpp
+++ b/src/qtquick1/util/qdeclarativeview.cpp
@@ -602,6 +602,8 @@ void QDeclarativeView::setRootObject(QObject *obj)
widget->setVisible(true);
}
resize(widget->size());
+ }else{
+ delete obj;
}
}