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/webengine | |
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/webengine')
-rw-r--r-- | src/webengine/api/qquickwebenginesettings.cpp | 23 | ||||
-rw-r--r-- | src/webengine/api/qquickwebenginesettings_p.h | 2 |
2 files changed, 17 insertions, 8 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; }; |