diff options
author | Eike Ziller <eike.ziller@qt.io> | 2023-08-01 12:16:14 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2023-08-01 11:43:31 +0000 |
commit | dd04e9bc0b7c358127e59ea06d14bdfaec0d2d5e (patch) | |
tree | 094a7ffd785a84e38572679dbf22ea72be66def0 | |
parent | 855d04cf7da52e964ae1fe10936a930a08cc23a4 (diff) |
EnvironmentKitAspect: Distangle VSLANG related code
Avoid funny side effect in "currentEnvironment".
Explicitly update the `Force UTF-8 MSVC compiler output` check box on
initialization, and when the user edited the environment.
Fixes: QTCREATORBUG-29382
Fixes: QTCREATORBUG-29425
Change-Id: I2b2615fa392ef0e4ee087d86207302b149a10768
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r-- | src/plugins/projectexplorer/kitinformation.cpp | 49 |
1 files changed, 29 insertions, 20 deletions
diff --git a/src/plugins/projectexplorer/kitinformation.cpp b/src/plugins/projectexplorer/kitinformation.cpp index ea900407bf..e28264d72b 100644 --- a/src/plugins/projectexplorer/kitinformation.cpp +++ b/src/plugins/projectexplorer/kitinformation.cpp @@ -1377,6 +1377,17 @@ void BuildDeviceKitAspect::devicesChanged() // -------------------------------------------------------------------------- // EnvironmentKitAspect: // -------------------------------------------------------------------------- +static EnvironmentItem forceMSVCEnglishItem() +{ + static EnvironmentItem item("VSLANG", "1033"); + return item; +} + +static bool enforcesMSVCEnglish(const EnvironmentItems &changes) +{ + return changes.contains(forceMSVCEnglishItem()); +} + namespace Internal { class EnvironmentKitAspectWidget final : public KitAspectWidget { @@ -1411,7 +1422,7 @@ private: void refresh() override { - const EnvironmentItems changes = currentEnvironment(); + const EnvironmentItems changes = envWithoutMSVCEnglishEnforcement(); const QString shortSummary = EnvironmentItem::toStringList(changes).join("; "); m_summaryLabel->setText(shortSummary.isEmpty() ? Tr::tr("No changes to apply.") : shortSummary); } @@ -1423,32 +1434,29 @@ private: VariableChooser::addSupportForChildWidgets(w, expander); }; auto changes = EnvironmentDialog::getEnvironmentItems(m_summaryLabel, - currentEnvironment(), + envWithoutMSVCEnglishEnforcement(), QString(), polisher); if (!changes) return; if (HostOsInfo::isWindowsHost()) { - const EnvironmentItem forceMSVCEnglishItem("VSLANG", "1033"); - if (m_vslangCheckbox->isChecked() && changes->indexOf(forceMSVCEnglishItem) < 0) - changes->append(forceMSVCEnglishItem); + // re-add what envWithoutMSVCEnglishEnforcement removed + // or update vslang checkbox if user added it manually + if (m_vslangCheckbox->isChecked() && !enforcesMSVCEnglish(*changes)) + changes->append(forceMSVCEnglishItem()); + else if (enforcesMSVCEnglish(*changes)) + m_vslangCheckbox->setChecked(true); } - EnvironmentKitAspect::setEnvironmentChanges(m_kit, *changes); } - EnvironmentItems currentEnvironment() const + EnvironmentItems envWithoutMSVCEnglishEnforcement() const { EnvironmentItems changes = EnvironmentKitAspect::environmentChanges(m_kit); - if (HostOsInfo::isWindowsHost()) { - const EnvironmentItem forceMSVCEnglishItem("VSLANG", "1033"); - if (changes.indexOf(forceMSVCEnglishItem) >= 0) { - m_vslangCheckbox->setCheckState(Qt::Checked); - changes.removeAll(forceMSVCEnglishItem); - } - } + if (HostOsInfo::isWindowsHost()) + changes.removeAll(forceMSVCEnglishItem()); return sorted(std::move(changes), [](const EnvironmentItem &lhs, const EnvironmentItem &rhs) { return QString::localeAwareCompare(lhs.name, rhs.name) < 0; }); @@ -1461,13 +1469,14 @@ private: m_vslangCheckbox->setToolTip(Tr::tr("Either switches MSVC to English or keeps the language and " "just forces UTF-8 output (may vary depending on the used MSVC " "compiler).")); - connect(m_vslangCheckbox, &QCheckBox::toggled, this, [this](bool checked) { + if (enforcesMSVCEnglish(EnvironmentKitAspect::environmentChanges(m_kit))) + m_vslangCheckbox->setChecked(true); + connect(m_vslangCheckbox, &QCheckBox::clicked, this, [this](bool checked) { EnvironmentItems changes = EnvironmentKitAspect::environmentChanges(m_kit); - const EnvironmentItem forceMSVCEnglishItem("VSLANG", "1033"); - if (!checked && changes.indexOf(forceMSVCEnglishItem) >= 0) - changes.removeAll(forceMSVCEnglishItem); - if (checked && changes.indexOf(forceMSVCEnglishItem) < 0) - changes.append(forceMSVCEnglishItem); + if (!checked && changes.indexOf(forceMSVCEnglishItem()) >= 0) + changes.removeAll(forceMSVCEnglishItem()); + if (checked && changes.indexOf(forceMSVCEnglishItem()) < 0) + changes.append(forceMSVCEnglishItem()); EnvironmentKitAspect::setEnvironmentChanges(m_kit, changes); }); } |