Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
x11/plasma5-plasma-workspace: Restore a patch for kcm_regionandlang.
Sponsored by: Serenity Cybersecurity, LLC
- Loading branch information
Showing
2 changed files
with
323 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,322 @@ | ||
From 6fff5ebf2eb9ec2def4f7b5f0569b48c36061844 Mon Sep 17 00:00:00 2001 | ||
From: Gleb Popov <6yearold@gmail.com> | ||
Date: Fri, 28 Jul 2023 10:59:40 +0300 | ||
Subject: [PATCH 1/2] Rename REGION_LANG_GENERATE_LOCALE to | ||
REGION_LANG_GENERATE_LOCALE_HELPER | ||
|
||
(cherry picked from commit 09d0b42a9) | ||
--- | ||
CMakeLists.txt | 6 +++--- | ||
kcms/region_language/CMakeLists.txt | 2 +- | ||
2 files changed, 4 insertions(+), 4 deletions(-) | ||
|
||
diff --git a/CMakeLists.txt CMakeLists.txt | ||
index afd3bdcf22..54da6be721 100644 | ||
--- a/CMakeLists.txt | ||
+++ CMakeLists.txt | ||
@@ -253,19 +253,19 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") | ||
set(GLIBC_LOCALE TRUE) | ||
endif() | ||
if(UBUNTU_PACKAGEKIT OR GLIBC_LOCALE_GEN) | ||
- set(REGION_LANG_GENERATE_LOCALE TRUE) | ||
+ set(REGION_LANG_GENERATE_LOCALE_HELPER TRUE) | ||
endif() | ||
|
||
option(GLIBC_LOCALE_GENERATED "Systems that don't require locale generation. Such as openSUSE or Fedora" OFF) | ||
if(GLIBC_LOCALE_GENERATED) | ||
set(LOCALE_GENERATED TRUE) | ||
endif() | ||
- if(REGION_LANG_GENERATE_LOCALE AND GLIBC_LOCALE_GENERATED) | ||
+ if(REGION_LANG_GENERATE_LOCALE_HELPER AND GLIBC_LOCALE_GENERATED) | ||
message(FATAL_ERROR "(UBUNTU_PACKAGEKIT || GLIBC_LOCALE_GEN) and GLIBC_LOCALE_GENERATED both enabled") | ||
endif() | ||
|
||
################## Find libraries ################### | ||
- if(REGION_LANG_GENERATE_LOCALE) | ||
+ if(REGION_LANG_GENERATE_LOCALE_HELPER) | ||
find_package(PolkitQt${QT_MAJOR_VERSION}-1) | ||
set_package_properties(PolkitQt${QT_MAJOR_VERSION}-1 | ||
PROPERTIES DESCRIPTION "DBus interface wrapper for Polkit" | ||
diff --git a/kcms/region_language/CMakeLists.txt kcms/region_language/CMakeLists.txt | ||
index d134937b77..56ccec7cba 100644 | ||
--- a/kcms/region_language/CMakeLists.txt | ||
+++ kcms/region_language/CMakeLists.txt | ||
@@ -47,7 +47,7 @@ ecm_qt_declare_logging_category( | ||
) | ||
|
||
################ Build helper and add additional source files ############# | ||
-if(REGION_LANG_GENERATE_LOCALE) | ||
+if(REGION_LANG_GENERATE_LOCALE_HELPER) | ||
add_subdirectory("localegenhelper") | ||
qt_generate_dbus_interface( | ||
${CMAKE_CURRENT_SOURCE_DIR}/localegenhelper/localegenhelper.h | ||
-- | ||
GitLab | ||
|
||
|
||
From 0d53975b637620cc7619a67df3397fd43f710eba Mon Sep 17 00:00:00 2001 | ||
From: Gleb Popov <6yearold@gmail.com> | ||
Date: Mon, 26 Jun 2023 08:46:23 +0300 | ||
Subject: [PATCH 2/2] region_language KCM: Guard glibc-related code with | ||
ifdefs. | ||
|
||
This introduces GLIBC_LOCALE_AUTO and GLIBC_LOCALE_GENERATED to differentiate | ||
between Linux distributions. The GLIBC_LOCALE define is set for both cases. | ||
|
||
The change unbreaks the KCM on FreeBSD. | ||
|
||
Sponsored by: Serenity Cybersecurity, LLC | ||
|
||
(cherry picked from commit e8eabb689f82f99a362b6860915a8269b8e1268c) | ||
--- | ||
CMakeLists.txt | 14 +++++++------- | ||
config-workspace.h.cmake | 8 ++++++-- | ||
kcms/region_language/kcmregionandlang.cpp | 16 ++++++++++++++-- | ||
kcms/region_language/kcmregionandlang.h | 7 +++++++ | ||
kcms/region_language/languagelistmodel.cpp | 6 ++++++ | ||
kcms/region_language/localegenerator.cpp | 6 +++--- | ||
6 files changed, 43 insertions(+), 14 deletions(-) | ||
|
||
diff --git a/CMakeLists.txt CMakeLists.txt | ||
index 54da6be721..af371f8455 100644 | ||
--- a/CMakeLists.txt | ||
+++ CMakeLists.txt | ||
@@ -209,7 +209,7 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") | ||
# | ||
# For Glibc systems that come with pre-generated locales, such as Fedora and openSUSE | ||
# a note to let user install fonts themselves if required is displayed | ||
- # You should enable GLIBC_LOCALE_GENERATED option | ||
+ # You should enable GLIBC_LOCALE_PREGENERATED option | ||
# | ||
# For non-glibc systems such as VoidLinux and *BSD | ||
# A warning of configure locale manually is displayed (although the relevant ENVs are set by Plasma) | ||
@@ -250,18 +250,18 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") | ||
message(FATAL_ERROR "UBUNTU_PACKAGEKIT and GLIBC_LOCALE_GEN both enabled, only UBUNTU_PACKEGKIT will be used") | ||
endif() | ||
if(GLIBC_LOCALE_GEN) | ||
- set(GLIBC_LOCALE TRUE) | ||
+ set(GLIBC_LOCALE_AUTO TRUE) | ||
endif() | ||
if(UBUNTU_PACKAGEKIT OR GLIBC_LOCALE_GEN) | ||
set(REGION_LANG_GENERATE_LOCALE_HELPER TRUE) | ||
endif() | ||
|
||
- option(GLIBC_LOCALE_GENERATED "Systems that don't require locale generation. Such as openSUSE or Fedora" OFF) | ||
- if(GLIBC_LOCALE_GENERATED) | ||
- set(LOCALE_GENERATED TRUE) | ||
+ option(GLIBC_LOCALE_PREGENERATED "Systems that don't require locale generation. Such as openSUSE or Fedora" OFF) | ||
+ if(GLIBC_LOCALE_PREGENERATED) | ||
+ set(GLIBC_LOCALE_GENERATED TRUE) | ||
endif() | ||
- if(REGION_LANG_GENERATE_LOCALE_HELPER AND GLIBC_LOCALE_GENERATED) | ||
- message(FATAL_ERROR "(UBUNTU_PACKAGEKIT || GLIBC_LOCALE_GEN) and GLIBC_LOCALE_GENERATED both enabled") | ||
+ if(REGION_LANG_GENERATE_LOCALE_HELPER AND GLIBC_LOCALE_PREGENERATED) | ||
+ message(FATAL_ERROR "(UBUNTU_PACKAGEKIT || GLIBC_LOCALE_GEN) and GLIBC_LOCALE_PREGENERATED both enabled") | ||
endif() | ||
|
||
################## Find libraries ################### | ||
diff --git a/config-workspace.h.cmake config-workspace.h.cmake | ||
index d7cf5fe7ed..b696cd8fa5 100644 | ||
--- a/config-workspace.h.cmake | ||
+++ config-workspace.h.cmake | ||
@@ -12,5 +12,9 @@ | ||
#define WORKSPACE_VERSION_STRING "${PROJECT_VERSION}" | ||
|
||
#cmakedefine OS_UBUNTU 1 | ||
-#cmakedefine GLIBC_LOCALE 1 | ||
-#cmakedefine LOCALE_GENERATED 1 | ||
+#cmakedefine01 GLIBC_LOCALE_AUTO | ||
+#cmakedefine01 GLIBC_LOCALE_GENERATED | ||
+ | ||
+#if defined(GLIBC_LOCALE_AUTO) || defined(GLIBC_LOCALE_GENERATED) | ||
+#define GLIBC_LOCALE | ||
+#endif | ||
diff --git a/kcms/region_language/kcmregionandlang.cpp kcms/region_language/kcmregionandlang.cpp | ||
index 9e99466a40..364b8767cd 100644 | ||
--- a/kcms/region_language/kcmregionandlang.cpp | ||
+++ kcms/region_language/kcmregionandlang.cpp | ||
@@ -2,10 +2,11 @@ | ||
kcmregionandlang.cpp | ||
SPDX-FileCopyrightText: 2014 Sebastian Kügler <sebas@kde.org> | ||
SPDX-FileCopyrightText: 2021 Han Young <hanyoung@protonmail.com> | ||
+ SPDX-FileCopyrightText: 2023 Serenity Cybersecurity, LLC <license@futurecrew.ru> | ||
+ Author: Gleb Popov <arrowd@FreeBSD.org> | ||
|
||
SPDX-License-Identifier: GPL-2.0-or-later | ||
*/ | ||
-#include "config-workspace.h" | ||
|
||
#include "kcmregionandlang.h" | ||
|
||
@@ -60,6 +61,7 @@ KCMRegionAndLang::KCMRegionAndLang(QObject *parent, const KPluginMetaData &data, | ||
qRegisterMetaType<KCM_RegionAndLang::SettingType>(); | ||
qmlRegisterUncreatableMetaObject(KCM_RegionAndLang::staticMetaObject, "kcmregionandlang", 1, 0, "SettingType", "Error: SettingType is an enum"); | ||
|
||
+#ifdef GLIBC_LOCALE_GENERATED | ||
// fedora pre generate locales, fetch available locales from localectl. /usr/share/i18n/locales is empty in fedora | ||
QDir glibcLocaleDir(localeFileDirPath()); | ||
if (glibcLocaleDir.isEmpty()) { | ||
@@ -80,6 +82,9 @@ KCMRegionAndLang::KCMRegionAndLang(QObject *parent, const KPluginMetaData &data, | ||
} else { | ||
m_enabled = true; | ||
} | ||
+#else | ||
+ m_enabled = true; | ||
+#endif | ||
} | ||
|
||
QString KCMRegionAndLang::failedFindLocalesMessage() | ||
@@ -124,6 +129,7 @@ void KCMRegionAndLang::save() | ||
if (!settings()->isDefaultSetting(SettingType::PhoneNumbers)) { | ||
locales.append(settings()->phoneNumbers()); | ||
} | ||
+#ifdef GLIBC_LOCALE | ||
if (!settings()->language().isEmpty()) { | ||
QStringList languages = settings()->language().split(QLatin1Char(':')); | ||
for (const QString &lang : languages) { | ||
@@ -133,6 +139,7 @@ void KCMRegionAndLang::save() | ||
} | ||
} | ||
} | ||
+#endif | ||
|
||
auto setLangCall = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.Accounts"), | ||
QStringLiteral("/org/freedesktop/Accounts/User%1").arg(getuid()), | ||
@@ -214,7 +221,7 @@ bool KCMRegionAndLang::isGlibc() | ||
{ | ||
#ifdef OS_UBUNTU | ||
return true; | ||
-#elif GLIBC_LOCALE | ||
+#elif defined(GLIBC_LOCALE) | ||
return true; | ||
#else | ||
return false; | ||
@@ -226,6 +233,7 @@ bool KCMRegionAndLang::enabled() const | ||
return m_enabled; | ||
} | ||
|
||
+#ifdef GLIBC_LOCALE | ||
std::optional<QString> KCMRegionAndLang::toGlibcLocale(const QString &lang) | ||
{ | ||
static std::unordered_map<QString, QString> map = constructGlibcLocaleMap(); | ||
@@ -235,6 +243,7 @@ std::optional<QString> KCMRegionAndLang::toGlibcLocale(const QString &lang) | ||
} | ||
return std::nullopt; | ||
} | ||
+#endif | ||
|
||
QString KCMRegionAndLang::toUTF8Locale(const QString &locale) | ||
{ | ||
@@ -252,6 +261,7 @@ QString KCMRegionAndLang::toUTF8Locale(const QString &locale) | ||
return locale + QLatin1String(".UTF-8"); | ||
} | ||
|
||
+#ifdef GLIBC_LOCALE | ||
std::unordered_map<QString, QString> KCMRegionAndLang::constructGlibcLocaleMap() | ||
{ | ||
std::unordered_map<QString, QString> localeMap; | ||
@@ -338,5 +348,7 @@ std::unordered_map<QString, QString> KCMRegionAndLang::constructGlibcLocaleMap() | ||
} | ||
return localeMap; | ||
} | ||
+#endif | ||
+ | ||
#include "kcmregionandlang.moc" | ||
#include "moc_kcmregionandlang.cpp" | ||
diff --git a/kcms/region_language/kcmregionandlang.h kcms/region_language/kcmregionandlang.h | ||
index bdf9d19dbb..4649983b03 100644 | ||
--- a/kcms/region_language/kcmregionandlang.h | ||
+++ kcms/region_language/kcmregionandlang.h | ||
@@ -2,6 +2,8 @@ | ||
kcmregionandlang.h | ||
SPDX-FileCopyrightText: 2014 Sebastian Kügler <sebas@kde.org> | ||
SPDX-FileCopyrightText: 2021 Han Young <hanyoung@protonmail.com> | ||
+ SPDX-FileCopyrightText: 2023 Serenity Cybersecurity, LLC <license@futurecrew.ru> | ||
+ Author: Gleb Popov <arrowd@FreeBSD.org> | ||
|
||
SPDX-License-Identifier: GPL-2.0-or-later | ||
*/ | ||
@@ -11,6 +13,7 @@ | ||
#include <optional> | ||
#include <unordered_map> | ||
|
||
+#include "config-workspace.h" | ||
#include "settingtype.h" | ||
|
||
#include <KConfigGroup> | ||
@@ -36,7 +39,9 @@ public: | ||
OptionsModel *optionsModel() const; | ||
bool enabled() const; | ||
static bool isGlibc(); | ||
+#ifdef GLIBC_LOCALE | ||
std::optional<QString> toGlibcLocale(const QString &lang); | ||
+#endif | ||
Q_INVOKABLE void unset(KCM_RegionAndLang::SettingType setting); | ||
Q_INVOKABLE void reboot(); | ||
Q_SIGNALS: | ||
@@ -53,7 +58,9 @@ private Q_SLOTS: | ||
void saveToConfigFile(); | ||
|
||
private: | ||
+#ifdef GLIBC_LOCALE | ||
std::unordered_map<QString, QString> constructGlibcLocaleMap(); | ||
+#endif | ||
static QString failedFindLocalesMessage(); | ||
static QString localeFileDirPath(); | ||
static QString toUTF8Locale(const QString &locale); | ||
diff --git a/kcms/region_language/languagelistmodel.cpp kcms/region_language/languagelistmodel.cpp | ||
index d9846226da..cc73178f86 100644 | ||
--- a/kcms/region_language/languagelistmodel.cpp | ||
+++ kcms/region_language/languagelistmodel.cpp | ||
@@ -2,6 +2,8 @@ | ||
languagelistmodel.h | ||
SPDX-FileCopyrightText: 2021 Han Young <hanyoung@protonmail.com> | ||
SPDX-FileCopyrightText: 2019 Kevin Ottens <kevin.ottens@enioka.com> | ||
+ SPDX-FileCopyrightText: 2023 Serenity Cybersecurity, LLC <license@futurecrew.ru> | ||
+ Author: Gleb Popov <arrowd@FreeBSD.org> | ||
SPDX-License-Identifier: GPL-2.0-or-later | ||
*/ | ||
|
||
@@ -384,10 +386,14 @@ void SelectedLanguageModel::saveLanguages() | ||
Q_EMIT unsupportedLanguageChanged(); | ||
} | ||
|
||
+#ifdef GLIBC_LOCALE | ||
auto glibcLang = m_kcm->toGlibcLocale(m_selectedLanguages.front()); | ||
if (glibcLang.has_value()) { | ||
m_settings->setLang(glibcLang.value()); | ||
} | ||
+#else | ||
+ m_settings->setLang(m_selectedLanguages.front()); | ||
+#endif | ||
} | ||
QString languages; | ||
for (auto i = m_selectedLanguages.cbegin(); i != m_selectedLanguages.cend(); i++) { | ||
diff --git a/kcms/region_language/localegenerator.cpp kcms/region_language/localegenerator.cpp | ||
index 2da02617a4..fb8033c95d 100644 | ||
--- a/kcms/region_language/localegenerator.cpp | ||
+++ kcms/region_language/localegenerator.cpp | ||
@@ -15,7 +15,7 @@ | ||
|
||
#ifdef OS_UBUNTU | ||
#include "localegeneratorubuntu.h" | ||
-#elif GLIBC_LOCALE | ||
+#elif GLIBC_LOCALE_AUTO | ||
#include "localegeneratorglibc.h" | ||
#endif | ||
|
||
@@ -23,9 +23,9 @@ LocaleGeneratorBase *LocaleGenerator::getGenerator() | ||
{ | ||
#ifdef OS_UBUNTU | ||
static LocaleGeneratorUbuntu singleton; | ||
-#elif GLIBC_LOCALE | ||
+#elif GLIBC_LOCALE_AUTO | ||
static LocaleGeneratorGlibc singleton; | ||
-#elif LOCALE_GENERATED | ||
+#elif GLIBC_LOCALE_GENERATED | ||
static LocaleGeneratorGeneratedGlibc singleton; | ||
#else | ||
static LocaleGeneratorBase singleton; | ||
-- | ||
GitLab | ||
|