aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/coreplugin/coreplugin.cpp43
-rw-r--r--src/plugins/coreplugin/coreplugin.h1
2 files changed, 44 insertions, 0 deletions
diff --git a/src/plugins/coreplugin/coreplugin.cpp b/src/plugins/coreplugin/coreplugin.cpp
index 95398acc29..9145fabf37 100644
--- a/src/plugins/coreplugin/coreplugin.cpp
+++ b/src/plugins/coreplugin/coreplugin.cpp
@@ -27,6 +27,7 @@
#include "designmode.h"
#include "editmode.h"
#include "helpmanager.h"
+#include "icore.h"
#include "idocument.h"
#include "infobar.h"
#include "iwizardfactory.h"
@@ -63,6 +64,8 @@
#include <QDebug>
#include <QDir>
#include <QMenu>
+#include <QMessageBox>
+#include <QSettings>
#include <QUuid>
#include <cstdlib>
@@ -232,6 +235,7 @@ void CorePlugin::extensionsInitialized()
errorOverview->setModal(true);
errorOverview->show();
}
+ checkSettings();
}
bool CorePlugin::delayedInitialize()
@@ -295,6 +299,45 @@ void CorePlugin::addToPathChooserContextMenu(Utils::PathChooser *pathChooser, QM
menu->insertSeparator(firstAction);
}
+void CorePlugin::checkSettings()
+{
+ const auto showMsgBox = [this](const QString &msg, QMessageBox::Icon icon) {
+ connect(ICore::instance(), &ICore::coreOpened, this, [msg, icon]() {
+ QMessageBox msgBox(ICore::dialogParent());
+ msgBox.setWindowTitle(tr("Settings File Error"));
+ msgBox.setText(msg);
+ msgBox.setIcon(icon);
+ msgBox.exec();
+ }, Qt::QueuedConnection);
+ };
+ const QSettings * const userSettings = ICore::settings();
+ QString errorDetails;
+ switch (userSettings->status()) {
+ case QSettings::NoError: {
+ const QFileInfo fi(userSettings->fileName());
+ if (fi.exists() && !fi.isWritable()) {
+ const QString errorMsg = tr("The settings file \"%1\" is not writable.\n"
+ "You will not be able to store any %2 settings.")
+ .arg(QDir::toNativeSeparators(userSettings->fileName()),
+ QLatin1String(Core::Constants::IDE_DISPLAY_NAME));
+ showMsgBox(errorMsg, QMessageBox::Warning);
+ }
+ return;
+ }
+ case QSettings::AccessError:
+ errorDetails = tr("The file is not readable.");
+ break;
+ case QSettings::FormatError:
+ errorDetails = tr("The file is invalid.");
+ break;
+ }
+ const QString errorMsg = tr("Error reading settings file \"%1\": %2\n"
+ "You will likely experience further problems using this instance of %3.")
+ .arg(QDir::toNativeSeparators(userSettings->fileName()), errorDetails,
+ QLatin1String(Core::Constants::IDE_DISPLAY_NAME));
+ showMsgBox(errorMsg, QMessageBox::Critical);
+}
+
ExtensionSystem::IPlugin::ShutdownFlag CorePlugin::aboutToShutdown()
{
Find::aboutToShutdown();
diff --git a/src/plugins/coreplugin/coreplugin.h b/src/plugins/coreplugin/coreplugin.h
index 23494cbabd..fee1458eab 100644
--- a/src/plugins/coreplugin/coreplugin.h
+++ b/src/plugins/coreplugin/coreplugin.h
@@ -80,6 +80,7 @@ private slots:
private:
static void addToPathChooserContextMenu(Utils::PathChooser *pathChooser, QMenu *menu);
+ void checkSettings();
MainWindow *m_mainWindow = nullptr;
EditMode *m_editMode = nullptr;