aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2021-12-10 09:05:17 +0100
committerEike Ziller <eike.ziller@qt.io>2021-12-13 09:11:53 +0000
commitf03f71279109b9c132bf52e53acdcbf0f47fc6af (patch)
treed3296d6dd78a68e2c6f4aeb7cbd6ce7b67d87a9c
parent85b1d166eb35fbf523b145d44f88d3eda0a0559b (diff)
Request restart after changing file system case sensitivity
And don't apply the changed setting until restart by just writing the new value to the settings directly, which is then read at the next startup. Avoids issues where file paths are cached or used as key in a hash. Fixes: QTCREATORBUG-25005 Change-Id: I30e4d75455124af67ba9ee1d9e8ed31924016d0d Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
-rw-r--r--src/plugins/coreplugin/editormanager/editormanager.cpp61
-rw-r--r--src/plugins/coreplugin/editormanager/editormanager_p.h8
-rw-r--r--src/plugins/coreplugin/systemsettings.cpp29
3 files changed, 61 insertions, 37 deletions
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index 2374db934d..8366c179f1 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -1234,11 +1234,6 @@ void EditorManagerPrivate::saveSettings()
qsettings->setValueWithDefault(maxRecentFilesKey,
d->m_settings.maxRecentFiles,
def.maxRecentFiles);
-
- qsettings->setValueWithDefault(fileSystemCaseSensitivityKey,
- int(HostOsInfo::fileNameCaseSensitivity()),
- int(OsSpecificAspects::fileNameCaseSensitivity(
- HostOsInfo::hostOs())));
qsettings->setValueWithDefault(preferredEditorFactoriesKey,
toMap(userPreferredEditorFactories()));
}
@@ -1256,26 +1251,14 @@ void EditorManagerPrivate::readSettings()
if (maxRecentFiles > 0)
d->m_settings.maxRecentFiles = maxRecentFiles;
- if (qs->contains(fileSystemCaseSensitivityKey)) {
- Qt::CaseSensitivity defaultSensitivity
- = OsSpecificAspects::fileNameCaseSensitivity(HostOsInfo::hostOs());
- bool ok = false;
- Qt::CaseSensitivity sensitivity = defaultSensitivity;
- int sensitivitySetting = qs->value(fileSystemCaseSensitivityKey).toInt(&ok);
- if (ok) {
- switch (Qt::CaseSensitivity(sensitivitySetting)) {
- case Qt::CaseSensitive:
- sensitivity = Qt::CaseSensitive;
- break;
- case Qt::CaseInsensitive:
- sensitivity = Qt::CaseInsensitive;
- }
- }
- if (sensitivity == defaultSensitivity)
- HostOsInfo::unsetOverrideFileNameCaseSensitivity();
- else
- HostOsInfo::setOverrideFileNameCaseSensitivity(sensitivity);
- }
+ const Qt::CaseSensitivity defaultSensitivity = OsSpecificAspects::fileNameCaseSensitivity(
+ HostOsInfo::hostOs());
+ const Qt::CaseSensitivity sensitivity = readFileSystemSensitivity(qs);
+ if (sensitivity == defaultSensitivity)
+ HostOsInfo::unsetOverrideFileNameCaseSensitivity();
+ else
+ HostOsInfo::setOverrideFileNameCaseSensitivity(sensitivity);
+
const QHash<Utils::MimeType, IEditorFactory *> preferredEditorFactories = fromMap(
qs->value(preferredEditorFactoriesKey).toMap());
setUserPreferredEditorFactories(preferredEditorFactories);
@@ -1302,6 +1285,34 @@ void EditorManagerPrivate::readSettings()
updateAutoSave();
}
+Qt::CaseSensitivity EditorManagerPrivate::readFileSystemSensitivity(QSettings *settings)
+{
+ const Qt::CaseSensitivity defaultSensitivity = OsSpecificAspects::fileNameCaseSensitivity(
+ HostOsInfo::hostOs());
+ if (!settings->contains(fileSystemCaseSensitivityKey))
+ return defaultSensitivity;
+ bool ok = false;
+ const int sensitivitySetting = settings->value(fileSystemCaseSensitivityKey).toInt(&ok);
+ if (ok) {
+ switch (Qt::CaseSensitivity(sensitivitySetting)) {
+ case Qt::CaseSensitive:
+ return Qt::CaseSensitive;
+ case Qt::CaseInsensitive:
+ return Qt::CaseInsensitive;
+ }
+ }
+ return defaultSensitivity;
+}
+
+void EditorManagerPrivate::writeFileSystemSensitivity(Utils::QtcSettings *settings,
+ Qt::CaseSensitivity sensitivity)
+{
+ settings->setValueWithDefault(fileSystemCaseSensitivityKey,
+ int(sensitivity),
+ int(OsSpecificAspects::fileNameCaseSensitivity(
+ HostOsInfo::hostOs())));
+}
+
void EditorManagerPrivate::setAutoSaveEnabled(bool enabled)
{
d->m_settings.autoSaveEnabled = enabled;
diff --git a/src/plugins/coreplugin/editormanager/editormanager_p.h b/src/plugins/coreplugin/editormanager/editormanager_p.h
index a8cc29f204..e42a61abb3 100644
--- a/src/plugins/coreplugin/editormanager/editormanager_p.h
+++ b/src/plugins/coreplugin/editormanager/editormanager_p.h
@@ -43,9 +43,14 @@
QT_BEGIN_NAMESPACE
class QAction;
+class QSettings;
class QTimer;
QT_END_NAMESPACE
+namespace Utils {
+class QtcSettings;
+}
+
namespace Core {
class EditorManager;
@@ -112,6 +117,9 @@ public:
static void saveSettings();
static void readSettings();
+ static Qt::CaseSensitivity readFileSystemSensitivity(QSettings *settings);
+ static void writeFileSystemSensitivity(Utils::QtcSettings *settings,
+ Qt::CaseSensitivity sensitivity);
static void setAutoSaveEnabled(bool enabled);
static bool autoSaveEnabled();
static void setAutoSaveInterval(int interval);
diff --git a/src/plugins/coreplugin/systemsettings.cpp b/src/plugins/coreplugin/systemsettings.cpp
index 844e1cc695..d872db4e3f 100644
--- a/src/plugins/coreplugin/systemsettings.cpp
+++ b/src/plugins/coreplugin/systemsettings.cpp
@@ -210,7 +210,9 @@ public:
m_ui.fileSystemCaseSensitivityChooser->addItem(tr("Case Insensitive"),
Qt::CaseInsensitive);
}
- if (HostOsInfo::fileNameCaseSensitivity() == Qt::CaseSensitive)
+ const Qt::CaseSensitivity sensitivity = EditorManagerPrivate::readFileSystemSensitivity(
+ ICore::settings());
+ if (sensitivity == Qt::CaseSensitive)
m_ui.fileSystemCaseSensitivityChooser->setCurrentIndex(0);
else
m_ui.fileSystemCaseSensitivityChooser->setCurrentIndex(1);
@@ -258,15 +260,15 @@ private:
void SystemSettingsWidget::apply()
{
+ QtcSettings *settings = ICore::settings();
EditorManager::setReloadSetting(IDocument::ReloadSetting(m_ui.reloadBehavior->currentIndex()));
if (HostOsInfo::isAnyUnixHost()) {
- ConsoleProcess::setTerminalEmulator(ICore::settings(),
+ ConsoleProcess::setTerminalEmulator(settings,
{m_ui.terminalComboBox->lineEdit()->text(),
m_ui.terminalOpenArgs->text(),
m_ui.terminalExecuteArgs->text()});
if (!HostOsInfo::isMacHost()) {
- UnixUtils::setFileBrowser(ICore::settings(),
- m_ui.externalFileBrowserEdit->text());
+ UnixUtils::setFileBrowser(settings, m_ui.externalFileBrowserEdit->text());
}
}
PatchTool::setPatchCommand(m_ui.patchChooser->filePath());
@@ -289,14 +291,17 @@ void SystemSettingsWidget::apply()
m_ui.askBeforeExitCheckBox->isChecked());
if (HostOsInfo::isMacHost()) {
- Qt::CaseSensitivity defaultSensitivity
- = OsSpecificAspects::fileNameCaseSensitivity(HostOsInfo::hostOs());
- Qt::CaseSensitivity selectedSensitivity = Qt::CaseSensitivity(
- m_ui.fileSystemCaseSensitivityChooser->currentData().toInt());
- if (defaultSensitivity == selectedSensitivity)
- HostOsInfo::unsetOverrideFileNameCaseSensitivity();
- else
- HostOsInfo::setOverrideFileNameCaseSensitivity(selectedSensitivity);
+ const Qt::CaseSensitivity sensitivity = EditorManagerPrivate::readFileSystemSensitivity(
+ settings);
+ const Qt::CaseSensitivity selectedSensitivity = Qt::CaseSensitivity(
+ m_ui.fileSystemCaseSensitivityChooser->currentData().toInt());
+ if (selectedSensitivity != sensitivity) {
+ EditorManagerPrivate::writeFileSystemSensitivity(settings, selectedSensitivity);
+ RestartDialog dialog(
+ ICore::dialogParent(),
+ tr("The file system case sensitivity change will take effect after restart."));
+ dialog.exec();
+ }
}
CorePlugin::setEnvironmentChanges(m_environmentChanges);