Skip to content

Commit

Permalink
x11/plasma5-plasma-workspace: Pull in a proper fix for the locale set…
Browse files Browse the repository at this point in the history
…tings problem.

PR:		270424
Sponsored by:	Serenity Cybersecurity, LLC
  • Loading branch information
arrowd committed Jun 26, 2023
1 parent 6975ae9 commit be631d4
Show file tree
Hide file tree
Showing 4 changed files with 456 additions and 13 deletions.
1 change: 1 addition & 0 deletions x11/plasma5-plasma-workspace/Makefile
@@ -1,5 +1,6 @@
PORTNAME= plasma-workspace
DISTVERSION= ${KDE_PLASMA_VERSION}
PORTREVISION= 1
CATEGORIES= x11 kde kde-plasma

MAINTAINER= kde@FreeBSD.org
Expand Down
312 changes: 312 additions & 0 deletions x11/plasma5-plasma-workspace/files/patch-kcmregionandlanguage
@@ -0,0 +1,312 @@
https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/3010

From 27e0302155b788fe4e7440bf0db09de9ae596ee5 Mon Sep 17 00:00:00 2001
From: Joshua Goins <josh@redstrate.com>
Date: Mon, 22 May 2023 16:13:49 -0400
Subject: [PATCH 1/6] kcms/region_language: Read the LANGUAGE environment
variable for the default language value

This has the same meaning in the kcfg, so we might as well read it
from the environment variable like we're already doing with LANG.

(cherry picked from commit 2e2f6b1469898383b6840d2c8e4c3733b13156d4)
---
kcms/region_language/regionandlangsettingsbase.kcfg | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/kcms/region_language/regionandlangsettingsbase.kcfg ./kcms/region_language/regionandlangsettingsbase.kcfg
index 3a4867ba49..17ac78291a 100644
--- a/kcms/region_language/regionandlangsettingsbase.kcfg
+++ ./kcms/region_language/regionandlangsettingsbase.kcfg
@@ -44,6 +44,10 @@
</group>
<group name="Translations">
<entry key="LANGUAGE" name="language" type="String">
+ <code>
+ QString language = QString::fromLocal8Bit(qgetenv("LANGUAGE"));
+ </code>
+ <default code="true">language</default>
</entry>
</group>
</kcfg>
--
GitLab


From 95920c1e67c660eb8db4efa059c8b062ad297b8b Mon Sep 17 00:00:00 2001
From: Joshua Goins <josh@redstrate.com>
Date: Mon, 22 May 2023 16:18:11 -0400
Subject: [PATCH 2/6] kcms/region_language: Simplify the language settings read

Now that we load both LANG and LANGUAGE from the environment variable,
there's no reason to handle it on the C++ side because the branch should
never get hit. Still detect whether it's an implicit language
though.

(cherry picked from commit e0171490533e95618f5fd5455041aa78af4af626)
---
kcms/region_language/languagelistmodel.cpp | 33 ++++------------------
kcms/region_language/languagelistmodel.h | 2 --
2 files changed, 6 insertions(+), 29 deletions(-)

diff --git a/kcms/region_language/languagelistmodel.cpp ./kcms/region_language/languagelistmodel.cpp
index a9e3ca00a1..1f11522d0a 100644
--- a/kcms/region_language/languagelistmodel.cpp
+++ ./kcms/region_language/languagelistmodel.cpp
@@ -205,30 +205,19 @@ void SelectedLanguageModel::setRegionAndLangSettings(RegionAndLangSettings *sett
m_kcm = kcm;

beginResetModel();
- if (m_settings->language().isEmpty() && m_settings->isDefaultSetting(SettingType::Lang)) {
+ if (m_settings->language().isEmpty()) {
// no language but have lang
m_selectedLanguages = {m_settings->lang()};
- m_selectedLanguages.first().remove(QStringLiteral(".UTF-8"));
- } else if (!m_settings->language().isEmpty()) {
+ } else {
// have language, ignore lang
m_selectedLanguages = m_settings->language().split(QLatin1Char(':'));
- } else {
- // have nothing, figure out from env
- QString lang = envLang();
- QString language = envLanguage();
- if (!language.isEmpty()) {
- QStringList langlist = language.split(QLatin1Char(':'));
- for (QString &lang : langlist) {
- lang = lang.split(QLatin1Char('.'))[0];
- }
- m_selectedLanguages = langlist;
- } else if (!lang.isEmpty()) {
- lang.remove(QStringLiteral(".UTF-8"));
- m_selectedLanguages = {lang};
- }
+ }
+
+ if (m_settings->isDefaultSetting(SettingType::Lang)) {
m_hasImplicitLang = true;
Q_EMIT hasImplicitLangChanged();
}
+
endResetModel();

// check for invalid lang
@@ -404,13 +393,3 @@ const QString &SelectedLanguageModel::unsupportedLanguage() const
{
return m_unsupportedLanguage;
}
-
-QString SelectedLanguageModel::envLang() const
-{
- return qEnvironmentVariable("LANG");
-}
-
-QString SelectedLanguageModel::envLanguage() const
-{
- return qEnvironmentVariable("LANGUAGE");
-}
diff --git a/kcms/region_language/languagelistmodel.h ./kcms/region_language/languagelistmodel.h
index 6c0866a55e..b3c6020dd4 100644
--- a/kcms/region_language/languagelistmodel.h
+++ ./kcms/region_language/languagelistmodel.h
@@ -97,8 +97,6 @@ Q_SIGNALS:
void unsupportedLanguageChanged();

private:
- QString envLang() const;
- QString envLanguage() const;
void saveLanguages();
RegionAndLangSettings *m_settings = nullptr;
QList<QString> m_selectedLanguages;
--
GitLab


From af41a355d76d2a801796958219be79a004e38e48 Mon Sep 17 00:00:00 2001
From: Joshua Goins <josh@redstrate.com>
Date: Fri, 26 May 2023 13:36:43 -0400
Subject: [PATCH 3/6] kcms/region_language: Check if the language setting is
default as well

(cherry picked from commit 514cefdbb6adaf9b8cab94963b37b27837d0a2c8)
---
kcms/region_language/languagelistmodel.cpp | 2 +-
kcms/region_language/localelistmodel.cpp | 1 +
kcms/region_language/regionandlangsettings.cpp | 3 +++
kcms/region_language/settingtype.h | 2 +-
4 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/kcms/region_language/languagelistmodel.cpp ./kcms/region_language/languagelistmodel.cpp
index 1f11522d0a..434ec98869 100644
--- a/kcms/region_language/languagelistmodel.cpp
+++ ./kcms/region_language/languagelistmodel.cpp
@@ -213,7 +213,7 @@ void SelectedLanguageModel::setRegionAndLangSettings(RegionAndLangSettings *sett
m_selectedLanguages = m_settings->language().split(QLatin1Char(':'));
}

- if (m_settings->isDefaultSetting(SettingType::Lang)) {
+ if (m_settings->isDefaultSetting(SettingType::Lang) && m_settings->isDefaultSetting(SettingType::Language)) {
m_hasImplicitLang = true;
Q_EMIT hasImplicitLangChanged();
}
diff --git a/kcms/region_language/localelistmodel.cpp ./kcms/region_language/localelistmodel.cpp
index f3ea2af32c..fedfafb6cd 100644
--- a/kcms/region_language/localelistmodel.cpp
+++ ./kcms/region_language/localelistmodel.cpp
@@ -92,6 +92,7 @@ QVariant LocaleListModel::data(const QModelIndex &index, int role) const
case Example: {
switch (m_configType) {
case Lang:
+ case Language:
return {};
case Numeric:
return Utility::numericExample(data.locale);
diff --git a/kcms/region_language/regionandlangsettings.cpp ./kcms/region_language/regionandlangsettings.cpp
index 9146e1d1c9..53343b45c2 100644
--- a/kcms/region_language/regionandlangsettings.cpp
+++ ./kcms/region_language/regionandlangsettings.cpp
@@ -16,6 +16,8 @@ bool RegionAndLangSettings::isDefaultSetting(SettingType setting) const
switch (setting) {
case SettingType::Lang:
return lang() == defaultLangValue();
+ case SettingType::Language:
+ return language() == defaultLanguageValue();
case SettingType::Numeric:
return numeric() == defaultNumericValue();
case SettingType::Time:
@@ -73,6 +75,7 @@ QString RegionAndLangSettings::LC_LocaleWithLang(SettingType setting) const
case SettingType::PhoneNumbers:
return phoneNumbers();
case SettingType::Lang:
+ case SettingType::Language:
Q_UNREACHABLE();
}

diff --git a/kcms/region_language/settingtype.h ./kcms/region_language/settingtype.h
index 07ce4cffc2..4865f341c6 100644
--- a/kcms/region_language/settingtype.h
+++ ./kcms/region_language/settingtype.h
@@ -12,6 +12,6 @@
namespace KCM_RegionAndLang
{
Q_NAMESPACE_EXPORT()
-enum SettingType { Lang, Numeric, Time, Currency, Measurement, PaperSize, Address, NameStyle, PhoneNumbers };
+enum SettingType { Lang, Numeric, Time, Currency, Measurement, PaperSize, Address, NameStyle, PhoneNumbers, Language };
Q_ENUM_NS(SettingType)
} // namespace KCM_RegionAndLang
--
GitLab


From c51b59a77e4c36161cf2d74e5ce26af83b44e335 Mon Sep 17 00:00:00 2001
From: Joshua Goins <josh@redstrate.com>
Date: Fri, 26 May 2023 14:17:30 -0400
Subject: [PATCH 4/6] kcms/region_language: Chop off the UTF-8 codepoint again

(cherry picked from commit 54af86fd470d1f37bea00867959f8f8f0b7cdcf7)
---
kcms/region_language/languagelistmodel.cpp | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/kcms/region_language/languagelistmodel.cpp ./kcms/region_language/languagelistmodel.cpp
index 434ec98869..6798286f2d 100644
--- a/kcms/region_language/languagelistmodel.cpp
+++ ./kcms/region_language/languagelistmodel.cpp
@@ -213,6 +213,11 @@ void SelectedLanguageModel::setRegionAndLangSettings(RegionAndLangSettings *sett
m_selectedLanguages = m_settings->language().split(QLatin1Char(':'));
}

+ // Chop off the UTF-8 codepoint
+ for (auto &language : m_selectedLanguages) {
+ language.remove(QStringLiteral(".UTF-8"));
+ }
+
if (m_settings->isDefaultSetting(SettingType::Lang) && m_settings->isDefaultSetting(SettingType::Language)) {
m_hasImplicitLang = true;
Q_EMIT hasImplicitLangChanged();
--
GitLab


From a5915bc59975080acb5e6b867ebb061a0b9adf3b Mon Sep 17 00:00:00 2001
From: Joshua Goins <josh@redstrate.com>
Date: Fri, 26 May 2023 14:37:11 -0400
Subject: [PATCH 5/6] kcms/region_language: Improve isSupportedLanguage
detection

This prevents it considering languages with a territory attached as
non-supported (like fr_FR) and checks it without a territory as a
fallback.

(cherry picked from commit 8d1f7d385cda8afcfc24ae61666f5f7ba1c869c7)
---
kcms/region_language/languagelistmodel.cpp | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/kcms/region_language/languagelistmodel.cpp ./kcms/region_language/languagelistmodel.cpp
index 6798286f2d..d9846226da 100644
--- a/kcms/region_language/languagelistmodel.cpp
+++ ./kcms/region_language/languagelistmodel.cpp
@@ -95,7 +95,19 @@ QString LanguageListModel::languageCodeToName(const QString &languageCode)

bool LanguageListModel::isSupportedLanguage(const QString &language) const
{
- return m_availableLanguages.contains(language);
+ // If the available language list contains the full language string outright, e.g. en_US
+ if (m_availableLanguages.contains(language)) {
+ return true;
+ }
+
+ // If the language string passed has a territory attached (like fr_FR) then chop it off,
+ // and try searching for just the language.
+ if (language.contains('_')) {
+ const QString languageName{language.left(language.indexOf('_'))};
+ return m_availableLanguages.contains(languageName);
+ }
+
+ return false;
}

int LanguageListModel::currentIndex() const
--
GitLab


From 0a00ee7639eb17a0159efba01de6e6cec34911f3 Mon Sep 17 00:00:00 2001
From: Joshua Goins <josh@redstrate.com>
Date: Wed, 7 Jun 2023 20:42:33 -0400
Subject: [PATCH 6/6] kcms/region_language: Read from $LANGUAGE in options
model

(cherry picked from commit b5c675324c33c8a6f5e5817fc95217994f2188be)
---
kcms/region_language/optionsmodel.cpp | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/kcms/region_language/optionsmodel.cpp ./kcms/region_language/optionsmodel.cpp
index 339577332a..0c3bec97ea 100644
--- a/kcms/region_language/optionsmodel.cpp
+++ ./kcms/region_language/optionsmodel.cpp
@@ -112,10 +112,19 @@ QVariant OptionsModel::data(const QModelIndex &index, int role) const
if (m_settings->defaultLangValue().isEmpty() && m_settings->isDefaultSetting(SettingType::Lang)) {
// no Lang configured, no $LANG in env
return i18nc("@info:title, the current setting is system default", "System Default");
- } else if (!m_settings->lang().isEmpty()) {
+ } else if (!m_settings->lang().isEmpty() && m_settings->lang() != m_settings->defaultLangValue()) {
// Lang configured and not empty
return getNativeName(m_settings->lang());
} else {
+ // Lang configured but empty, try to read from $LANGUAGE first.
+ if (const QString languages = m_settings->defaultLanguageValue(); !languages.isEmpty()) {
+ // If the first language is invalid, just fall through to $LANG
+ const QStringList languageList = languages.split(QLatin1Char(':'));
+ if (const QString firstLanguage = getNativeName(languageList[0]); !firstLanguage.isEmpty()) {
+ return firstLanguage;
+ }
+ }
+
// Lang configured but empty, try to read from $LANG, shouldn't happen on a valid config file
return getNativeName(m_settings->defaultLangValue());
}
--
GitLab

0 comments on commit be631d4

Please sign in to comment.