diff options
author | Edward Welbourne <edward.welbourne@qt.io> | 2020-10-26 12:58:43 +0100 |
---|---|---|
committer | Edward Welbourne <edward.welbourne@qt.io> | 2020-11-08 13:01:55 +0100 |
commit | a74f53486434a791af3c3d05ea488348c65c43e1 (patch) | |
tree | c40c48f06cc2fe35ebad1f767949544f7f5de4a9 | |
parent | 8693d473e574f448f04a31e1ca8b6fd5b102cbff (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.mm | 29 |
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); } |