diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/qml/qqml.cpp | 3 | ||||
-rw-r--r-- | src/qml/qml/qqml.h | 39 | ||||
-rw-r--r-- | src/qml/qml/qqmlengine.cpp | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmlmetatype.cpp | 1 | ||||
-rw-r--r-- | src/qml/qml/qqmlprivate.h | 15 | ||||
-rw-r--r-- | src/qml/qml/qqmltype.cpp | 5 | ||||
-rw-r--r-- | src/qml/qml/qqmltype_p.h | 5 | ||||
-rw-r--r-- | src/qml/qml/qqmltype_p_p.h | 3 |
8 files changed, 39 insertions, 34 deletions
diff --git a/src/qml/qml/qqml.cpp b/src/qml/qml/qqml.cpp index 9d58fa7d9b..65fb6b0062 100644 --- a/src/qml/qml/qqml.cpp +++ b/src/qml/qml/qqml.cpp @@ -319,6 +319,7 @@ int QQmlPrivate::qmlregister(RegistrationType type, void *data) type.listId, creatable ? type.objectSize : 0, nullptr, + nullptr, noCreateReason, type.uri, type.version, @@ -357,6 +358,7 @@ int QQmlPrivate::qmlregister(RegistrationType type, void *data) } else { revisionRegistration.elementName = elementName; revisionRegistration.create = creatable ? type.create : nullptr; + revisionRegistration.userdata = type.userdata; } assignVersions(&revisionRegistration, revision, type.version); @@ -480,6 +482,7 @@ namespace QQmlPrivate { QMetaType::fromType<QQmlListProperty<T>>(), 0, nullptr, + nullptr, uri, QTypeRevision::fromMajorVersion(versionMajor), diff --git a/src/qml/qml/qqml.h b/src/qml/qml/qqml.h index 3c9c996a9c..b5c3b77f39 100644 --- a/src/qml/qml/qqml.h +++ b/src/qml/qml/qqml.h @@ -41,6 +41,7 @@ #define QQML_H #include <QtQml/qqmlprivate.h> +#include <QtQml/qjsvalue.h> #include <QtCore/qbytearray.h> #include <QtCore/qmetaobject.h> @@ -162,11 +163,10 @@ int qmlRegisterAnonymousType(const char *uri, int versionMajor) { QQmlPrivate::RegisterType type = { 0, - QMetaType::fromType<T *>(), QMetaType::fromType<QQmlListProperty<T> >(), 0, - nullptr, + nullptr, nullptr, QString(), uri, QTypeRevision::fromVersion(versionMajor, 0), nullptr, &T::staticMetaObject, @@ -203,11 +203,11 @@ int qmlRegisterUncreatableType(const char *uri, int versionMajor, int versionMin { QQmlPrivate::RegisterType type = { 0, - QMetaType::fromType<T *>(), QMetaType::fromType<QQmlListProperty<T>>(), 0, nullptr, + nullptr, reason, uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName, &T::staticMetaObject, @@ -233,11 +233,11 @@ int qmlRegisterUncreatableType(const char *uri, int versionMajor, int versionMin { QQmlPrivate::RegisterType type = { 0, - QMetaType::fromType<T *>(), QMetaType::fromType<QQmlListProperty<T> >(), 0, nullptr, + nullptr, reason, uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName, &T::staticMetaObject, @@ -270,11 +270,11 @@ int qmlRegisterExtendedUncreatableType(const char *uri, int versionMajor, int ve QQmlPrivate::RegisterType type = { 0, - QMetaType::fromType<T *>(), QMetaType::fromType<QQmlListProperty<T> >(), 0, nullptr, + nullptr, reason, uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName, &T::staticMetaObject, @@ -307,11 +307,11 @@ int qmlRegisterExtendedUncreatableType(const char *uri, int versionMajor, int ve QQmlPrivate::RegisterType type = { 0, - QMetaType::fromType<T *>(), QMetaType::fromType<QQmlListProperty<T> >(), 0, nullptr, + nullptr, reason, uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName, &T::staticMetaObject, @@ -339,10 +339,9 @@ int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const c { QQmlPrivate::RegisterType type = { 0, - QMetaType::fromType<T *>(), QMetaType::fromType<QQmlListProperty<T> >(), - sizeof(T), QQmlPrivate::createInto<T>, + sizeof(T), QQmlPrivate::createInto<T>, nullptr, QString(), uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName, &T::staticMetaObject, @@ -368,10 +367,9 @@ int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const c { QQmlPrivate::RegisterType type = { 0, - QMetaType::fromType<T *>(), QMetaType::fromType<QQmlListProperty<T> >(), - sizeof(T), QQmlPrivate::createInto<T>, + sizeof(T), QQmlPrivate::createInto<T>, nullptr, QString(), uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName, &T::staticMetaObject, @@ -397,10 +395,9 @@ int qmlRegisterRevision(const char *uri, int versionMajor, int versionMinor) { QQmlPrivate::RegisterType type = { 0, - QMetaType::fromType<T *>(), QMetaType::fromType<QQmlListProperty<T> >(), - sizeof(T), QQmlPrivate::createInto<T>, + sizeof(T), QQmlPrivate::createInto<T>, nullptr, QString(), uri, QTypeRevision::fromVersion(versionMajor, versionMinor), nullptr, &T::staticMetaObject, @@ -426,11 +423,11 @@ int qmlRegisterExtendedType(const char *uri, int versionMajor) { QQmlPrivate::RegisterType type = { 0, - QMetaType::fromType<T *>(), QMetaType::fromType<QQmlListProperty<T> >(), 0, nullptr, + nullptr, QString(), uri, QTypeRevision::fromVersion(versionMajor, 0), nullptr, &T::staticMetaObject, @@ -473,10 +470,9 @@ int qmlRegisterExtendedType(const char *uri, int versionMajor, int versionMinor, QQmlPrivate::RegisterType type = { 0, - QMetaType::fromType<T *>(), QMetaType::fromType<QQmlListProperty<T> >(), - sizeof(T), QQmlPrivate::createInto<T>, + sizeof(T), QQmlPrivate::createInto<T>, nullptr, QString(), uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName, &T::staticMetaObject, @@ -544,10 +540,9 @@ int qmlRegisterCustomType(const char *uri, int versionMajor, int versionMinor, { QQmlPrivate::RegisterType type = { 0, - QMetaType::fromType<T *>(), QMetaType::fromType<QQmlListProperty<T> >(), - sizeof(T), QQmlPrivate::createInto<T>, + sizeof(T), QQmlPrivate::createInto<T>, nullptr, QString(), uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName, &T::staticMetaObject, @@ -574,10 +569,9 @@ int qmlRegisterCustomType(const char *uri, int versionMajor, int versionMinor, { QQmlPrivate::RegisterType type = { 0, - QMetaType::fromType<T *>(), QMetaType::fromType<QQmlListProperty<T> >(), - sizeof(T), QQmlPrivate::createInto<T>, + sizeof(T), QQmlPrivate::createInto<T>, nullptr, QString(), uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName, &T::staticMetaObject, @@ -611,10 +605,9 @@ int qmlRegisterCustomExtendedType(const char *uri, int versionMajor, int version QQmlPrivate::RegisterType type = { 0, - QMetaType::fromType<T *>(), QMetaType::fromType<QQmlListProperty<T> >(), - sizeof(T), QQmlPrivate::createInto<T>, + sizeof(T), QQmlPrivate::createInto<T>, nullptr, QString(), uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName, &T::staticMetaObject, @@ -709,7 +702,8 @@ inline int qmlRegisterSingletonType(const char *uri, int versionMajor, int versi uri, QTypeRevision::fromVersion(versionMajor, versionMinor), typeName, - callback, nullptr, nullptr, QMetaType(), QTypeRevision::zero() + callback, + nullptr, nullptr, QMetaType(), QTypeRevision::zero() }; return QQmlPrivate::qmlregister(QQmlPrivate::SingletonRegistration, &api); @@ -872,6 +866,7 @@ inline void qmlRegisterNamespaceAndRevisions(const QMetaObject *metaObject, cons QMetaType(), 0, nullptr, + nullptr, uri, QTypeRevision::fromMajorVersion(versionMajor), diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp index f42d4472b2..cc11535ba8 100644 --- a/src/qml/qml/qqmlengine.cpp +++ b/src/qml/qml/qqmlengine.cpp @@ -108,11 +108,11 @@ int qmlRegisterUncreatableMetaObject(const QMetaObject &staticMetaObject, { QQmlPrivate::RegisterType type = { 0, - QMetaType(), QMetaType(), 0, nullptr, + nullptr, reason, uri, QTypeRevision::fromVersion(versionMajor, versionMinor), qmlName, &staticMetaObject, diff --git a/src/qml/qml/qqmlmetatype.cpp b/src/qml/qml/qqmlmetatype.cpp index cf51279bda..59108bca98 100644 --- a/src/qml/qml/qqmlmetatype.cpp +++ b/src/qml/qml/qqmlmetatype.cpp @@ -141,6 +141,7 @@ static QQmlTypePrivate *createQQmlType(QQmlMetaTypeData *data, const QString &el d->typeId = type.typeId; d->listId = type.listId; d->extraData.cd->allocationSize = type.objectSize; + d->extraData.cd->userdata = type.userdata; d->extraData.cd->newFunc = type.create; d->extraData.cd->noCreationReason = type.noCreationReason; d->baseMetaObject = type.metaObject; diff --git a/src/qml/qml/qqmlprivate.h b/src/qml/qml/qqmlprivate.h index c5c524c27a..244396452b 100644 --- a/src/qml/qml/qqmlprivate.h +++ b/src/qml/qml/qqmlprivate.h @@ -151,7 +151,7 @@ namespace QQmlPrivate } template<typename T> - void createInto(void *memory) { new (memory) QQmlElement<T>; } + void createInto(void *memory, void *) { new (memory) QQmlElement<T>; } template<typename T> QObject *createSingletonInstance(QQmlEngine *, QJSEngine *) { return new T; } @@ -159,7 +159,7 @@ namespace QQmlPrivate template<typename T> QObject *createParent(QObject *p) { return new T(p); } - using CreateIntoFunction = void (*)(void *); + using CreateIntoFunction = void (*)(void *, void *); using CreateSingletonFunction = QObject *(*)(QQmlEngine *, QJSEngine *); using CreateParentFunction = QObject *(*)(QObject *); @@ -336,7 +336,9 @@ namespace QQmlPrivate QMetaType typeId; QMetaType listId; int objectSize; - void (*create)(void *); + // The second parameter of create is for userdata + void (*create)(void *, void *); + void *userdata; QString noCreationReason; const char *uri; @@ -366,7 +368,8 @@ namespace QQmlPrivate QMetaType typeId; QMetaType listId; int objectSize; - void (*create)(void *); + void (*create)(void *, void *); + void *userdata; const char *uri; QTypeRevision version; @@ -413,7 +416,7 @@ namespace QQmlPrivate QTypeRevision version; const char *typeName; - QJSValue (*scriptApi)(QQmlEngine *, QJSEngine *); + std::function<QJSValue(QQmlEngine *, QJSEngine *)> scriptApi; std::function<QObject*(QQmlEngine *, QJSEngine *)> qObjectApi; const QMetaObject *instanceMetaObject; @@ -623,7 +626,7 @@ namespace QQmlPrivate QMetaType::fromType<T*>(), QMetaType::fromType<QQmlListProperty<T>>(), int(sizeof(T)), - Constructors<T>::createInto, + Constructors<T>::createInto, nullptr, uri, QTypeRevision::fromMajorVersion(versionMajor), diff --git a/src/qml/qml/qqmltype.cpp b/src/qml/qml/qqmltype.cpp index 26c970bf60..bdca223bae 100644 --- a/src/qml/qml/qqmltype.cpp +++ b/src/qml/qml/qqmltype.cpp @@ -466,7 +466,8 @@ QObject *QQmlType::create() const d->init(); QObject *rv = (QObject *)operator new(d->extraData.cd->allocationSize); - d->extraData.cd->newFunc(rv); + + d->extraData.cd->newFunc(rv, d->extraData.cd->userdata); if (rv && !d->metaObjects.isEmpty()) (void)new QQmlProxyMetaObject(rv, &d->metaObjects); @@ -482,7 +483,7 @@ void QQmlType::create(QObject **out, void **memory, size_t additionalMemory) con d->init(); QObject *rv = (QObject *)operator new(d->extraData.cd->allocationSize + additionalMemory); - d->extraData.cd->newFunc(rv); + d->extraData.cd->newFunc(rv, d->extraData.cd->userdata); if (rv && !d->metaObjects.isEmpty()) (void)new QQmlProxyMetaObject(rv, &d->metaObjects); diff --git a/src/qml/qml/qqmltype_p.h b/src/qml/qml/qqmltype_p.h index 929a5d0c81..99f4e95bf7 100644 --- a/src/qml/qml/qqmltype_p.h +++ b/src/qml/qml/qqmltype_p.h @@ -107,8 +107,9 @@ public: QObject *create() const; void create(QObject **, void **, size_t) const; - typedef void (*CreateFunc)(void *); + typedef void (*CreateFunc)(void *, void *); CreateFunc createFunction() const; + QQmlCustomParser *customParser() const; bool isCreatable() const; @@ -150,7 +151,7 @@ public: struct Q_QML_PRIVATE_EXPORT SingletonInstanceInfo { - QJSValue (*scriptCallback)(QQmlEngine *, QJSEngine *) = nullptr; + std::function<QJSValue(QQmlEngine *, QJSEngine *)> scriptCallback = {}; std::function<QObject *(QQmlEngine *, QJSEngine *)> qobjectCallback = {}; const QMetaObject *instanceMetaObject = nullptr; QString typeName; diff --git a/src/qml/qml/qqmltype_p_p.h b/src/qml/qml/qqmltype_p_p.h index 8cce5b7910..a66b889214 100644 --- a/src/qml/qml/qqmltype_p_p.h +++ b/src/qml/qml/qqmltype_p_p.h @@ -113,7 +113,8 @@ public: struct QQmlCppTypeData { int allocationSize; - void (*newFunc)(void *); + void (*newFunc)(void *, void *); + void *userdata = nullptr; QString noCreationReason; int parserStatusCast; QObject *(*extFunc)(QObject *); |