diff options
author | Andras Becsi <andras.becsi@digia.com> | 2014-11-20 15:42:04 +0100 |
---|---|---|
committer | Andras Becsi <andras.becsi@digia.com> | 2014-11-20 16:09:57 +0100 |
commit | d3bc22c25f0443ce19efd5524d2342c1c94e3e91 (patch) | |
tree | a80eee808cde751e6b188875532622ee54cdb3b7 /src | |
parent | 84cf77bdf980b2e88938e94ace32865528dcc5fc (diff) |
Use Q_GLOBAL_STATIC instead of local statics for singletons
This patch prevents leaking these objects on shutdown.
Change-Id: Ic4a628e0d4dc0b31716f885c1e904b6062cf3ef0
Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/webengine/api/qquickwebenginesettings.cpp | 23 | ||||
-rw-r--r-- | src/webengine/api/qquickwebenginesettings_p.h | 2 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebenginesettings.cpp | 34 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebenginesettings.h | 2 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebenginesettings_p.h | 1 |
5 files changed, 38 insertions, 24 deletions
diff --git a/src/webengine/api/qquickwebenginesettings.cpp b/src/webengine/api/qquickwebenginesettings.cpp index ab0b039fc..03a812bae 100644 --- a/src/webengine/api/qquickwebenginesettings.cpp +++ b/src/webengine/api/qquickwebenginesettings.cpp @@ -43,6 +43,20 @@ QT_BEGIN_NAMESPACE Q_GLOBAL_STATIC(QList<QQuickWebEngineSettingsPrivate*>, allSettings) +class QQuickWebEngineGlobalSettings { + QQuickWebEngineSettings globalSettings; +public: + QQuickWebEngineGlobalSettings() { + // globalSettings shouldn't be in that list. + allSettings->removeAll(globalSettings.d_func()); + globalSettings.d_func()->coreSettings->initDefaults(); + } + + QQuickWebEngineSettings *data() { return &globalSettings; } +}; + +Q_GLOBAL_STATIC(QQuickWebEngineGlobalSettings, globalInstance) + QQuickWebEngineSettingsPrivate::QQuickWebEngineSettingsPrivate() : coreSettings(new WebEngineSettings(this)) { @@ -64,16 +78,9 @@ WebEngineSettings *QQuickWebEngineSettingsPrivate::fallbackSettings() const return QQuickWebEngineSettings::globalSettings()->d_func()->coreSettings.data(); } - QQuickWebEngineSettings *QQuickWebEngineSettings::globalSettings() { - static QQuickWebEngineSettings *globals = 0; - if (!globals) { - globals = new QQuickWebEngineSettings; - allSettings->removeAll(globals->d_func()); - globals->d_func()->coreSettings->initDefaults(); - } - return globals; + return globalInstance()->data(); } QQuickWebEngineSettings::~QQuickWebEngineSettings() diff --git a/src/webengine/api/qquickwebenginesettings_p.h b/src/webengine/api/qquickwebenginesettings_p.h index 0d5f3663b..040a5f5fb 100644 --- a/src/webengine/api/qquickwebenginesettings_p.h +++ b/src/webengine/api/qquickwebenginesettings_p.h @@ -44,6 +44,7 @@ QT_BEGIN_NAMESPACE class QQuickWebEngineSettingsPrivate; +class QQuickWebEngineGlobalSettings; class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineSettings : public QObject { Q_OBJECT @@ -110,6 +111,7 @@ private: Q_DISABLE_COPY(QQuickWebEngineSettings) Q_DECLARE_PRIVATE(QQuickWebEngineSettings) friend class QQuickWebEngineViewPrivate; + friend class QQuickWebEngineGlobalSettings; QScopedPointer<QQuickWebEngineSettingsPrivate> d_ptr; }; diff --git a/src/webenginewidgets/api/qwebenginesettings.cpp b/src/webenginewidgets/api/qwebenginesettings.cpp index 729a09f56..3a0f4fced 100644 --- a/src/webenginewidgets/api/qwebenginesettings.cpp +++ b/src/webenginewidgets/api/qwebenginesettings.cpp @@ -39,7 +39,7 @@ #include <QDebug> -QT_USE_NAMESPACE +QT_BEGIN_NAMESPACE static WebEngineSettings::Attribute toWebEngineAttribute(QWebEngineSettings::WebAttribute attribute) { switch (attribute) { @@ -74,7 +74,21 @@ static WebEngineSettings::Attribute toWebEngineAttribute(QWebEngineSettings::Web } } -Q_GLOBAL_STATIC(QList<QWebEngineSettingsPrivate*>, allSettings); +Q_GLOBAL_STATIC(QList<QWebEngineSettingsPrivate*>, allSettings) + +class QWebEngineGlobalSettings { + QWebEngineSettings globalSettings; +public: + QWebEngineGlobalSettings() { + // globalSettings shouldn't be in that list. + allSettings->removeAll(globalSettings.d_func()); + globalSettings.d_func()->coreSettings->initDefaults(); + } + + QWebEngineSettings *data() { return &globalSettings; } +}; + +Q_GLOBAL_STATIC(QWebEngineGlobalSettings, globalInstance) QWebEngineSettingsPrivate::QWebEngineSettingsPrivate() : coreSettings(new WebEngineSettings(this)) @@ -92,25 +106,13 @@ void QWebEngineSettingsPrivate::apply() } } -void QWebEngineSettingsPrivate::initDefaults() -{ - coreSettings->initDefaults(); -} - WebEngineSettings *QWebEngineSettingsPrivate::fallbackSettings() const { return QWebEngineSettings::globalSettings()->d_func()->coreSettings.data(); } QWebEngineSettings *QWebEngineSettings::globalSettings() { - static QWebEngineSettings* globalSettings = 0; - if (!globalSettings) { - globalSettings = new QWebEngineSettings; - // globalSettings shouldn't be in that list. - allSettings->removeAll(globalSettings->d_func()); - globalSettings->d_func()->initDefaults(); - } - return globalSettings; + return globalInstance()->data(); } Q_STATIC_ASSERT_X(static_cast<int>(WebEngineSettings::StandardFont) == static_cast<int>(QWebEngineSettings::StandardFont), "The enum values must match"); @@ -215,3 +217,5 @@ void QWebEngineSettings::resetAttribute(QWebEngineSettings::WebAttribute attr) { setAttribute(attr, globalSettings()->testAttribute(attr)); } + +QT_END_NAMESPACE diff --git a/src/webenginewidgets/api/qwebenginesettings.h b/src/webenginewidgets/api/qwebenginesettings.h index d9f57a935..29825f5a4 100644 --- a/src/webenginewidgets/api/qwebenginesettings.h +++ b/src/webenginewidgets/api/qwebenginesettings.h @@ -31,6 +31,7 @@ class QIcon; class QPixmap; class QUrl; class QWebEngineSettingsPrivate; +class QWebEngineGlobalSettings; class QWEBENGINEWIDGETS_EXPORT QWebEngineSettings { public: @@ -87,6 +88,7 @@ private: Q_DECLARE_PRIVATE(QWebEngineSettings); QScopedPointer<QWebEngineSettingsPrivate> d_ptr; friend class QWebEnginePagePrivate; + friend class QWebEngineGlobalSettings; QWebEngineSettings(); ~QWebEngineSettings(); diff --git a/src/webenginewidgets/api/qwebenginesettings_p.h b/src/webenginewidgets/api/qwebenginesettings_p.h index 830e8b360..12464fa02 100644 --- a/src/webenginewidgets/api/qwebenginesettings_p.h +++ b/src/webenginewidgets/api/qwebenginesettings_p.h @@ -48,7 +48,6 @@ class QWebEngineSettingsPrivate : public WebEngineSettingsDelegate { public: QWebEngineSettingsPrivate(); - void initDefaults(); void apply() Q_DECL_OVERRIDE; WebEngineSettings *fallbackSettings() const Q_DECL_OVERRIDE; |