aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2023-08-01 12:16:14 +0200
committerEike Ziller <eike.ziller@qt.io>2023-08-01 11:43:31 +0000
commitdd04e9bc0b7c358127e59ea06d14bdfaec0d2d5e (patch)
tree094a7ffd785a84e38572679dbf22ea72be66def0
parent855d04cf7da52e964ae1fe10936a930a08cc23a4 (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.cpp49
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);
});
}