From f03f71279109b9c132bf52e53acdcbf0f47fc6af Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 10 Dec 2021 09:05:17 +0100 Subject: 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 --- .../coreplugin/editormanager/editormanager.cpp | 61 +++++++++++++--------- .../coreplugin/editormanager/editormanager_p.h | 8 +++ src/plugins/coreplugin/systemsettings.cpp | 29 +++++----- 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 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); -- cgit v1.2.1