diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/text/qlocale.cpp | 22 | ||||
-rw-r--r-- | src/corelib/text/qlocale_p.h | 2 |
2 files changed, 21 insertions, 3 deletions
diff --git a/src/corelib/text/qlocale.cpp b/src/corelib/text/qlocale.cpp index 54497c79ec..45d4bd99fb 100644 --- a/src/corelib/text/qlocale.cpp +++ b/src/corelib/text/qlocale.cpp @@ -589,8 +589,9 @@ static QLocalePrivate *c_private() } static const QLocaleData *systemData(); +static uint defaultIndex(); Q_GLOBAL_STATIC_WITH_ARGS(QExplicitlySharedDataPointer<QLocalePrivate>, systemLocalePrivate, - (QLocalePrivate::create(systemData()))) + (QLocalePrivate::create(systemData(), defaultIndex()))) #ifndef QT_NO_SYSTEMLOCALE /****************************************************************************** @@ -700,6 +701,22 @@ static const QLocaleData *defaultData() return default_data; } +static uint defaultIndex() +{ + const QLocaleData *const data = defaultData(); +#ifndef QT_NO_SYSTEMLOCALE + if (data == systemData()) { + // Work out a suitable index matching the system data, for use when + // accessing calendar data, when not fetched from system. + return QLocaleData::findLocaleIndex(data->id()); + } +#endif + + Q_ASSERT(data >= locale_data); + Q_ASSERT(data < locale_data + std::size(locale_data)); + return data - locale_data; +} + const QLocaleData *QLocaleData::c() { Q_ASSERT(locale_index[QLocale::C] == 0); @@ -726,7 +743,7 @@ QDataStream &operator>>(QDataStream &ds, QLocale &l) static const int locale_data_size = sizeof(locale_data)/sizeof(QLocaleData) - 1; Q_GLOBAL_STATIC_WITH_ARGS(QSharedDataPointer<QLocalePrivate>, defaultLocalePrivate, - (QLocalePrivate::create(defaultData()))) + (QLocalePrivate::create(defaultData(), defaultIndex()))) static QLocalePrivate *localePrivateByName(const QString &name) { @@ -756,6 +773,7 @@ static QLocalePrivate *findLocalePrivate(QLocale::Language language, QLocale::Sc if (defaultLocalePrivate.exists()) numberOptions = defaultLocalePrivate->data()->m_numberOptions; data = defaultData(); + index = defaultIndex(); } return QLocalePrivate::create(data, index, numberOptions); } diff --git a/src/corelib/text/qlocale_p.h b/src/corelib/text/qlocale_p.h index 8be0eeda92..ec2723e493 100644 --- a/src/corelib/text/qlocale_p.h +++ b/src/corelib/text/qlocale_p.h @@ -395,7 +395,7 @@ class Q_CORE_EXPORT QLocalePrivate // A POD type { public: static QLocalePrivate *create( - const QLocaleData *data, const uint data_offset = 0, + const QLocaleData *data, const uint data_offset, QLocale::NumberOptions numberOptions = QLocale::DefaultNumberOptions) { auto *retval = new QLocalePrivate; |