From c9dbd1025cf31ca512ff29a169970275b76752dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A4=C3=A4tt=C3=A4=20Antti?= Date: Fri, 12 May 2017 14:45:27 +0300 Subject: Fix qmlClearTypeRegistrations for Qt 3D Unregister valueTypeProvider in qtquick_global.cpp to prevent multiple registrations. The Quick3DColorProvider doesn't seem to cause problems so leave as it is. Task-number: QTBUG-56546 Change-Id: I79139d8e8ab80458e72633dd97e15dbf108388e4 Reviewed-by: Sean Harmer --- src/quick3d/imports/core/qt3dquick3dcoreplugin.cpp | 5 +++++ src/quick3d/imports/core/qt3dquick3dcoreplugin.h | 1 + src/quick3d/quick3d/qt3dquick_global.cpp | 7 ++++++- src/quick3d/quick3d/qt3dquick_global_p.h | 1 + 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/quick3d/imports/core/qt3dquick3dcoreplugin.cpp b/src/quick3d/imports/core/qt3dquick3dcoreplugin.cpp index 6d2a78166..3ff63d9d9 100644 --- a/src/quick3d/imports/core/qt3dquick3dcoreplugin.cpp +++ b/src/quick3d/imports/core/qt3dquick3dcoreplugin.cpp @@ -71,4 +71,9 @@ void Qt3DQuick3DCorePlugin::registerTypes(const char *uri) qmlRegisterExtendedUncreatableType(uri, 2, 9, "Node", QStringLiteral("Node is a base class")); } +Qt3DQuick3DCorePlugin::~Qt3DQuick3DCorePlugin() +{ + Qt3DCore::Quick::Quick3D_uninitialize(); +} + QT_END_NAMESPACE diff --git a/src/quick3d/imports/core/qt3dquick3dcoreplugin.h b/src/quick3d/imports/core/qt3dquick3dcoreplugin.h index a9b215c4a..b0ef5947c 100644 --- a/src/quick3d/imports/core/qt3dquick3dcoreplugin.h +++ b/src/quick3d/imports/core/qt3dquick3dcoreplugin.h @@ -57,6 +57,7 @@ class Qt3DQuick3DCorePlugin : public QQmlExtensionPlugin Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) public: Qt3DQuick3DCorePlugin(QObject *parent = nullptr) : QQmlExtensionPlugin(parent) { initResources(); } + ~Qt3DQuick3DCorePlugin(); void registerTypes(const char *uri) Q_DECL_OVERRIDE; }; diff --git a/src/quick3d/quick3d/qt3dquick_global.cpp b/src/quick3d/quick3d/qt3dquick_global.cpp index ebf27e7ae..a98211991 100644 --- a/src/quick3d/quick3d/qt3dquick_global.cpp +++ b/src/quick3d/quick3d/qt3dquick_global.cpp @@ -659,9 +659,9 @@ public: #undef ASSERT_VALID_SIZE }; +static Quick3DValueTypeProvider valueTypeProvider; static Quick3DValueTypeProvider *getValueTypeProvider() { - static Quick3DValueTypeProvider valueTypeProvider; return &valueTypeProvider; } @@ -706,6 +706,11 @@ void Quick3D_initialize() QQmlPrivate::qmlregister(QQmlPrivate::AutoParentRegistration, &autoparent); } +void Quick3D_uninitialize() +{ + QQml_removeValueTypeProvider(&valueTypeProvider); +} + void Quick3D_registerType(const char *className, const char *quickName, int major, int minor) { QuickNodeFactory::instance()->registerType(className, quickName, major, minor); diff --git a/src/quick3d/quick3d/qt3dquick_global_p.h b/src/quick3d/quick3d/qt3dquick_global_p.h index d67209404..ffc603f91 100644 --- a/src/quick3d/quick3d/qt3dquick_global_p.h +++ b/src/quick3d/quick3d/qt3dquick_global_p.h @@ -62,6 +62,7 @@ namespace Qt3DCore { namespace Quick { QT3DQUICKSHARED_PRIVATE_EXPORT void Quick3D_initialize(); +QT3DQUICKSHARED_PRIVATE_EXPORT void Quick3D_uninitialize(); QT3DQUICKSHARED_PRIVATE_EXPORT void Quick3D_registerType(const char *className, const char *quickName, int major, int minor); template void registerExtendedType(const char *className, const char *quickName, -- cgit v1.2.3