diff options
Diffstat (limited to 'src/corelib')
-rw-r--r-- | src/corelib/corelib.pro | 2 | ||||
-rw-r--r-- | src/corelib/doc/src/qtcore-index.qdoc | 2 | ||||
-rw-r--r-- | src/corelib/global/qcompilerdetection.h | 2 | ||||
-rw-r--r-- | src/corelib/thread/qmutex.cpp | 2 | ||||
-rw-r--r-- | src/corelib/tools/qlocale.cpp | 87 | ||||
-rw-r--r-- | src/corelib/tools/qlocale_blackberry.cpp | 4 | ||||
-rw-r--r-- | src/corelib/tools/qlocale_mac.mm | 4 | ||||
-rw-r--r-- | src/corelib/tools/qlocale_p.h | 32 | ||||
-rw-r--r-- | src/corelib/tools/qlocale_unix.cpp | 4 | ||||
-rw-r--r-- | src/corelib/tools/qlocale_win.cpp | 2 |
10 files changed, 85 insertions, 56 deletions
diff --git a/src/corelib/corelib.pro b/src/corelib/corelib.pro index 3b7eb11229..0a5cc04a17 100644 --- a/src/corelib/corelib.pro +++ b/src/corelib/corelib.pro @@ -21,6 +21,8 @@ ANDROID_JAR_DEPENDENCIES = \ ANDROID_LIB_DEPENDENCIES = \ plugins/platforms/android/libqtforandroid.so \ libs/libgnustl_shared.so +ANDROID_BUNDLED_JAR_DEPENDENCIES = \ + jar/QtAndroid-bundled.jar load(qt_module) diff --git a/src/corelib/doc/src/qtcore-index.qdoc b/src/corelib/doc/src/qtcore-index.qdoc index 148dd68f55..9568ea9f8e 100644 --- a/src/corelib/doc/src/qtcore-index.qdoc +++ b/src/corelib/doc/src/qtcore-index.qdoc @@ -103,7 +103,7 @@ \section1 Reference These are links to the API reference materials. \list - \li \l{Qt Core C++ Classes}{C++ classes} + \li \l{Qt Core C++ Classes}{C++ Classes} \list \li \l{Animation Framework}{Animation Classes} \li \l{Threading Classes} diff --git a/src/corelib/global/qcompilerdetection.h b/src/corelib/global/qcompilerdetection.h index ab84adacce..9b609f76d0 100644 --- a/src/corelib/global/qcompilerdetection.h +++ b/src/corelib/global/qcompilerdetection.h @@ -658,7 +658,7 @@ # define Q_COMPILER_ALIGNOF # define Q_COMPILER_INHERITING_CONSTRUCTORS # define Q_COMPILER_THREAD_LOCAL -# if (__GNUC__ * 100 + __GNUC_MINOR__) > 408 || __GNUC_PATCHLEVEL__ > 1 +# if (__GNUC__ * 100 + __GNUC_MINOR__) > 408 || __GNUC_PATCHLEVEL__ >= 1 # define Q_COMPILER_REF_QUALIFIERS # endif # endif diff --git a/src/corelib/thread/qmutex.cpp b/src/corelib/thread/qmutex.cpp index 45e52d7b85..1ed4a77950 100644 --- a/src/corelib/thread/qmutex.cpp +++ b/src/corelib/thread/qmutex.cpp @@ -467,8 +467,6 @@ bool QBasicMutex::lockInternal(int timeout) QT_MUTEX_LOCK_NOEXCEPT // we try to acquire the mutex by changing to dummyLocked() if (d_ptr.testAndSetAcquire(d, dummyLocked())) { // Mutex acquired - Q_ASSERT(d->waiters.load() == -QMutexPrivate::BigNumber || d->waiters.load() == 0); - d->waiters.store(0); d->deref(); return true; } else { diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp index b5f983899a..991cc9e170 100644 --- a/src/corelib/tools/qlocale.cpp +++ b/src/corelib/tools/qlocale.cpp @@ -529,6 +529,9 @@ int qt_repeatCount(const QString &s, int i) static const QLocaleData *default_data = 0; static uint default_number_options = 0; +static const QLocaleData *const c_data = locale_data; +static QLocalePrivate c_private = { c_data, Q_BASIC_ATOMIC_INITIALIZER(1), 0 }; + #ifndef QT_NO_SYSTEMLOCALE @@ -643,6 +646,12 @@ static const QLocaleData *defaultData() return default_data; } +const QLocaleData *QLocaleData::c() +{ + Q_ASSERT(locale_index[QLocale::C] == 0); + return c_data; +} + static QString getLocaleListData(const ushort *data, int size, int index) { static const ushort separator = ';'; @@ -699,20 +708,35 @@ const QLocaleData *QLocalePrivate::dataPointerForIndex(quint16 index) return &locale_data[index]; } -static quint16 localeDataIndex(const QLocaleData *p) +Q_GLOBAL_STATIC_WITH_ARGS(QSharedDataPointer<QLocalePrivate>, defaultLocalePrivate, + (QLocalePrivate::create(defaultData(), default_number_options))) + +static QLocalePrivate *localePrivateByName(const QString &name) { -#ifndef QT_NO_SYSTEMLOCALE - Q_ASSERT((p >= locale_data && p - locale_data < locale_data_size) - || (p != 0 && p == system_data)); - quint16 index = p == system_data ? locale_data_size : p - locale_data; -#else - Q_ASSERT(p >= locale_data && p - locale_data < locale_data_size); - quint16 index = p - locale_data; -#endif + if (name == QLatin1String("C")) + return &c_private; + return QLocalePrivate::create(findLocaleData(name)); +} - return index; +static QLocalePrivate *findLocalePrivate(QLocale::Language language, QLocale::Script script, + QLocale::Country country) +{ + if (language == QLocale::C) + return &c_private; + + const QLocaleData *data = QLocaleData::findLocaleData(language, script, country); + + int numberOptions = 0; + + // If not found, should default to system + if (data->m_language_id == QLocale::C && language != QLocale::C) { + numberOptions = default_number_options; + data = defaultData(); + } + return QLocalePrivate::create(data, numberOptions); } + /*! \internal */ @@ -751,7 +775,7 @@ QLocale::QLocale(QLocalePrivate &dd) */ QLocale::QLocale(const QString &name) - : d(new QLocalePrivate(localeDataIndex(findLocaleData(name)))) + : d(localePrivateByName(name)) { } @@ -764,7 +788,7 @@ QLocale::QLocale(const QString &name) */ QLocale::QLocale() - : d(new QLocalePrivate(localeDataIndex(defaultData()), default_number_options)) + : d(*defaultLocalePrivate) { } @@ -788,21 +812,10 @@ QLocale::QLocale() */ QLocale::QLocale(Language language, Country country) + : d(findLocalePrivate(language, QLocale::AnyScript, country)) { - const QLocaleData *data = QLocaleData::findLocaleData(language, QLocale::AnyScript, country); - int index; - int numberOptions = 0; - - // If not found, should default to system - if (data->m_language_id == QLocale::C && language != QLocale::C) { - numberOptions = default_number_options; - index = localeDataIndex(defaultData()); - } else { - index = localeDataIndex(data); - } - d = new QLocalePrivate(index, numberOptions); } -\ + /*! \since 4.8 @@ -828,19 +841,8 @@ QLocale::QLocale(Language language, Country country) */ QLocale::QLocale(Language language, Script script, Country country) + : d(findLocalePrivate(language, script, country)) { - const QLocaleData *data = QLocaleData::findLocaleData(language, script, country); - int index; - int numberOptions = 0; - - // If not found, should default to system - if (data->m_language_id == QLocale::C && language != QLocale::C) { - numberOptions = default_number_options; - index = localeDataIndex(defaultData()); - } else { - index = localeDataIndex(data); - } - d = new QLocalePrivate(index, numberOptions); } /*! @@ -998,6 +1000,11 @@ void QLocale::setDefault(const QLocale &locale) { default_data = locale.d->m_data; default_number_options = locale.numberOptions(); + + if (defaultLocalePrivate.exists()) { + // update the cached private + *defaultLocalePrivate = locale.d; + } } /*! @@ -2117,7 +2124,7 @@ QString QLocale::toString(double i, char f, int prec) const QLocale QLocale::system() { - return QLocale(*new QLocalePrivate(localeDataIndex(systemData()))); + return QLocale(*QLocalePrivate::create(systemData())); } @@ -2152,7 +2159,7 @@ QList<QLocale> QLocale::matchingLocales(QLocale::Language language, && (language == QLocale::AnyLanguage || data->m_language_id == uint(language))) { if ((script == QLocale::AnyScript || data->m_script_id == uint(script)) && (country == QLocale::AnyCountry || data->m_country_id == uint(country))) { - QLocale locale(*new QLocalePrivate(localeDataIndex(data))); + QLocale locale(*QLocalePrivate::create(data)); result.append(locale); } ++data; @@ -2252,7 +2259,7 @@ QString QLocale::standaloneMonthName(int month, FormatType type) const #ifndef QT_NO_SYSTEMLOCALE if (d->m_data == systemData()) { QVariant res = systemLocale()->query(type == LongFormat - ? QSystemLocale::MonthNameLong : QSystemLocale::MonthNameShort, + ? QSystemLocale::StandaloneMonthNameLong : QSystemLocale::StandaloneMonthNameShort, month); if (!res.isNull()) return res.toString(); diff --git a/src/corelib/tools/qlocale_blackberry.cpp b/src/corelib/tools/qlocale_blackberry.cpp index 1db7b7d546..6d60a97062 100644 --- a/src/corelib/tools/qlocale_blackberry.cpp +++ b/src/corelib/tools/qlocale_blackberry.cpp @@ -280,6 +280,10 @@ QVariant QSystemLocale::query(QueryType type, QVariant in) const return lc_language.monthName(in.toInt(), QLocale::LongFormat); case MonthNameShort: return lc_language.monthName(in.toInt(), QLocale::ShortFormat); + case StandaloneMonthNameLong: + return lc_language.standaloneMonthName(in.toInt(), QLocale::LongFormat); + case StandaloneMonthNameShort: + return lc_language.standaloneMonthName(in.toInt(), QLocale::ShortFormat); case DateToStringLong: return lc_region.toString(in.toDate(), QLocale::LongFormat); case DateToStringShort: diff --git a/src/corelib/tools/qlocale_mac.mm b/src/corelib/tools/qlocale_mac.mm index 9292dccf19..f399b7689d 100644 --- a/src/corelib/tools/qlocale_mac.mm +++ b/src/corelib/tools/qlocale_mac.mm @@ -401,7 +401,9 @@ QVariant QSystemLocale::query(QueryType type, QVariant in = QVariant()) const return macDayName(in.toInt(), (type == DayNameShort)); case MonthNameLong: case MonthNameShort: - return macMonthName(in.toInt(), (type == MonthNameShort)); + case StandaloneMonthNameLong: + case StandaloneMonthNameShort: + return macMonthName(in.toInt(), (type == MonthNameShort || type == StandaloneMonthNameShort)); case DateToStringShort: case DateToStringLong: return macDateToString(in.toDate(), (type == DateToStringShort)); diff --git a/src/corelib/tools/qlocale_p.h b/src/corelib/tools/qlocale_p.h index 9674342307..a62ee9304b 100644 --- a/src/corelib/tools/qlocale_p.h +++ b/src/corelib/tools/qlocale_p.h @@ -115,7 +115,9 @@ public: ListToSeparatedString, // QString LocaleChanged, // system locale changed NativeLanguageName, // QString - NativeCountryName // QString + NativeCountryName, // QString + StandaloneMonthNameLong, // QString, in: int + StandaloneMonthNameShort // QString, in: int }; virtual QVariant query(QueryType type, QVariant in) const; virtual QLocale fallbackUiLocale() const; @@ -162,6 +164,7 @@ public: static const QLocaleData *findLocaleData(QLocale::Language language, QLocale::Script script, QLocale::Country country); + static const QLocaleData *c(); quint16 m_language_id, m_script_id, m_country_id; @@ -205,17 +208,16 @@ public: quint16 m_weekend_end : 3; }; -class Q_CORE_EXPORT QLocalePrivate : public QSharedData +class Q_CORE_EXPORT QLocalePrivate { public: - explicit QLocalePrivate(int index, int numberOptions = 0) - : m_index(index), m_numberOptions(numberOptions) - { - m_data = dataPointerForIndex(index); - } - - ~QLocalePrivate() + static QLocalePrivate *create(const QLocaleData *data, int numberOptions = 0) { + QLocalePrivate *retval = new QLocalePrivate; + retval->m_data = data; + retval->ref.store(1); + retval->m_numberOptions = numberOptions; + return retval; } QChar decimal() const { return QChar(m_data->m_decimal); } @@ -332,11 +334,19 @@ public: QString dateTimeToString(const QString &format, const QDate *date, const QTime *time, const QLocale *q) const; - quint16 m_index; - quint16 m_numberOptions; const QLocaleData *m_data; + QBasicAtomicInt ref; + quint16 m_numberOptions; }; +template <> +inline QLocalePrivate *QSharedDataPointer<QLocalePrivate>::clone() +{ + // cannot use QLocalePrivate's copy constructor + // since it is deleted in C++11 + return QLocalePrivate::create(d->m_data, d->m_numberOptions); +} + inline char QLocalePrivate::digitToCLocale(QChar in) const { const QChar _zero = zero(); diff --git a/src/corelib/tools/qlocale_unix.cpp b/src/corelib/tools/qlocale_unix.cpp index 4e443cd79b..9ea28895bd 100644 --- a/src/corelib/tools/qlocale_unix.cpp +++ b/src/corelib/tools/qlocale_unix.cpp @@ -173,6 +173,10 @@ QVariant QSystemLocale::query(QueryType type, QVariant in) const return lc_time.monthName(in.toInt(), QLocale::LongFormat); case MonthNameShort: return lc_time.monthName(in.toInt(), QLocale::ShortFormat); + case StandaloneMonthNameLong: + return lc_time.standaloneMonthName(in.toInt(), QLocale::LongFormat); + case StandaloneMonthNameShort: + return lc_time.standaloneMonthName(in.toInt(), QLocale::ShortFormat); case DateToStringLong: return lc_time.toString(in.toDate(), QLocale::LongFormat); case DateToStringShort: diff --git a/src/corelib/tools/qlocale_win.cpp b/src/corelib/tools/qlocale_win.cpp index d576f1c281..0730002ca3 100644 --- a/src/corelib/tools/qlocale_win.cpp +++ b/src/corelib/tools/qlocale_win.cpp @@ -684,8 +684,10 @@ QVariant QSystemLocale::query(QueryType type, QVariant in = QVariant()) const case DayNameShort: return d->dayName(in.toInt(), QLocale::ShortFormat); case MonthNameLong: + case StandaloneMonthNameLong: return d->monthName(in.toInt(), QLocale::LongFormat); case MonthNameShort: + case StandaloneMonthNameShort: return d->monthName(in.toInt(), QLocale::ShortFormat); case DateToStringShort: return d->toString(in.toDate(), QLocale::ShortFormat); |