Don't assume that all CFPropertyListRef are CFArrayRefs
We might need more robust code in the future. But at least for this case it looks like a CFStringRef is also a possibility. Task-number: QTBUG-29776 Change-Id: Iaf50835122fcbb7e6e9c7fbf65e31e6143b2bc54 Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com> Reviewed-by: Denis Dzyubenko <denis@ddenis.info>bb10
parent
3dc634be36
commit
1b08e0307d
|
|
@ -106,6 +106,7 @@ public:
|
|||
return *this;
|
||||
}
|
||||
inline T *operator&() { return &type; }
|
||||
template <typename X> X as() const { return reinterpret_cast<X>(type); }
|
||||
static QCFType constructFromGet(const T &t)
|
||||
{
|
||||
CFRetain(t);
|
||||
|
|
|
|||
|
|
@ -434,18 +434,26 @@ QVariant QSystemLocale::query(QueryType type, QVariant in = QVariant()) const
|
|||
case CurrencyToString:
|
||||
return macFormatCurrency(in.value<QSystemLocale::CurrencyToStringArgument>());
|
||||
case UILanguages: {
|
||||
QCFType<CFArrayRef> languages = (CFArrayRef)CFPreferencesCopyValue(
|
||||
QCFType<CFPropertyListRef> languages = (CFArrayRef)CFPreferencesCopyValue(
|
||||
CFSTR("AppleLanguages"),
|
||||
kCFPreferencesAnyApplication,
|
||||
kCFPreferencesCurrentUser,
|
||||
kCFPreferencesAnyHost);
|
||||
const int cnt = languages == NULL ? 0 : CFArrayGetCount(languages);
|
||||
QStringList result;
|
||||
result.reserve(cnt);
|
||||
for (int i = 0; i < cnt; ++i) {
|
||||
const QString lang = QCFString::toQString(
|
||||
static_cast<CFStringRef>(CFArrayGetValueAtIndex(languages, i)));
|
||||
result.append(lang);
|
||||
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 = QCFString::toQString(
|
||||
static_cast<CFStringRef>(CFArrayGetValueAtIndex(languages.as<CFArrayRef>(), i)));
|
||||
result.append(lang);
|
||||
}
|
||||
} else if (typeId == CFStringGetTypeID()) {
|
||||
result = QStringList(QCFString::toQString(languages.as<CFStringRef>()));
|
||||
} else {
|
||||
qWarning("QLocale::uiLanguages(): CFPreferencesCopyValue returned unhandled type \"%s\"; please report to http://bugreports.qt-project.org",
|
||||
qPrintable(QCFString::toQString(CFCopyTypeIDDescription(typeId))));
|
||||
}
|
||||
return QVariant(result);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue