diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2018-02-19 15:52:44 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2018-02-20 09:49:51 +0000 |
commit | 1ceb8efeef7cf2f32ab069e0939a96e26ba1a9f6 (patch) | |
tree | 30d560639e302e20cd427d220b0ae50301b74289 | |
parent | c924a94fb5077028965e2c6343e1bafabc0e69f8 (diff) |
Reset QQuickStyle when the QtQuick.Controls 2 plugin is unloaded
Cleanup global static data in QQuickStyle when the controls plugin is
unloaded (qmlClearTypeRegistrations()). This ensures that the style is
resolved as appropriate when the controls plugin is reloaded.
Change-Id: Icebb835e057e6063e4fc0ca035c6836560bc7c14
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
-rw-r--r-- | src/imports/controls/qtquickcontrols2plugin.cpp | 7 | ||||
-rw-r--r-- | tests/auto/qquickstyle/tst_qquickstyle.cpp | 36 |
2 files changed, 34 insertions, 9 deletions
diff --git a/src/imports/controls/qtquickcontrols2plugin.cpp b/src/imports/controls/qtquickcontrols2plugin.cpp index d04d3018..76086376 100644 --- a/src/imports/controls/qtquickcontrols2plugin.cpp +++ b/src/imports/controls/qtquickcontrols2plugin.cpp @@ -77,6 +77,8 @@ class QtQuickControls2Plugin: public QQuickStylePlugin public: QtQuickControls2Plugin(QObject *parent = nullptr); + ~QtQuickControls2Plugin(); + void registerTypes(const char *uri) override; QString name() const override; @@ -88,6 +90,11 @@ QtQuickControls2Plugin::QtQuickControls2Plugin(QObject *parent) : QQuickStylePlu initResources(); } +QtQuickControls2Plugin::~QtQuickControls2Plugin() +{ + QQuickStylePrivate::reset(); +} + void QtQuickControls2Plugin::registerTypes(const char *uri) { QQuickStylePrivate::init(typeUrl()); diff --git a/tests/auto/qquickstyle/tst_qquickstyle.cpp b/tests/auto/qquickstyle/tst_qquickstyle.cpp index 1ce2a034..9de947a6 100644 --- a/tests/auto/qquickstyle/tst_qquickstyle.cpp +++ b/tests/auto/qquickstyle/tst_qquickstyle.cpp @@ -46,21 +46,41 @@ class tst_QQuickStyle : public QObject Q_OBJECT private slots: - void init(); + void cleanup(); void lookup(); void commandLineArgument(); void environmentVariables(); void availableStyles(); + +private: + void loadControls(); + void unloadControls(); }; -void tst_QQuickStyle::init() +void tst_QQuickStyle::cleanup() { - QQuickStylePrivate::reset(); + unloadControls(); + QGuiApplicationPrivate::styleOverride.clear(); qunsetenv("QT_QUICK_CONTROLS_STYLE"); qunsetenv("QT_QUICK_CONTROLS_FALLBACK_STYLE"); } +void tst_QQuickStyle::loadControls() +{ + QQmlEngine engine; + QQmlComponent component(&engine); + component.setData("import QtQuick 2.0; import QtQuick.Controls 2.1; Control { }", QUrl()); + + QScopedPointer<QObject> object(component.create()); + QVERIFY2(!object.isNull(), qPrintable(component.errorString())); +} + +void tst_QQuickStyle::unloadControls() +{ + qmlClearTypeRegistrations(); +} + void tst_QQuickStyle::lookup() { QVERIFY(QQuickStyle::name().isEmpty()); @@ -70,12 +90,7 @@ void tst_QQuickStyle::lookup() QCOMPARE(QQuickStyle::name(), QString("Material")); QVERIFY(!QQuickStyle::path().isEmpty()); - QQmlEngine engine; - QQmlComponent component(&engine); - component.setData("import QtQuick 2.0; import QtQuick.Controls 2.1; Control { }", QUrl()); - - QScopedPointer<QObject> object(component.create()); - QVERIFY(!object.isNull()); + loadControls(); QCOMPARE(QQuickStyle::name(), QString("Material")); QVERIFY(!QQuickStyle::path().isEmpty()); @@ -84,6 +99,9 @@ void tst_QQuickStyle::lookup() void tst_QQuickStyle::commandLineArgument() { QGuiApplicationPrivate::styleOverride = "CmdLineArgStyle"; + + loadControls(); + QCOMPARE(QQuickStyle::name(), QString("CmdLineArgStyle")); } |