aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/qml')
-rw-r--r--src/qml/qml/qqmldata_p.h5
-rw-r--r--src/qml/qml/qqmlengine.cpp21
2 files changed, 20 insertions, 6 deletions
diff --git a/src/qml/qml/qqmldata_p.h b/src/qml/qml/qqmldata_p.h
index 76d03f011e..621b3d3c2e 100644
--- a/src/qml/qml/qqmldata_p.h
+++ b/src/qml/qml/qqmldata_p.h
@@ -79,7 +79,7 @@ class Q_QML_PRIVATE_EXPORT QQmlData : public QAbstractDeclarativeData
{
public:
QQmlData()
- : ownMemory(true), ownContext(false), indestructible(true), explicitIndestructibleSet(false),
+ : ownedByQml1(false), ownMemory(true), ownContext(false), indestructible(true), explicitIndestructibleSet(false),
hasTaintedV8Object(false), isQueuedForDeletion(false), rootObjectInCreation(false),
hasVMEMetaObject(false), parentFrozen(false), notifyList(0), context(0), outerContext(0),
bindings(0), signalHandlers(0), nextContextObject(0), prevContextObject(0), bindingBitsSize(0), bindingBits(0),
@@ -113,6 +113,7 @@ public:
if (!explicitIndestructibleSet) indestructible = false;
}
+ quint32 ownedByQml1:1; // This bit is shared with QML1's QDeclarativeData.
quint32 ownMemory:1;
quint32 ownContext:1;
quint32 indestructible:1;
@@ -126,7 +127,7 @@ public:
quint32 rootObjectInCreation:1;
quint32 hasVMEMetaObject:1;
quint32 parentFrozen:1;
- quint32 dummy:23;
+ quint32 dummy:22;
struct NotifyList {
quint64 connectionMask;
diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp
index 81ccec3571..d082b9a8fd 100644
--- a/src/qml/qml/qqmlengine.cpp
+++ b/src/qml/qml/qqmlengine.cpp
@@ -615,12 +615,18 @@ void QQmlPrivate::qdeclarativeelement_destructor(QObject *o)
void QQmlData::destroyed(QAbstractDeclarativeData *d, QObject *o)
{
- static_cast<QQmlData *>(d)->destroyed(o);
+ QQmlData *ddata = static_cast<QQmlData *>(d);
+ if (ddata->ownedByQml1)
+ return;
+ ddata->destroyed(o);
}
void QQmlData::parentChanged(QAbstractDeclarativeData *d, QObject *o, QObject *p)
{
- static_cast<QQmlData *>(d)->parentChanged(o, p);
+ QQmlData *ddata = static_cast<QQmlData *>(d);
+ if (ddata->ownedByQml1)
+ return;
+ ddata->parentChanged(o, p);
}
class QQmlThreadNotifierProxyObject : public QObject
@@ -649,6 +655,7 @@ void QQmlData::signalEmitted(QAbstractDeclarativeData *, QObject *object, int in
{
QQmlData *ddata = QQmlData::get(object, false);
if (!ddata) return; // Probably being deleted
+ if (ddata->ownedByQml1) return;
// In general, QML only supports QObject's that live on the same thread as the QQmlEngine
// that they're exposed to. However, to make writing "worker objects" that calculate data
@@ -706,12 +713,18 @@ void QQmlData::signalEmitted(QAbstractDeclarativeData *, QObject *object, int in
int QQmlData::receivers(QAbstractDeclarativeData *d, const QObject *, int index)
{
- return static_cast<QQmlData *>(d)->endpointCount(index);
+ QQmlData *ddata = static_cast<QQmlData *>(d);
+ if (ddata->ownedByQml1)
+ return 0;
+ return ddata->endpointCount(index);
}
bool QQmlData::isSignalConnected(QAbstractDeclarativeData *d, const QObject *, int index)
{
- return static_cast<QQmlData *>(d)->signalHasEndpoint(index);
+ QQmlData *ddata = static_cast<QQmlData *>(d);
+ if (ddata->ownedByQml1)
+ return false;
+ return ddata->signalHasEndpoint(index);
}
int QQmlData::endpointCount(int index)