summaryrefslogtreecommitdiffstats
path: root/src/declarative
diff options
context:
space:
mode:
authorAaron Kennedy <aaron.kennedy@nokia.com>2009-12-23 04:17:55 (GMT)
committerAaron Kennedy <aaron.kennedy@nokia.com>2009-12-23 04:17:55 (GMT)
commit4fe8f2ab89ace6e617a81c5e8568c3830135da20 (patch)
tree900e99845dee1d8717d2a816133971ed3c5653c8 /src/declarative
parentb95cf9eccc4a84036c7b5d1443e598d3db2f2d70 (diff)
downloadQt-4fe8f2ab89ace6e617a81c5e8568c3830135da20.zip
Qt-4fe8f2ab89ace6e617a81c5e8568c3830135da20.tar.gz
Qt-4fe8f2ab89ace6e617a81c5e8568c3830135da20.tar.bz2
Stop using QGuard
This should allow QGuard to be removed from Qt and QObjectPrivate::ExtraData. Having QmlGuard inside QmlDeclarativeData reduces the number of new's, and creating QmlDeclarativeData is faster than QObjectPrivate::ExtraData anyway.
Diffstat (limited to 'src/declarative')
-rw-r--r--src/declarative/graphicsitems/qmlgraphicsvisualitemmodel.cpp10
-rw-r--r--src/declarative/qml/qmlbindingvme_p.h3
-rw-r--r--src/declarative/qml/qmlcontext_p.h6
-rw-r--r--src/declarative/qml/qmlcontextscriptclass.cpp5
-rw-r--r--src/declarative/qml/qmldeclarativedata_p.h36
-rw-r--r--src/declarative/qml/qmlengine.cpp20
-rw-r--r--src/declarative/qml/qmlexpression_p.h9
-rw-r--r--src/declarative/qml/qmllistscriptclass.cpp3
-rw-r--r--src/declarative/qml/qmlmetaproperty_p.h3
-rw-r--r--src/declarative/qml/qmlobjectscriptclass.cpp5
-rw-r--r--src/declarative/qml/qmlvaluetypescriptclass.cpp3
-rw-r--r--src/declarative/qml/qmlvmemetaobject_p.h4
-rw-r--r--src/declarative/util/qmlpropertychanges.cpp3
-rw-r--r--src/declarative/util/qmlstate_p_p.h6
-rw-r--r--src/declarative/util/qmlstateoperations.cpp5
15 files changed, 78 insertions, 43 deletions
diff --git a/src/declarative/graphicsitems/qmlgraphicsvisualitemmodel.cpp b/src/declarative/graphicsitems/qmlgraphicsvisualitemmodel.cpp
index 017a60c..b482db7 100644
--- a/src/declarative/graphicsitems/qmlgraphicsvisualitemmodel.cpp
+++ b/src/declarative/graphicsitems/qmlgraphicsvisualitemmodel.cpp
@@ -52,6 +52,7 @@
#include <qmlinfo.h>
#include <qmldeclarativedata_p.h>
#include <qmlpropertycache_p.h>
+#include <qmlguard_p.h>
#include <qlistmodelinterface_p.h>
#include <qhash.h>
@@ -60,7 +61,6 @@
#include <QtCore/qdebug.h>
#include <private/qobject_p.h>
-#include <private/qguard_p.h>
QML_DECLARE_TYPE(QListModelInterface)
@@ -277,9 +277,9 @@ public:
return static_cast<QmlGraphicsVisualDataModelPrivate *>(QObjectPrivate::get(m));
}
- QGuard<QListModelInterface> m_listModelInterface;
- QGuard<QAbstractItemModel> m_abstractItemModel;
- QGuard<QmlGraphicsVisualDataModel> m_visualItemModel;
+ QmlGuard<QListModelInterface> m_listModelInterface;
+ QmlGuard<QAbstractItemModel> m_abstractItemModel;
+ QmlGuard<QmlGraphicsVisualDataModel> m_visualItemModel;
QString m_part;
QmlComponent *m_delegate;
@@ -434,7 +434,7 @@ Q_SIGNALS:
private:
friend class QmlGraphicsVisualDataModelDataMetaObject;
int m_index;
- QGuard<QmlGraphicsVisualDataModel> m_model;
+ QmlGuard<QmlGraphicsVisualDataModel> m_model;
QmlGraphicsVisualDataModelDataMetaObject *m_meta;
};
diff --git a/src/declarative/qml/qmlbindingvme_p.h b/src/declarative/qml/qmlbindingvme_p.h
index ceaf2b3..4ef7d04 100644
--- a/src/declarative/qml/qmlbindingvme_p.h
+++ b/src/declarative/qml/qmlbindingvme_p.h
@@ -56,6 +56,7 @@
#include <QtCore/qglobal.h>
#include <private/qmlbasicscript_p.h>
#include <private/qscriptdeclarativeclass_p.h>
+#include "qmlguard_p.h"
QT_BEGIN_HEADER
@@ -73,7 +74,7 @@ public:
int targetSlot;
struct Subscription {
- QGuard<QObject> source;
+ QmlGuard<QObject> source;
int notifyIndex;
};
Subscription *subscriptions;
diff --git a/src/declarative/qml/qmlcontext_p.h b/src/declarative/qml/qmlcontext_p.h
index 25f5600..bc8c357 100644
--- a/src/declarative/qml/qmlcontext_p.h
+++ b/src/declarative/qml/qmlcontext_p.h
@@ -65,7 +65,7 @@
#include <QtCore/qset.h>
#include <private/qobject_p.h>
-#include <private/qguard_p.h>
+#include "qmlguard_p.h"
QT_BEGIN_NAMESPACE
@@ -112,13 +112,13 @@ public:
QmlDeclarativeData *contextObjects;
- struct ContextGuard : public QGuard<QObject>
+ struct ContextGuard : public QmlGuard<QObject>
{
ContextGuard() : priv(0), bindings(0) {}
QmlContextPrivate *priv;
QmlBinding_Id *bindings;
ContextGuard &operator=(QObject *obj) {
- (QGuard<QObject>&)*this = obj; return *this;
+ (QmlGuard<QObject>&)*this = obj; return *this;
}
void objectDestroyed(QObject *) { priv->destroyed(this); }
};
diff --git a/src/declarative/qml/qmlcontextscriptclass.cpp b/src/declarative/qml/qmlcontextscriptclass.cpp
index 54a5ca3..588a397 100644
--- a/src/declarative/qml/qmlcontextscriptclass.cpp
+++ b/src/declarative/qml/qmlcontextscriptclass.cpp
@@ -44,14 +44,15 @@
#include "qmlengine_p.h"
#include "qmlcontext_p.h"
#include "qmltypenamescriptclass_p.h"
+#include "qmlguard_p.h"
QT_BEGIN_NAMESPACE
struct ContextData : public QScriptDeclarativeClass::Object {
ContextData() : isSharedContext(true) {}
ContextData(QmlContext *c, QObject *o) : context(c), scopeObject(o), isSharedContext(false) {}
- QGuard<QmlContext> context;
- QGuard<QObject> scopeObject;
+ QmlGuard<QmlContext> context;
+ QmlGuard<QObject> scopeObject;
bool isSharedContext;
QmlContext *getContext(QmlEngine *engine) {
diff --git a/src/declarative/qml/qmldeclarativedata_p.h b/src/declarative/qml/qmldeclarativedata_p.h
index bdbb5c8..21111dd 100644
--- a/src/declarative/qml/qmldeclarativedata_p.h
+++ b/src/declarative/qml/qmldeclarativedata_p.h
@@ -54,8 +54,8 @@
//
#include <QtScript/qscriptvalue.h>
-
#include <private/qobject_p.h>
+#include "qmlguard_p.h"
QT_BEGIN_NAMESPACE
@@ -66,7 +66,11 @@ class QmlPropertyCache;
class QmlDeclarativeData : public QDeclarativeData
{
public:
- QmlDeclarativeData(QmlContext *context = 0);
+ QmlDeclarativeData(QmlContext *ctxt = 0)
+ : context(ctxt), bindings(0), nextContextObject(0), prevContextObject(0),
+ bindingBitsSize(0), bindingBits(0), outerContext(0), lineNumber(0),
+ columnNumber(0), deferredComponent(0), deferredIdx(0), attachedProperties(0),
+ propertyCache(0), guards(0) {}
virtual void destroyed(QObject *);
@@ -95,12 +99,13 @@ public:
QScriptValue scriptValue;
QmlPropertyCache *propertyCache;
+ QmlGuard<QObject> *guards;
+
static QmlDeclarativeData *get(const QObject *object, bool create = false) {
- QObjectPrivate *priv =
- QObjectPrivate::get(const_cast<QObject *>(object));
- if (priv && priv->declarativeData) {
+ QObjectPrivate *priv = QObjectPrivate::get(const_cast<QObject *>(object));
+ if (priv->declarativeData) {
return static_cast<QmlDeclarativeData *>(priv->declarativeData);
- } else if (create && priv) {
+ } else if (create) {
priv->declarativeData = new QmlDeclarativeData;
return static_cast<QmlDeclarativeData *>(priv->declarativeData);
} else {
@@ -109,6 +114,25 @@ public:
}
};
+template<class T>
+void QmlGuard<T>::addGuard()
+{
+ QmlDeclarativeData *data = QmlDeclarativeData::get(o, true);
+ next = data->guards;
+ if (next) reinterpret_cast<QmlGuard<T> *>(next)->prev = &next;
+ data->guards = reinterpret_cast<QmlGuard<QObject> *>(this);
+ prev = &data->guards;
+}
+
+template<class T>
+void QmlGuard<T>::remGuard()
+{
+ if (next) reinterpret_cast<QmlGuard<T> *>(next)->prev = prev;
+ *prev = next;
+ next = 0;
+ prev = 0;
+}
+
QT_END_NAMESPACE
#endif // QMLDECLARATIVEDATA_P_H
diff --git a/src/declarative/qml/qmlengine.cpp b/src/declarative/qml/qmlengine.cpp
index 988962b..0e9b7c4 100644
--- a/src/declarative/qml/qmlengine.cpp
+++ b/src/declarative/qml/qmlengine.cpp
@@ -549,15 +549,7 @@ QObject *qmlAttachedPropertiesObjectById(int id, const QObject *object, bool cre
return rv;
}
-QmlDeclarativeData::QmlDeclarativeData(QmlContext *ctxt)
-: context(ctxt), bindings(0), nextContextObject(0), prevContextObject(0),
- bindingBitsSize(0), bindingBits(0), outerContext(0), lineNumber(0),
- columnNumber(0), deferredComponent(0), deferredIdx(0), attachedProperties(0),
- propertyCache(0)
-{
-}
-
-void QmlDeclarativeData::destroyed(QObject * /*object*/)
+void QmlDeclarativeData::destroyed(QObject *object)
{
if (deferredComponent)
deferredComponent->release();
@@ -584,6 +576,16 @@ void QmlDeclarativeData::destroyed(QObject * /*object*/)
if (propertyCache)
propertyCache->release();
+ QmlGuard<QObject> *guard = guards;
+ while (guard) {
+ QmlGuard<QObject> *g = guard;
+ guard = guard->next;
+ g->o = 0;
+ g->prev = 0;
+ g->next = 0;
+ g->objectDestroyed(object);
+ }
+
delete this;
}
diff --git a/src/declarative/qml/qmlexpression_p.h b/src/declarative/qml/qmlexpression_p.h
index 57a3ce2..3f87b2f 100644
--- a/src/declarative/qml/qmlexpression_p.h
+++ b/src/declarative/qml/qmlexpression_p.h
@@ -57,11 +57,10 @@
#include "qmlbasicscript_p.h"
#include "qmlengine_p.h"
+#include "qmlguard_p.h"
#include <QtScript/qscriptvalue.h>
-#include <private/qguard_p.h>
-
QT_BEGIN_NAMESPACE
class QmlAbstractExpression
@@ -109,15 +108,15 @@ public:
QString url; // This is a QString for a reason. QUrls are slooooooow...
int line;
- struct SignalGuard : public QGuard<QObject> {
+ struct SignalGuard : public QmlGuard<QObject> {
SignalGuard() : isDuplicate(false), notifyIndex(-1) {}
SignalGuard &operator=(QObject *obj) {
- QGuard<QObject>::operator=(obj);
+ QmlGuard<QObject>::operator=(obj);
return *this;
}
SignalGuard &operator=(const SignalGuard &o) {
- QGuard<QObject>::operator=(o);
+ QmlGuard<QObject>::operator=(o);
isDuplicate = o.isDuplicate;
notifyIndex = o.notifyIndex;
return *this;
diff --git a/src/declarative/qml/qmllistscriptclass.cpp b/src/declarative/qml/qmllistscriptclass.cpp
index d93498d..f5ff2c0 100644
--- a/src/declarative/qml/qmllistscriptclass.cpp
+++ b/src/declarative/qml/qmllistscriptclass.cpp
@@ -42,11 +42,12 @@
#include "qmllistscriptclass_p.h"
#include "qmlengine_p.h"
+#include "qmlguard_p.h"
QT_BEGIN_NAMESPACE
struct ListData : public QScriptDeclarativeClass::Object {
- QGuard<QObject> object;
+ QmlGuard<QObject> object;
int propertyIdx;
QmlListScriptClass::ListType type;
};
diff --git a/src/declarative/qml/qmlmetaproperty_p.h b/src/declarative/qml/qmlmetaproperty_p.h
index b4d72bb..97b5208 100644
--- a/src/declarative/qml/qmlmetaproperty_p.h
+++ b/src/declarative/qml/qmlmetaproperty_p.h
@@ -56,6 +56,7 @@
#include "qmlmetaproperty.h"
#include "qmlpropertycache_p.h"
+#include "qmlguard_p.h"
#include <private/qobject_p.h>
@@ -77,7 +78,7 @@ public:
QmlMetaProperty *q;
QmlContext *context;
- QGuard<QObject> object;
+ QmlGuard<QObject> object;
bool isDefaultProperty:1;
bool isNameCached:1;
diff --git a/src/declarative/qml/qmlobjectscriptclass.cpp b/src/declarative/qml/qmlobjectscriptclass.cpp
index 4488ba1..7f95b8f 100644
--- a/src/declarative/qml/qmlobjectscriptclass.cpp
+++ b/src/declarative/qml/qmlobjectscriptclass.cpp
@@ -47,16 +47,15 @@
#include "qmltypenamescriptclass_p.h"
#include "qmllistscriptclass_p.h"
#include "qmlbinding.h"
+#include "qmlguard_p.h"
#include <QtCore/qtimer.h>
-#include <private/qguard_p.h>
-
QT_BEGIN_NAMESPACE
struct ObjectData : public QScriptDeclarativeClass::Object {
ObjectData(QObject *o, int t) : object(o), type(t) {}
- QGuard<QObject> object;
+ QmlGuard<QObject> object;
int type;
};
diff --git a/src/declarative/qml/qmlvaluetypescriptclass.cpp b/src/declarative/qml/qmlvaluetypescriptclass.cpp
index 57f999f..78580e3 100644
--- a/src/declarative/qml/qmlvaluetypescriptclass.cpp
+++ b/src/declarative/qml/qmlvaluetypescriptclass.cpp
@@ -42,12 +42,13 @@
#include "qmlvaluetypescriptclass_p.h"
#include "qmlengine_p.h"
+#include "qmlguard_p.h"
QT_BEGIN_NAMESPACE
struct QmlValueTypeReference : public QScriptDeclarativeClass::Object {
QmlValueType *type;
- QGuard<QObject> object;
+ QmlGuard<QObject> object;
int property;
};
diff --git a/src/declarative/qml/qmlvmemetaobject_p.h b/src/declarative/qml/qmlvmemetaobject_p.h
index e737721..462f652 100644
--- a/src/declarative/qml/qmlvmemetaobject_p.h
+++ b/src/declarative/qml/qmlvmemetaobject_p.h
@@ -61,6 +61,8 @@
#include <private/qobject_p.h>
+#include "qmlguard_p.h"
+
QT_BEGIN_NAMESPACE
#define QML_ALIAS_FLAG_PTR 0x00000001
@@ -118,7 +120,7 @@ protected:
private:
QObject *object;
QmlRefCount *ref;
- QGuard<QmlContext> ctxt;
+ QmlGuard<QmlContext> ctxt;
const QmlVMEMetaData *metaData;
int propOffset;
diff --git a/src/declarative/util/qmlpropertychanges.cpp b/src/declarative/util/qmlpropertychanges.cpp
index 48e026e..18f32ff 100644
--- a/src/declarative/util/qmlpropertychanges.cpp
+++ b/src/declarative/util/qmlpropertychanges.cpp
@@ -49,6 +49,7 @@
#include <qmlexpression.h>
#include <qmlbinding.h>
#include <qmlcontext.h>
+#include <qmlguard_p.h>
#include <QtCore/qdebug.h>
@@ -127,7 +128,7 @@ public:
QmlExpression *expression;
QmlExpression *reverseExpression;
QmlExpression *rewindExpression;
- QGuard<QmlExpression> ownedExpression;
+ QmlGuard<QmlExpression> ownedExpression;
virtual void execute() {
ownedExpression = property.setSignalExpression(expression);
diff --git a/src/declarative/util/qmlstate_p_p.h b/src/declarative/util/qmlstate_p_p.h
index 04c5264..0ae72cd 100644
--- a/src/declarative/util/qmlstate_p_p.h
+++ b/src/declarative/util/qmlstate_p_p.h
@@ -58,6 +58,8 @@
#include "qmlanimation_p_p.h"
#include "qmltransitionmanager_p_p.h"
+#include <qmlguard_p.h>
+
#include <private/qobject_p.h>
QT_BEGIN_NAMESPACE
@@ -106,9 +108,9 @@ public:
QmlBinding *when;
class OperationList;
- struct OperationGuard : public QGuard<QmlStateOperation>
+ struct OperationGuard : public QmlGuard<QmlStateOperation>
{
- OperationGuard(QObject *obj, OperationList *l) : list(l) { (QGuard<QObject>&)*this = obj; }
+ OperationGuard(QObject *obj, OperationList *l) : list(l) { (QmlGuard<QObject>&)*this = obj; }
OperationList *list;
void objectDestroyed(QmlStateOperation *) {
// we assume priv will always be destroyed after objectDestroyed calls
diff --git a/src/declarative/util/qmlstateoperations.cpp b/src/declarative/util/qmlstateoperations.cpp
index ebbb5ee..df25e5b 100644
--- a/src/declarative/util/qmlstateoperations.cpp
+++ b/src/declarative/util/qmlstateoperations.cpp
@@ -47,6 +47,7 @@
#include <qmlinfo.h>
#include <qmlgraphicsanchors_p_p.h>
#include <qmlgraphicsitem_p.h>
+#include <qmlguard_p.h>
#include <QtCore/qdebug.h>
#include <QtGui/qgraphicsitem.h>
@@ -65,8 +66,8 @@ public:
QmlGraphicsItem *target;
QmlGraphicsItem *parent;
- QGuard<QmlGraphicsItem> origParent;
- QGuard<QmlGraphicsItem> origStackBefore;
+ QmlGuard<QmlGraphicsItem> origParent;
+ QmlGuard<QmlGraphicsItem> origStackBefore;
QmlGraphicsItem *rewindParent;
QmlGraphicsItem *rewindStackBefore;