aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/imports/controls/qtquickcontrols2plugin.cpp44
1 files changed, 26 insertions, 18 deletions
diff --git a/src/imports/controls/qtquickcontrols2plugin.cpp b/src/imports/controls/qtquickcontrols2plugin.cpp
index b089daa2..47263570 100644
--- a/src/imports/controls/qtquickcontrols2plugin.cpp
+++ b/src/imports/controls/qtquickcontrols2plugin.cpp
@@ -68,7 +68,14 @@ public:
private:
QQuickTheme *createTheme(const QString &name);
- bool registeredFallbackImport = false;
+ // We store these because the style plugins can be unregistered before
+ // QtQuickControls2Plugin, and since QQuickStylePlugin calls QQuickStylePrivate::reset(),
+ // the style information can be lost when it comes time to call qmlUnregisterModuleImport().
+ // It also avoids unnecessarily resolving the style after resetting it just to get the style
+ // name in unregisterTypes().
+ bool customStyle = false;
+ QString registeredStyleUri;
+ QString registeredFallbackStyleUri;
};
static const char *qtQuickControlsUri = "QtQuick.Controls";
@@ -125,25 +132,25 @@ void QtQuickControls2Plugin::registerTypes(const char *uri)
// provides all controls. Also, if we didn't return early here, we can get an infinite import loop
// when the style is set to Default.
if (styleName != fallbackStyleName && styleName != QLatin1String("Default")) {
- const QString fallbackstyleUri = ::fallbackStyleUri();
+ registeredFallbackStyleUri = ::fallbackStyleUri();
qCDebug(lcQtQuickControlsStylePlugin) << "calling qmlRegisterModuleImport() to register fallback style with"
- << "uri \"" << qtQuickControlsUri << "\" moduleMajor" << QQmlModuleImportModuleAny << "import" << fallbackstyleUri
- << "importMajor" << QQmlModuleImportAuto;
+ << "uri \"" << qtQuickControlsUri << "\" moduleMajor" << QQmlModuleImportModuleAny
+ << "import" << registeredFallbackStyleUri << "importMajor" << QQmlModuleImportAuto;
// The fallback style must be a built-in style, so we match the version number.
- qmlRegisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, fallbackstyleUri.toUtf8().constData(),
+ qmlRegisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, registeredFallbackStyleUri.toUtf8().constData(),
QQmlModuleImportAuto, QQmlModuleImportAuto);
- registeredFallbackImport = true;
}
- const QString styleUri = ::styleUri();
// If the user imports QtQuick.Controls 2.15, and they're using the Material style, we should import version 2.15.
// However, if they import QtQuick.Controls 2.15, but are using a custom style, we want to use the latest version
// number of their style.
- const int importMajor = !QQuickStylePrivate::isCustomStyle() ? QQmlModuleImportAuto : QQmlModuleImportLatest;
+ customStyle = QQuickStylePrivate::isCustomStyle();
+ registeredStyleUri = ::styleUri();
+ const int importMajor = !customStyle ? QQmlModuleImportAuto : QQmlModuleImportLatest;
qCDebug(lcQtQuickControlsStylePlugin).nospace() << "calling qmlRegisterModuleImport() to register primary style with"
- << " uri \"" << qtQuickControlsUri << "\" moduleMajor " << importMajor << " import " << styleUri
- << " importMajor " << importMajor;
- qmlRegisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, styleUri.toUtf8().constData(), importMajor);
+ << " uri \"" << qtQuickControlsUri << "\" moduleMajor " << importMajor
+ << " import " << registeredStyleUri << " importMajor " << importMajor;
+ qmlRegisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, registeredStyleUri.toUtf8().constData(), importMajor);
const QString style = QQuickStyle::name();
if (!style.isEmpty())
@@ -154,16 +161,17 @@ void QtQuickControls2Plugin::unregisterTypes()
{
qCDebug(lcQtQuickControlsStylePlugin) << "unregisterTypes() called";
- if (registeredFallbackImport) {
- const QString fallbackStyleUri = ::fallbackStyleUri();
- qmlUnregisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, fallbackStyleUri.toUtf8().constData(),
+ if (!registeredFallbackStyleUri.isEmpty()) {
+ // We registered a fallback style, so now we need to unregister it.
+ qmlUnregisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, registeredFallbackStyleUri.toUtf8().constData(),
QQmlModuleImportAuto, QQmlModuleImportAuto);
+ registeredFallbackStyleUri.clear();
}
- const QString primary = QQuickStylePrivate::effectiveStyleName(QQuickStyle::name());
- const QString styleUri = ::styleUri();
- const int importMajor = !QQuickStylePrivate::isCustomStyle() ? QQmlModuleImportAuto : QQmlModuleImportLatest;
- qmlUnregisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, styleUri.toUtf8().constData(), importMajor);
+ const int importMajor = !customStyle ? QQmlModuleImportAuto : QQmlModuleImportLatest;
+ qmlUnregisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, registeredStyleUri.toUtf8().constData(), importMajor);
+ customStyle = false;
+ registeredStyleUri.clear();
QQuickThemePrivate::instance.reset();