From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- intl/locale/gtk/OSPreferences_gtk.cpp | 120 ++++++++++++++++++++++++++++++++++ intl/locale/gtk/moz.build | 15 +++++ 2 files changed, 135 insertions(+) create mode 100644 intl/locale/gtk/OSPreferences_gtk.cpp create mode 100644 intl/locale/gtk/moz.build (limited to 'intl/locale/gtk') diff --git a/intl/locale/gtk/OSPreferences_gtk.cpp b/intl/locale/gtk/OSPreferences_gtk.cpp new file mode 100644 index 0000000000..e7e5d6017d --- /dev/null +++ b/intl/locale/gtk/OSPreferences_gtk.cpp @@ -0,0 +1,120 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include +#include "mozilla/intl/Locale.h" +#include "OSPreferences.h" + +#include "nsServiceManagerUtils.h" +#include "nsIGSettingsService.h" + +using namespace mozilla; +using namespace mozilla::intl; + +OSPreferences::OSPreferences() = default; + +bool OSPreferences::ReadSystemLocales(nsTArray& aLocaleList) { + MOZ_ASSERT(aLocaleList.IsEmpty()); + + nsAutoCString defaultLang(Locale::GetDefaultLocale()); + + if (CanonicalizeLanguageTag(defaultLang)) { + aLocaleList.AppendElement(defaultLang); + return true; + } + return false; +} + +bool OSPreferences::ReadRegionalPrefsLocales(nsTArray& aLocaleList) { + MOZ_ASSERT(aLocaleList.IsEmpty()); + + // For now we're just taking the LC_TIME from POSIX environment for all + // regional preferences. + nsAutoCString localeStr(setlocale(LC_TIME, nullptr)); + + if (CanonicalizeLanguageTag(localeStr)) { + aLocaleList.AppendElement(localeStr); + return true; + } + + return false; +} + +/* + * This looks up into gtk settings for hourCycle format. + * + * This works for all GUIs that use gtk settings like Gnome, Elementary etc. + * + * We're taking the current 12/24h settings irrelevant of the locale, because + * in the UI user selects this setting for all locales. + */ +static int HourCycle() { + nsCOMPtr gsettings = + do_GetService(NS_GSETTINGSSERVICE_CONTRACTID); + if (!gsettings) { + return 0; + } + + nsCOMPtr desktop_settings; + gsettings->GetCollectionForSchema("org.gnome.desktop.interface"_ns, + getter_AddRefs(desktop_settings)); + if (!desktop_settings) { + return 0; + } + + nsAutoCString result; + desktop_settings->GetString("clock-format"_ns, result); + if (result == "12h") { + return 12; + } + if (result == "24h") { + return 24; + } + return 0; +} + +/** + * Since Gtk does not provide a way to customize or format date/time patterns, + * we're reusing ICU data here, but we do modify it according to the only + * setting Gtk gives us - hourCycle. + * + * This means that for gtk we will return a pattern from ICU altered to + * represent h12/h24 hour cycle if the user modified the default value. + * + * In short, this should work like this: + * + * * gtk defaults, pl: 24h + * * gtk defaults, en: 12h + * + * * gtk 12h, pl: 12h + * * gtk 12h, en: 12h + * + * * gtk 24h, pl: 24h + * * gtk 12h, en: 12h + */ +bool OSPreferences::ReadDateTimePattern(DateTimeFormatStyle aDateStyle, + DateTimeFormatStyle aTimeStyle, + const nsACString& aLocale, + nsACString& aRetVal) { + nsAutoCString skeleton; + if (!GetDateTimeSkeletonForStyle(aDateStyle, aTimeStyle, aLocale, skeleton)) { + return false; + } + + // Customize the skeleton if necessary to reflect user's 12/24hr pref + int hourCycle = HourCycle(); + if (hourCycle == 12 || hourCycle == 24) { + OverrideSkeletonHourCycle(hourCycle == 24, skeleton); + } + + if (!GetPatternForSkeleton(skeleton, aLocale, aRetVal)) { + return false; + } + + return true; +} + +void OSPreferences::RemoveObservers() {} diff --git a/intl/locale/gtk/moz.build b/intl/locale/gtk/moz.build new file mode 100644 index 0000000000..3b977a9720 --- /dev/null +++ b/intl/locale/gtk/moz.build @@ -0,0 +1,15 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +SOURCES += ["OSPreferences_gtk.cpp"] + +CXXFLAGS += CONFIG["GLIB_CFLAGS"] + +FINAL_LIBRARY = "xul" + +LOCAL_INCLUDES += [ + "..", +] -- cgit v1.2.3