summaryrefslogtreecommitdiffstats
path: root/src/declarative/qml/qdeclarativeengine.cpp
diff options
context:
space:
mode:
authorAaron Kennedy <aaron.kennedy@nokia.com>2010-10-11 02:07:24 (GMT)
committerAaron Kennedy <aaron.kennedy@nokia.com>2010-10-11 02:07:24 (GMT)
commit759da9b325f19670a3d79ede5f06fb3fa1f95495 (patch)
tree11403d8cfa3c8c0f1cf62c9f29108a34e8f30b7d /src/declarative/qml/qdeclarativeengine.cpp
parentf69eeec7030a5df12803a9128819207e3fc5bead (diff)
downloadQt-759da9b325f19670a3d79ede5f06fb3fa1f95495.zip
Qt-759da9b325f19670a3d79ede5f06fb3fa1f95495.tar.gz
Qt-759da9b325f19670a3d79ede5f06fb3fa1f95495.tar.bz2
Allow objectName to be used in QML bindings
Task-number: QTBUG-13999
Diffstat (limited to 'src/declarative/qml/qdeclarativeengine.cpp')
-rw-r--r--src/declarative/qml/qdeclarativeengine.cpp43
1 files changed, 35 insertions, 8 deletions
diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp
index dfc29c4..7ed925a 100644
--- a/src/declarative/qml/qdeclarativeengine.cpp
+++ b/src/declarative/qml/qdeclarativeengine.cpp
@@ -68,6 +68,7 @@
#include "private/qdeclarativelist_p.h"
#include "private/qdeclarativetypenamecache_p.h"
#include "private/qdeclarativeinclude_p.h"
+#include "private/qdeclarativenotifier_p.h"
#include <QtCore/qmetaobject.h>
#include <QScriptClass>
@@ -470,6 +471,7 @@ void QDeclarativeData::parentChanged(QAbstractDeclarativeData *d, QObject *o, QO
void QDeclarativeData::objectNameChanged(QAbstractDeclarativeData *d, QObject *o)
{
+ static_cast<QDeclarativeData *>(d)->objectNameChanged(o);
}
void QDeclarativeEnginePrivate::init()
@@ -953,7 +955,7 @@ QObject *qmlAttachedPropertiesObjectById(int id, const QObject *object, bool cre
if (!data)
return 0; // Attached properties are only on objects created by QML
- QObject *rv = data->attachedProperties?data->attachedProperties->value(id):0;
+ QObject *rv = data->extendedData?data->attachedProperties()->value(id):0;
if (rv || !create)
return rv;
@@ -963,11 +965,8 @@ QObject *qmlAttachedPropertiesObjectById(int id, const QObject *object, bool cre
rv = pf(const_cast<QObject *>(object));
- if (rv) {
- if (!data->attachedProperties)
- data->attachedProperties = new QHash<int, QObject *>();
- data->attachedProperties->insert(id, rv);
- }
+ if (rv)
+ data->attachedProperties()->insert(id, rv);
return rv;
}
@@ -988,8 +987,6 @@ void QDeclarativeData::destroyed(QObject *object)
{
if (deferredComponent)
deferredComponent->release();
- if (attachedProperties)
- delete attachedProperties;
if (nextContextObject)
nextContextObject->prevContextObject = prevContextObject;
@@ -1023,6 +1020,9 @@ void QDeclarativeData::destroyed(QObject *object)
if (scriptValue)
delete scriptValue;
+ if (extendedData)
+ delete extendedData;
+
if (ownMemory)
delete this;
}
@@ -1032,6 +1032,11 @@ void QDeclarativeData::parentChanged(QObject *, QObject *parent)
if (!parent && scriptValue) { delete scriptValue; scriptValue = 0; }
}
+void QDeclarativeData::objectNameChanged(QObject *)
+{
+ if (extendedData) objectNameNotifier()->notify();
+}
+
bool QDeclarativeData::hasBindingBit(int bit) const
{
if (bindingBitsSize > bit)
@@ -1068,6 +1073,28 @@ void QDeclarativeData::setBindingBit(QObject *obj, int bit)
bindingBits[bit / 32] |= (1 << (bit % 32));
}
+QDeclarativeData::ExtendedData::ExtendedData()
+: objectNameNotifier(0)
+{
+}
+
+QDeclarativeData::ExtendedData::~ExtendedData()
+{
+ ((QDeclarativeNotifier *)&objectNameNotifier)->~QDeclarativeNotifier();
+}
+
+QDeclarativeNotifier *QDeclarativeData::objectNameNotifier() const
+{
+ if (!extendedData) extendedData = new ExtendedData;
+ return (QDeclarativeNotifier *)&extendedData->objectNameNotifier;
+}
+
+QHash<int, QObject *> *QDeclarativeData::attachedProperties() const
+{
+ if (!extendedData) extendedData = new ExtendedData;
+ return &extendedData->attachedProperties;
+}
+
/*!
Creates a QScriptValue allowing you to use \a object in QML script.
\a engine is the QDeclarativeEngine it is to be created in.