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/webenginewidgets | |
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/webenginewidgets')
-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 |
3 files changed, 21 insertions, 16 deletions
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; |