summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdward Welbourne <edward.welbourne@qt.io>2020-10-26 12:58:43 +0100
committerEdward Welbourne <edward.welbourne@qt.io>2020-11-08 13:01:55 +0100
commita74f53486434a791af3c3d05ea488348c65c43e1 (patch)
treec40c48f06cc2fe35ebad1f767949544f7f5de4a9
parent8693d473e574f448f04a31e1ca8b6fd5b102cbff (diff)
Use the right UI language lookup in macOS backend for QSystemLocale
Use CFLocaleCopyPreferredLanguages() instead of a home-grown call to a low-level API. Brought to light by QTBUG-87858. Change-Id: Ica22c446e01930da65d34c8851e3e67c9d020d8b Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
-rw-r--r--src/corelib/text/qlocale_mac.mm29
1 files changed, 7 insertions, 22 deletions
diff --git a/src/corelib/text/qlocale_mac.mm b/src/corelib/text/qlocale_mac.mm
index e1bb66a221..7ed7832564 100644
--- a/src/corelib/text/qlocale_mac.mm
+++ b/src/corelib/text/qlocale_mac.mm
@@ -484,29 +484,14 @@ QVariant QSystemLocale::query(QueryType type, QVariant in) const
case CurrencyToString:
return macFormatCurrency(in.value<QSystemLocale::CurrencyToStringArgument>());
case UILanguages: {
- QCFType<CFPropertyListRef> languages = CFPreferencesCopyValue(
- CFSTR("AppleLanguages"),
- kCFPreferencesAnyApplication,
- kCFPreferencesCurrentUser,
- kCFPreferencesAnyHost);
QStringList result;
- if (!languages)
- return QVariant(result);
-
- CFTypeID typeId = CFGetTypeID(languages);
- if (typeId == CFArrayGetTypeID()) {
- const int cnt = CFArrayGetCount(languages.as<CFArrayRef>());
- result.reserve(cnt);
- for (int i = 0; i < cnt; ++i) {
- const QString lang = QString::fromCFString(
- static_cast<CFStringRef>(CFArrayGetValueAtIndex(languages.as<CFArrayRef>(), i)));
- result.append(lang);
- }
- } else if (typeId == CFStringGetTypeID()) {
- result = QStringList(QString::fromCFString(languages.as<CFStringRef>()));
- } else {
- qWarning("QLocale::uiLanguages(): CFPreferencesCopyValue returned unhandled type \"%ls\"; please report to http://bugreports.qt.io",
- qUtf16Printable(QString::fromCFString(CFCopyTypeIDDescription(typeId))));
+ QCFType<CFArrayRef> languages = CFLocaleCopyPreferredLanguages();
+ const int cnt = CFArrayGetCount(languages);
+ result.reserve(cnt);
+ for (int i = 0; i < cnt; ++i) {
+ const QString lang = QString::fromCFString(
+ static_cast<CFStringRef>(CFArrayGetValueAtIndex(languages, i)));
+ result.append(lang);
}
return QVariant(result);
}