aboutsummaryrefslogtreecommitdiffstats
path: root/src/quickcontrols2
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2018-05-13 19:34:29 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2018-05-22 14:20:58 +0000
commit9478053838ae2d950b162c2b93a2a400c82d9bf7 (patch)
tree317481f78a4c02e6c03ee6be50ac12df205e5b75 /src/quickcontrols2
parent1a3c1a089ff088482c9d093f4fa002e2d47cc103 (diff)
Create and init QQuickTheme from QtQuickControls2Plugin
Instead of creating and setting the QQuickTheme instance from each style plugin (e.g. QtQuickControls2MaterialStylePlugin), create the QQuickTheme instance in QtQuickControls2Plugin when the style is being resolved, and just pass the instance to be initialized by the style plugin(s). This avoids the problem that QQuickTheme API was virtual, and sub-classes created from plugins would have vtables destroyed before the QQuickTheme was destroyed. Task-number: QTBUG-67062 Task-number: QTBUG-68087 Change-Id: I19e9ced5296b708c2668c30163389cb3da6be7cf Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quickcontrols2')
-rw-r--r--src/quickcontrols2/qquickstyleplugin.cpp52
-rw-r--r--src/quickcontrols2/qquickstyleplugin_p.h6
2 files changed, 3 insertions, 55 deletions
diff --git a/src/quickcontrols2/qquickstyleplugin.cpp b/src/quickcontrols2/qquickstyleplugin.cpp
index c42ba88d..553a6cad 100644
--- a/src/quickcontrols2/qquickstyleplugin.cpp
+++ b/src/quickcontrols2/qquickstyleplugin.cpp
@@ -39,14 +39,11 @@
#include "qquickstyle_p.h"
#include "qquickstyleselector_p.h"
-#include <QtQuickTemplates2/private/qquicktheme_p_p.h>
-
QT_BEGIN_NAMESPACE
class QQuickStylePluginPrivate
{
public:
- QQuickTheme *theme = nullptr;
mutable QScopedPointer<QQuickStyleSelector> selector;
};
@@ -57,51 +54,6 @@ QQuickStylePlugin::QQuickStylePlugin(QObject *parent)
QQuickStylePlugin::~QQuickStylePlugin()
{
- Q_D(QQuickStylePlugin);
- if (QQuickTheme::instance() == d->theme)
- QQuickThemePrivate::instance.reset();
-}
-
-void QQuickStylePlugin::registerTypes(const char *uri)
-{
- Q_UNUSED(uri);
-}
-
-void QQuickStylePlugin::initializeEngine(QQmlEngine *engine, const char *uri)
-{
- Q_D(QQuickStylePlugin);
- Q_UNUSED(engine);
- Q_UNUSED(uri);
-
- // make sure not to re-create the theme if initializeEngine()
- // is called multiple times, like in case of qml2puppet (QTBUG-54995)
- if (d->theme)
- return;
-
- if (isCurrent()) {
- d->theme = createTheme();
- if (d->theme) {
-#if QT_CONFIG(settings)
- QQuickThemePrivate *p = QQuickThemePrivate::get(d->theme);
- QSharedPointer<QSettings> settings = QQuickStylePrivate::settings(name());
- if (settings) {
- p->defaultFont.reset(QQuickStylePrivate::readFont(settings));
- p->defaultPalette.reset(QQuickStylePrivate::readPalette(settings));
- }
-#endif
- QQuickThemePrivate::instance.reset(d->theme);
- }
- }
-}
-
-bool QQuickStylePlugin::isCurrent() const
-{
- QString style = QQuickStyle::name();
- if (style.isEmpty())
- style = QStringLiteral("Default");
-
- const QString theme = name();
- return theme.compare(style, Qt::CaseInsensitive) == 0;
}
QString QQuickStylePlugin::name() const
@@ -109,9 +61,9 @@ QString QQuickStylePlugin::name() const
return QString();
}
-QQuickTheme *QQuickStylePlugin::createTheme() const
+void QQuickStylePlugin::initializeTheme(QQuickTheme *theme)
{
- return nullptr;
+ Q_UNUSED(theme);
}
QUrl QQuickStylePlugin::resolvedUrl(const QString &fileName) const
diff --git a/src/quickcontrols2/qquickstyleplugin_p.h b/src/quickcontrols2/qquickstyleplugin_p.h
index 735341df..6b89926c 100644
--- a/src/quickcontrols2/qquickstyleplugin_p.h
+++ b/src/quickcontrols2/qquickstyleplugin_p.h
@@ -64,12 +64,8 @@ public:
explicit QQuickStylePlugin(QObject *parent = nullptr);
~QQuickStylePlugin();
- void registerTypes(const char *uri) override;
- void initializeEngine(QQmlEngine *engine, const char *uri) override;
-
- bool isCurrent() const;
virtual QString name() const;
- virtual QQuickTheme *createTheme() const;
+ virtual void initializeTheme(QQuickTheme *theme);
QUrl resolvedUrl(const QString &fileName) const;