summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel
diff options
context:
space:
mode:
authorShane Kearns <shane.kearns@sosco.com>2009-09-16 13:53:21 (GMT)
committerShane Kearns <shane.kearns@sosco.com>2009-09-16 13:53:21 (GMT)
commit90fce5ee772b6cedb3f896adcc3d986ed7a1af57 (patch)
treeb2c315064e99cf7246e9c20e0521dd8e5140d14b /src/corelib/kernel
parent504dd08854a8f6519a0529014df2233938b82728 (diff)
parentb2e96b5ebe337ec52682503b239145f187751c25 (diff)
downloadQt-90fce5ee772b6cedb3f896adcc3d986ed7a1af57.zip
Qt-90fce5ee772b6cedb3f896adcc3d986ed7a1af57.tar.gz
Qt-90fce5ee772b6cedb3f896adcc3d986ed7a1af57.tar.bz2
Merge branch '4.6' of git@scm.dev.nokia.troll.no:qt/qt into 4.6
Diffstat (limited to 'src/corelib/kernel')
-rw-r--r--src/corelib/kernel/qobject.cpp18
-rw-r--r--src/corelib/kernel/qobject_p.h18
2 files changed, 19 insertions, 17 deletions
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
index b4e3959..a8120cf 100644
--- a/src/corelib/kernel/qobject.cpp
+++ b/src/corelib/kernel/qobject.cpp
@@ -129,7 +129,7 @@ QObjectData::~QObjectData() {}
QDeclarativeData::~QDeclarativeData() {}
QObjectPrivate::QObjectPrivate(int version)
- : threadData(0), connectionLists(0), senders(0), currentSender(0), currentChildBeingDeleted(0), declarativeData(0), objectGuards(0)
+ : threadData(0), connectionLists(0), senders(0), currentSender(0), currentChildBeingDeleted(0)
{
if (version != QObjectPrivateVersion)
qFatal("Cannot mix incompatible Qt libraries");
@@ -496,18 +496,14 @@ void QMetaObject::changeGuard(QObject **ptr, QObject *o)
void QObjectPrivate::clearGuards(QObject *object)
{
QObjectPrivate *priv = QObjectPrivate::get(object);
- QGuard<QObject> *guard = priv->objectGuards;
+ QGuard<QObject> *guard = priv->extraData ? priv->extraData->objectGuards : 0;
while (guard) {
- guard->o = 0;
+ QGuard<QObject> *g = guard;
guard = guard->next;
- }
- while (priv->objectGuards) {
- guard = priv->objectGuards;
- guard->prev = 0;
- if (guard->next) guard->next->prev = &priv->objectGuards;
- priv->objectGuards = guard->next;
- guard->next = 0;
- guard->objectDestroyed(object);
+ g->o = 0;
+ g->prev = 0;
+ g->next = 0;
+ g->objectDestroyed(object);
}
if (!priv->hasGuards)
diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h
index e7d824b..f087407 100644
--- a/src/corelib/kernel/qobject_p.h
+++ b/src/corelib/kernel/qobject_p.h
@@ -99,11 +99,13 @@ class Q_CORE_EXPORT QObjectPrivate : public QObjectData
public:
struct ExtraData
{
+ ExtraData() : objectGuards(0) {}
#ifndef QT_NO_USERDATA
QVector<QObjectUserData *> userData;
#endif
QList<QByteArray> propertyNames;
QList<QVariant> propertyValues;
+ QGuard<QObject> *objectGuards; //linked list handle of QGuards
};
struct Connection
@@ -192,12 +194,13 @@ public:
#endif
QList<QPointer<QObject> > eventFilters;
- QObject *currentChildBeingDeleted;
+ union {
+ QObject *currentChildBeingDeleted;
+ QDeclarativeData *declarativeData; //extra data used by the DeclarativeUI project.
+ };
// these objects are all used to indicate that a QObject was deleted
// plus QPointer, which keeps a separate list
- QDeclarativeData *declarativeData;
- QGuard<QObject> *objectGuards;
QAtomicPointer<QtSharedPointer::ExternalRefCountData> sharedRefcount;
int *deleteWatch;
};
@@ -211,9 +214,12 @@ inline void q_guard_addGuard(QGuard<QObject> *g)
return;
}
- g->next = p->objectGuards;
- p->objectGuards = g;
- g->prev = &p->objectGuards;
+ if (!p->extraData)
+ p->extraData = new QObjectPrivate::ExtraData;
+
+ g->next = p->extraData->objectGuards;
+ p->extraData->objectGuards = g;
+ g->prev = &p->extraData->objectGuards;
if (g->next)
g->next->prev = &g->next;
}