From 047901aab2bfac21d5694f59063b836b8b75a009 Mon Sep 17 00:00:00 2001
From: Daniel Molkentin <daniel.molkentin@nokia.com>
Date: Wed, 13 Jan 2010 17:37:53 +0100
Subject: [PATCH] Allow access to system scope setting.

This commit add a Settings::Scope parameter to
Core::ICore::settings(), the default is UserScope,
which falls back to SystemScope. Specifying SystemScope
instead gives exclusive access to the SystemScope.
---
 src/plugins/coreplugin/coreimpl.cpp   |  5 +++--
 src/plugins/coreplugin/coreimpl.h     |  2 +-
 src/plugins/coreplugin/icore.cpp      | 10 +++++++++-
 src/plugins/coreplugin/icore.h        |  4 +++-
 src/plugins/coreplugin/mainwindow.cpp |  8 ++++++++
 src/plugins/coreplugin/mainwindow.h   |  4 +++-
 6 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/src/plugins/coreplugin/coreimpl.cpp b/src/plugins/coreplugin/coreimpl.cpp
index 1cfe46f00fe..13e85f219e7 100644
--- a/src/plugins/coreplugin/coreimpl.cpp
+++ b/src/plugins/coreplugin/coreimpl.cpp
@@ -31,6 +31,7 @@
 
 #include <QtCore/QDir>
 #include <QtCore/QCoreApplication>
+#include <QtCore/QSettings>
 
 namespace Core {
 namespace Internal {
@@ -135,9 +136,9 @@ MimeDatabase *CoreImpl::mimeDatabase() const
     return m_mainwindow->mimeDatabase();
 }
 
-QSettings *CoreImpl::settings() const
+QSettings *CoreImpl::settings(QSettings::Scope scope) const
 {
-    return m_mainwindow->settings();
+    return m_mainwindow->settings(scope);
 }
 
 SettingsDatabase *CoreImpl::settingsDatabase() const
diff --git a/src/plugins/coreplugin/coreimpl.h b/src/plugins/coreplugin/coreimpl.h
index d591f3efb6f..bc7b87fb3c5 100644
--- a/src/plugins/coreplugin/coreimpl.h
+++ b/src/plugins/coreplugin/coreimpl.h
@@ -68,7 +68,7 @@ public:
     ModeManager *modeManager() const;
     MimeDatabase *mimeDatabase() const;
 
-    QSettings *settings() const;
+    QSettings *settings(QSettings::Scope scope = QSettings::UserScope) const;
     SettingsDatabase *settingsDatabase() const;
     QPrinter *printer() const;
 
diff --git a/src/plugins/coreplugin/icore.cpp b/src/plugins/coreplugin/icore.cpp
index 531319a5adc..3c0b860e5b4 100644
--- a/src/plugins/coreplugin/icore.cpp
+++ b/src/plugins/coreplugin/icore.cpp
@@ -188,12 +188,20 @@
 */
 
 /*!
-    \fn QSettings *ICore::settings() const
+    \fn QSettings *ICore::settings(QSettings::UserScope scope) const
     \brief Returns the application's main settings object.
 
     You can use it to retrieve or set application wide settings
     (in contrast to session or project specific settings).
 
+    If \a scope is QSettings::UserScope (the default), the
+    users settings will be read from the users settings, with
+    a fallback to global settings provided with Qt Creator.
+
+    If \a scope is QSettings::SystemScope, only the system settings
+    shipped with the current version of Qt Creator will be read. This
+    functionality exists for internal purposes only.
+
     \see settingsDatabase()
 */
 
diff --git a/src/plugins/coreplugin/icore.h b/src/plugins/coreplugin/icore.h
index eab9b9abf0f..1f92f9ed141 100644
--- a/src/plugins/coreplugin/icore.h
+++ b/src/plugins/coreplugin/icore.h
@@ -32,6 +32,7 @@
 
 #include "core_global.h"
 #include <QtCore/QObject>
+#include <QtCore/QSettings>
 
 QT_BEGIN_NAMESPACE
 class QMainWindow;
@@ -40,6 +41,7 @@ class QSettings;
 template <class T> class QList;
 QT_END_NAMESPACE
 
+
 namespace Core {
 
 class ActionManager;
@@ -93,7 +95,7 @@ public:
     virtual ModeManager *modeManager() const = 0;
     virtual MimeDatabase *mimeDatabase() const = 0;
 
-    virtual QSettings *settings() const = 0;
+    virtual QSettings *settings(QSettings::Scope scope = QSettings::UserScope) const = 0;
     virtual SettingsDatabase *settingsDatabase() const = 0;
     virtual QPrinter *printer() const = 0;
 
diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp
index 1d028b98e7d..432d06fdc91 100644
--- a/src/plugins/coreplugin/mainwindow.cpp
+++ b/src/plugins/coreplugin/mainwindow.cpp
@@ -945,6 +945,14 @@ VCSManager *MainWindow::vcsManager() const
     return m_vcsManager;
 }
 
+QSettings *MainWindow::settings(QSettings::Scope scope) const
+{
+    if (scope == QSettings::UserScope)
+        return m_settings;
+    else
+        return m_globalSettings;
+}
+
 EditorManager *MainWindow::editorManager() const
 {
     return m_editorManager;
diff --git a/src/plugins/coreplugin/mainwindow.h b/src/plugins/coreplugin/mainwindow.h
index decaabb32cb..8fae630f43e 100644
--- a/src/plugins/coreplugin/mainwindow.h
+++ b/src/plugins/coreplugin/mainwindow.h
@@ -36,6 +36,7 @@
 
 #include <QtCore/QMap>
 #include <QtGui/QColor>
+#include <QtCore/QSettings>
 
 QT_BEGIN_NAMESPACE
 class QSettings;
@@ -107,7 +108,7 @@ public:
     Core::MimeDatabase *mimeDatabase() const;
 
     VCSManager *vcsManager() const;
-    inline QSettings *settings() const { return m_settings; }
+    QSettings *settings(QSettings::Scope scope) const;
     inline SettingsDatabase *settingsDatabase() const { return m_settingsDatabase; }
     virtual QPrinter *printer() const;
     IContext * currentContextObject() const;
@@ -176,6 +177,7 @@ private:
     QList<int> m_globalContext;
     QList<int> m_additionalContexts;
     QSettings *m_settings;
+    QSettings *m_globalSettings;
     SettingsDatabase *m_settingsDatabase;
     mutable QPrinter *m_printer;
     ActionManagerPrivate *m_actionManager;
-- 
GitLab