aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2019-07-08 17:38:28 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2019-07-17 13:59:29 +0000
commitb7a96a9342adfdb65469c0f132af54aaeebfef01 (patch)
tree85982687b43fea2d6bcb5d5b30dcd45ac96c5d8a /src
parent5dd4bb62b138c576b7085c029d82873d8cbd2b31 (diff)
Core: Warn the user if the settings file cannot be read
Do an initial check and if it fails, warn the user that they cannot expect subsequent operations to succeed. Task-number: QTCREATORBUG-18294 Change-Id: I3bb323cf7b7ed99f97258da94cfd7669f8520717 Reviewed-by: Eike Ziller <eike.ziller@qt.io> Reviewed-by: André Hartmann <aha_1980@gmx.de>
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;