From 964dd4a3e1893b05a2db27e871902567921eb8b1 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 9 May 2017 15:50:43 +0200 Subject: [PATCH] Add a way to redirect the "install settings" If the default install settings contain a value for "Settings/InstallSettings", then that is used as the actual path for the actual install settings instead. If the path is relative, it is interpreted as relative to Qt Creator's applicationDirPath. Change-Id: I212037112e88c60c94239580841aa1400d96fb73 Reviewed-by: hjk Reviewed-by: Kai Koehne --- src/app/main.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/app/main.cpp b/src/app/main.cpp index 77cf8cb42e9..374ae667497 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -220,6 +220,25 @@ static inline QStringList getPluginPaths() return rc; } +static void setupInstallSettings() +{ + // Check if the default install settings contain a setting for the actual install settings. + // This can be an absolute path, or a path relative to applicationDirPath(). + // The result is interpreted like -settingspath, but for SystemScope + static const char kInstallSettingsKey[] = "Settings/InstallSettings"; + QSettings::setPath(QSettings::IniFormat, QSettings::SystemScope, + QCoreApplication::applicationDirPath() + '/' + RELATIVE_DATA_PATH); + QSettings installSettings(QSettings::IniFormat, QSettings::UserScope, + QLatin1String(Core::Constants::IDE_SETTINGSVARIANT_STR), + QLatin1String("QtCreator")); + if (installSettings.contains(kInstallSettingsKey)) { + QString installSettingsPath = installSettings.value(kInstallSettingsKey).toString(); + if (QDir::isRelativePath(installSettingsPath)) + installSettingsPath = QCoreApplication::applicationDirPath() + '/' + installSettingsPath; + QSettings::setPath(QSettings::IniFormat, QSettings::SystemScope, installSettingsPath); + } +} + static QSettings *createUserSettings() { return new QSettings(QSettings::IniFormat, QSettings::UserScope, @@ -363,9 +382,8 @@ int main(int argc, char **argv) QSettings::setPath(QSettings::IniFormat, QSettings::UserScope, settingsPath); // Must be done before any QSettings class is created - QSettings::setPath(QSettings::IniFormat, QSettings::SystemScope, - QCoreApplication::applicationDirPath() + '/' + RELATIVE_DATA_PATH); QSettings::setDefaultFormat(QSettings::IniFormat); + setupInstallSettings(); // plugin manager takes control of this settings object QSettings *settings = userSettings();