summaryrefslogtreecommitdiffstats
path: root/src/webenginewidgets
diff options
context:
space:
mode:
authorAndras Becsi <andras.becsi@digia.com>2014-11-20 15:42:04 +0100
committerAndras Becsi <andras.becsi@digia.com>2014-11-20 16:09:57 +0100
commitd3bc22c25f0443ce19efd5524d2342c1c94e3e91 (patch)
treea80eee808cde751e6b188875532622ee54cdb3b7 /src/webenginewidgets
parent84cf77bdf980b2e88938e94ace32865528dcc5fc (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.cpp34
-rw-r--r--src/webenginewidgets/api/qwebenginesettings.h2
-rw-r--r--src/webenginewidgets/api/qwebenginesettings_p.h1
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;