diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2018-05-13 19:34:29 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2018-05-22 14:20:58 +0000 |
commit | 9478053838ae2d950b162c2b93a2a400c82d9bf7 (patch) | |
tree | 317481f78a4c02e6c03ee6be50ac12df205e5b75 /src/quickcontrols2 | |
parent | 1a3c1a089ff088482c9d093f4fa002e2d47cc103 (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.cpp | 52 | ||||
-rw-r--r-- | src/quickcontrols2/qquickstyleplugin_p.h | 6 |
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; |