aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqml.h
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2020-02-28 15:59:15 +0100
committerUlf Hermann <ulf.hermann@qt.io>2020-03-11 14:48:35 +0100
commit547b4d2c2d9424fdcc694e291fe543a4f52cb684 (patch)
tree5beb7cef439c16d86dcc5e682332e5a487b2aaea /src/qml/qml/qqml.h
parent9bd034ea01d01dcc4598c3e3e25e91d0b53a2cda (diff)
Optionally return type IDs from qmlRegisterTypeAndRevisions()
This allows us to save the type IDs and later unregister the types in qmltyperegistrar-generated code. Change-Id: Id1bc73e2832c6d76e513ee3ee267b8d52e3851da Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/qml/qml/qqml.h')
-rw-r--r--src/qml/qml/qqml.h42
1 files changed, 25 insertions, 17 deletions
diff --git a/src/qml/qml/qqml.h b/src/qml/qml/qqml.h
index 840c6aaee3..fff1db5125 100644
--- a/src/qml/qml/qqml.h
+++ b/src/qml/qml/qqml.h
@@ -86,7 +86,7 @@
enum class QmlIsSingleton {yes = true}; \
template<typename, typename> friend struct QML_PRIVATE_NAMESPACE::QmlSingleton; \
template<typename T, typename... Args> \
- friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor);
+ friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QVector<int> *);
#define QML_ADDED_IN_MINOR_VERSION(VERSION) \
Q_CLASSINFO("QML.AddedInVersion", Q_REVISION(VERSION))
@@ -111,21 +111,21 @@
using QmlExtendedType = EXTENDED_TYPE; \
template<class, class> friend struct QML_PRIVATE_NAMESPACE::QmlExtended; \
template<typename T, typename... Args> \
- friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor);
+ friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QVector<int> *);
#define QML_FOREIGN(FOREIGN_TYPE) \
Q_CLASSINFO("QML.Foreign", #FOREIGN_TYPE) \
using QmlForeignType = FOREIGN_TYPE; \
template<class, class> friend struct QML_PRIVATE_NAMESPACE::QmlResolved; \
template<typename T, typename... Args> \
- friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor);
+ friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QVector<int> *);
#define QML_INTERFACE \
Q_CLASSINFO("QML.Element", "anonymous") \
enum class QmlIsInterface {yes = true}; \
template<typename, typename> friend struct QML_PRIVATE_NAMESPACE::QmlInterface; \
template<typename T, typename... Args> \
- friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor);
+ friend void QML_REGISTER_TYPES_AND_REVISIONS(const char *uri, int versionMajor, QVector<int> *);
#define QML_UNAVAILABLE \
QML_FOREIGN(QQmlTypeNotAvailable)
@@ -780,50 +780,57 @@ struct QmlTypeAndRevisionsRegistration;
template<class T, class Resolved, class Extended>
struct QmlTypeAndRevisionsRegistration<T, Resolved, Extended, false, false> {
- static void registerTypeAndRevisions(const char *uri, int versionMajor)
+ static void registerTypeAndRevisions(const char *uri, int versionMajor,
+ QVector<int> *qmlTypeIds)
{
QQmlPrivate::qmlRegisterTypeAndRevisions<Resolved, Extended>(
- uri, versionMajor, &T::staticMetaObject);
+ uri, versionMajor, &T::staticMetaObject, qmlTypeIds);
}
};
template<class T, class Resolved>
struct QmlTypeAndRevisionsRegistration<T, Resolved, void, true, false> {
- static void registerTypeAndRevisions(const char *uri, int versionMajor)
+ static void registerTypeAndRevisions(const char *uri, int versionMajor,
+ QVector<int> *qmlTypeIds)
{
QQmlPrivate::qmlRegisterSingletonAndRevisions<Resolved>(
- uri, versionMajor, &T::staticMetaObject);
+ uri, versionMajor, &T::staticMetaObject, qmlTypeIds);
}
};
template<class T, class Resolved>
struct QmlTypeAndRevisionsRegistration<T, Resolved, void, false, true> {
- static void registerTypeAndRevisions(const char *uri, int versionMajor)
+ static void registerTypeAndRevisions(const char *uri, int versionMajor,
+ QVector<int> *qmlTypeIds)
{
- qmlRegisterInterface<Resolved>(uri, versionMajor);
+ const int id = qmlRegisterInterface<Resolved>(uri, versionMajor);
+ if (qmlTypeIds)
+ qmlTypeIds->append(id);
}
};
template<typename T = void, typename... Args>
-void qmlRegisterTypesAndRevisions(const char *uri, int versionMajor);
+void qmlRegisterTypesAndRevisions(const char *uri, int versionMajor,
+ QVector<int> *qmlTypeIds = nullptr);
template<typename T, typename... Args>
-void qmlRegisterTypesAndRevisions(const char *uri, int versionMajor)
+void qmlRegisterTypesAndRevisions(const char *uri, int versionMajor, QVector<int> *qmlTypeIds)
{
QmlTypeAndRevisionsRegistration<
T, typename QQmlPrivate::QmlResolved<T>::Type,
typename QQmlPrivate::QmlExtended<T>::Type,
QQmlPrivate::QmlSingleton<T>::Value,
QQmlPrivate::QmlInterface<T>::Value>
- ::registerTypeAndRevisions(uri, versionMajor);
- qmlRegisterTypesAndRevisions<Args...>(uri, versionMajor);
+ ::registerTypeAndRevisions(uri, versionMajor, qmlTypeIds);
+ qmlRegisterTypesAndRevisions<Args...>(uri, versionMajor, qmlTypeIds);
}
template<>
-inline void qmlRegisterTypesAndRevisions<>(const char *, int) {}
+inline void qmlRegisterTypesAndRevisions<>(const char *, int, QVector<int> *) {}
inline void qmlRegisterNamespaceAndRevisions(const QMetaObject *metaObject,
- const char *uri, int versionMajor)
+ const char *uri, int versionMajor,
+ QVector<int> *qmlTypeIds = nullptr)
{
QQmlPrivate::RegisterTypeAndRevisions type = {
0,
@@ -848,7 +855,8 @@ inline void qmlRegisterNamespaceAndRevisions(const QMetaObject *metaObject,
nullptr,
nullptr,
- &qmlCreateCustomParser<void>
+ &qmlCreateCustomParser<void>,
+ qmlTypeIds
};
qmlregister(QQmlPrivate::TypeAndRevisionsRegistration, &type);