summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/app/app_version.h.in9
-rw-r--r--src/app/main.cpp81
2 files changed, 86 insertions, 4 deletions
diff --git a/src/app/app_version.h.in b/src/app/app_version.h.in
index 09d26adedc..c04aed72dc 100644
--- a/src/app/app_version.h.in
+++ b/src/app/app_version.h.in
@@ -63,9 +63,16 @@ const char * const IDE_REVISION_STR = \"\";
#ifdef IDE_SETTINGSVARIANT
const char * const IDE_SETTINGSVARIANT_STR = STRINGIFY(IDE_SETTINGSVARIANT);
#else
-const char * const IDE_SETTINGSVARIANT_STR = \"Nokia\";
+const char * const IDE_SETTINGSVARIANT_STR = \"QtProject\";
#endif
+#ifdef IDE_COPY_SETTINGS_FROM_VARIANT
+const char * const IDE_COPY_SETTINGS_FROM_VARIANT_STR = STRINGIFY(IDE_COPY_SETTINGS_FROM_VARIANT);
+#else
+const char * const IDE_COPY_SETTINGS_FROM_VARIANT_STR = \"Nokia\";
+#endif
+
+
#undef IDE_VERSION
#undef IDE_VERSION_STR
#undef STRINGIFY
diff --git a/src/app/main.cpp b/src/app/main.cpp
index e9db0a152f..20e6846558 100644
--- a/src/app/main.cpp
+++ b/src/app/main.cpp
@@ -160,6 +160,33 @@ static inline int askMsgSendFailed()
QMessageBox::Retry);
}
+// taken from utils/fileutils.cpp. We can not use utils here since that depends app_version.h.
+static bool copyRecursively(const QString &srcFilePath,
+ const QString &tgtFilePath)
+{
+ QFileInfo srcFileInfo(srcFilePath);
+ if (srcFileInfo.isDir()) {
+ QDir targetDir(tgtFilePath);
+ targetDir.cdUp();
+ if (!targetDir.mkdir(QFileInfo(tgtFilePath).fileName()))
+ return false;
+ QDir sourceDir(srcFilePath);
+ QStringList fileNames = sourceDir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot | QDir::Hidden | QDir::System);
+ foreach (const QString &fileName, fileNames) {
+ const QString newSrcFilePath
+ = srcFilePath + QLatin1Char('/') + fileName;
+ const QString newTgtFilePath
+ = tgtFilePath + QLatin1Char('/') + fileName;
+ if (!copyRecursively(newSrcFilePath, newTgtFilePath))
+ return false;
+ }
+ } else {
+ if (!QFile::copy(srcFilePath, tgtFilePath))
+ return false;
+ }
+ return true;
+}
+
static inline QStringList getPluginPaths()
{
QStringList rc;
@@ -200,6 +227,55 @@ static inline QStringList getPluginPaths()
return rc;
}
+static QSettings *createUserSettings()
+{
+ return new QSettings(QSettings::IniFormat, QSettings::UserScope,
+ QLatin1String(Core::Constants::IDE_SETTINGSVARIANT_STR),
+ QLatin1String("QtCreator"));
+}
+
+static inline QSettings *userSettings()
+{
+ QSettings *settings = createUserSettings();
+ const QString fromVariant = QLatin1String(Core::Constants::IDE_COPY_SETTINGS_FROM_VARIANT_STR);
+ if (fromVariant.isEmpty())
+ return settings;
+
+ // Copy old settings to new ones:
+ QFileInfo pathFi = QFileInfo(settings->fileName());
+ if (pathFi.exists()) // already copied.
+ return settings;
+
+ QDir destDir = pathFi.absolutePath();
+ if (!destDir.exists())
+ destDir.mkpath(pathFi.absolutePath());
+
+ QDir srcDir = destDir;
+ srcDir.cdUp();
+ if (!srcDir.cd(fromVariant))
+ return settings;
+
+ if (srcDir == destDir) // Nothing to copy and no settings yet
+ return settings;
+
+ QStringList entries = srcDir.entryList();
+ foreach (const QString &file, entries) {
+ const QString lowerFile = file.toLower();
+ if (lowerFile.startsWith(QLatin1String("profiles.xml"))
+ || lowerFile.startsWith(QLatin1String("toolchains.xml"))
+ || lowerFile.startsWith(QLatin1String("qtversion.xml"))
+ || lowerFile.startsWith(QLatin1String("devices.xml"))
+ || lowerFile.startsWith(QLatin1String("qtcreator.")))
+ QFile::copy(srcDir.absoluteFilePath(file), destDir.absoluteFilePath(file));
+ if (file == QLatin1String("qtcreator"))
+ copyRecursively(srcDir.absoluteFilePath(file), destDir.absoluteFilePath(file));
+ }
+
+ // Make sure to use the copied settings:
+ delete settings;
+ return createUserSettings();
+}
+
#ifdef Q_OS_MAC
# define SHARE_PATH "/../Resources"
#else
@@ -255,9 +331,8 @@ int main(int argc, char **argv)
QCoreApplication::applicationDirPath() + QLatin1String(SHARE_PATH));
QSettings::setDefaultFormat(QSettings::IniFormat);
// plugin manager takes control of this settings object
- QSettings *settings = new QSettings(QSettings::IniFormat, QSettings::UserScope,
- QLatin1String(Core::Constants::IDE_SETTINGSVARIANT_STR),
- QLatin1String("QtCreator"));
+ QSettings *settings = userSettings();
+
QSettings *globalSettings = new QSettings(QSettings::IniFormat, QSettings::SystemScope,
QLatin1String(Core::Constants::IDE_SETTINGSVARIANT_STR),
QLatin1String("QtCreator"));