aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/qml/qml/qqml.cpp3
-rw-r--r--src/qml/qml/qqml.h39
-rw-r--r--src/qml/qml/qqmlengine.cpp2
-rw-r--r--src/qml/qml/qqmlmetatype.cpp1
-rw-r--r--src/qml/qml/qqmlprivate.h15
-rw-r--r--src/qml/qml/qqmltype.cpp5
-rw-r--r--src/qml/qml/qqmltype_p.h5
-rw-r--r--src/qml/qml/qqmltype_p_p.h3
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 *);