Merge "Merge remote-tracking branch 'origin/5.11' into 5.12" into refs/staging/5.12

This commit is contained in:
Liang Qi 2018-09-27 18:34:12 +00:00 committed by The Qt Project
commit 353a58ceb9
36 changed files with 214 additions and 124 deletions

58
dist/changes-5.11.2 vendored
View File

@ -17,10 +17,6 @@ https://bugreports.qt.io/
Each of these identifiers can be entered in the bug tracker to obtain more
information about a particular change.
****************************************************************************
* Qt 5.11.2 Changes *
****************************************************************************
****************************************************************************
* Licensing *
****************************************************************************
@ -32,9 +28,12 @@ information about a particular change.
provided for builds from released branches of Qt.
****************************************************************************
* QtCore *
* Library *
****************************************************************************
QtCore
------
- QFile:
* [QTBUG-69417] Fixed a regression in QFile::copy() that caused the
original file not to be copied entirely if it was modified outside of
@ -85,9 +84,8 @@ information about a particular change.
prohibited Unicode codepoints to report isValid() == true, despite
clearing the hostname.
****************************************************************************
* QtGui *
****************************************************************************
QtGui
-----
- QMatrix:
* The qHash() implementation for QMatrix has been changed.
@ -101,9 +99,10 @@ information about a particular change.
* [QTBUG-70096] Fixed a possible crash when combining QStaticText,
QOpenGLWidget and Qt Quick in the same application.
****************************************************************************
* QtWidgets *
****************************************************************************
- Qt programs in Flatpak environment can now trigger IBus input method.
QtWidgets
---------
- QMessageBox:
* [QTBUG-69526] A message box with two buttons, one of which is the "Show
@ -122,8 +121,39 @@ information about a particular change.
- [QTBUG-69271] PCRE2 was updated to version 10.31.
****************************************************************************
* plugins *
* Tools *
****************************************************************************
- ibus:
* Qt programs in Flatpak environment can now trigger IBus input method.
configure & build system
------------------------
- [QTBUG-63452] Fixed re-configuring commercial builds after more than a day.
- [QTBUG-63483] Fixed -sysroot being ignored by various configure tests.
- [QTBUG-67443] Fixed build with some MinGW distributions.
- [QTBUG-69176] Fixed setting variables with digits in their names on
the configure command line.
- [MSVC][ICC] Fixed build with MSVC 2017 15.8.
- Fixed -L & -F being ignored by library configure tests.
- Added support for building with Wayland on macOS.
qmake
-----
- [QTBUG-22863][QTBUG-68635] Fixed support for file names containing colons
or hash marks - to a degree.
- [QTBUG-35713][Android@Win] Fixed building of static libraries with DESTDIR.
- [QTBUG-37592][Darwin] Switching the SDK version on an existing build will
now raise an error.
- [QTBUG-59967][VS2012+] Fixed handling of QMAKE_MANIFEST.
- [QTBUG-65072][Android@Win] Fixed inconsistent use of path separators in
generated dependencies with lead to build rules not being found.
- [QTBUG-69244][Xcode] Fixed shadow builds of SUBDIRS projects.
- [QTBUG-69279][Xcode] Fixed clobbering of build directory name in debug
builds of libraries with CONFIG+=create_prl when the path contains the
library name itself.
- [QTBUG-69770][VS] Fixed compilation of generated C++ sources with non-.cpp
file extensions.
- [QTBUG-69769][VS] Fixed QMAKE_EXTRA_COMPILERS for non-debug&release builds.
- [Darwin] Fixed QMAKE_BUNDLE not being used for the bundle identifier.
- Clang-based mkspecs now support CROSS_COMPILE.
- Added support for C++14/17 with MSVC 2017 15.7.

View File

@ -6,6 +6,7 @@
"Description": "IAccessible2 is a new accessibility API which complements Microsoft's earlier work on MSAA",
"Homepage": "http://www.linuxfoundation.org/collaborate/workgroups/accessibility/iaccessible2",
"Version": "1.3.0",
"License": "BSD 3-clause \"New\" or \"Revised\" License",
"LicenseId": "BSD-3-Clause",
"LicenseFile": "LICENSE",

View File

@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Copyright (C) 2018 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtCore module of the Qt Toolkit.
@ -77,6 +77,7 @@
#define QT_CRYPTOGRAPHICHASH_ONLY_SHA1
#define QT_FEATURE_cxx11_random (QT_HAS_INCLUDE(<random>) ? 1 : -1)
#define QT_NO_DATASTREAM
#define QT_FEATURE_datestring 1
#define QT_FEATURE_datetimeparser -1
#define QT_FEATURE_etw -1
#define QT_FEATURE_getauxval (QT_HAS_INCLUDE(<sys/auxv.h>) ? 1 : -1)
@ -115,6 +116,7 @@
#define QT_NO_SYSTEMLOCALE
#define QT_FEATURE_systemsemaphore -1
#define QT_FEATURE_temporaryfile 1
#define QT_FEATURE_textdate 1
#define QT_FEATURE_thread -1
#define QT_FEATURE_timezone -1
#define QT_FEATURE_topleveldomain -1

View File

@ -267,7 +267,7 @@ QLibraryInfo::licensedProducts()
\deprecated
This function used to return the installation date for this build of Qt, but now returns a constant date.
*/
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
#if QT_DEPRECATED_SINCE(5, 5)
QDate
QLibraryInfo::buildDate()
@ -275,7 +275,7 @@ QLibraryInfo::buildDate()
return QDate::fromString(QString::fromLatin1(qt_configure_installation + 12), Qt::ISODate);
}
#endif
#endif //QT_NO_DATESTRING
#endif // datestring
#if defined(Q_CC_INTEL) // must be before GNU, Clang and MSVC because ICC/ICL claim to be them
# ifdef __INTEL_CLANG_COMPILER

View File

@ -56,11 +56,11 @@ public:
static QT_DEPRECATED QString licensedProducts();
#endif
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
#if QT_DEPRECATED_SINCE(5, 5)
static QT_DEPRECATED QDate buildDate();
#endif // QT_DEPRECATED_SINCE(5, 5)
#endif //QT_NO_DATESTRING
#endif // datestring
static const char * build() Q_DECL_NOTHROW;

View File

@ -178,7 +178,7 @@ inline void qt_ignore_sigpipe()
#if defined(Q_PROCESSOR_X86_32) && defined(__GLIBC__)
# if !__GLIBC_PREREQ(2, 22)
int qt_open64(const char *pathname, int flags, mode_t);
Q_CORE_EXPORT int qt_open64(const char *pathname, int flags, mode_t);
# undef QT_OPEN
# define QT_OPEN qt_open64
# endif

View File

@ -468,7 +468,7 @@ static bool convert(const QVariant::Private *d, int t, void *result, bool *ok)
case QVariant::Double:
*str = QString::number(d->data.d, 'g', QLocale::FloatingPointShortest);
break;
#if !defined(QT_NO_DATESTRING)
#if QT_CONFIG(datestring)
case QVariant::Date:
*str = v_cast<QDate>(d)->toString(Qt::ISODate);
break;
@ -617,7 +617,7 @@ static bool convert(const QVariant::Private *d, int t, void *result, bool *ok)
QDate *dt = static_cast<QDate *>(result);
if (d->type == QVariant::DateTime)
*dt = v_cast<QDateTime>(d)->date();
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
else if (d->type == QVariant::String)
*dt = QDate::fromString(*v_cast<QString>(d), Qt::ISODate);
#endif
@ -632,7 +632,7 @@ static bool convert(const QVariant::Private *d, int t, void *result, bool *ok)
case QVariant::DateTime:
*t = v_cast<QDateTime>(d)->time();
break;
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
case QVariant::String:
*t = QTime::fromString(*v_cast<QString>(d), Qt::ISODate);
break;
@ -645,7 +645,7 @@ static bool convert(const QVariant::Private *d, int t, void *result, bool *ok)
case QVariant::DateTime: {
QDateTime *dt = static_cast<QDateTime *>(result);
switch (d->type) {
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
case QVariant::String:
*dt = QDateTime::fromString(*v_cast<QString>(d), Qt::ISODate);
break;

View File

@ -84,7 +84,7 @@ public:
int m_endian;
int m_bits;
int m_stringTableFileOffset;
qelfoff_t m_stringTableFileOffset;
template <typename T>
T read(const char *s)

View File

@ -98,7 +98,9 @@ QT_BEGIN_NAMESPACE
/*! \fn template <typename T> QFutureWatcher<T>::QFutureWatcher(QObject *parent)
Constructs a new QFutureWatcher with the given \a parent.
Constructs a new QFutureWatcher with the given \a parent. Until a future is
set with setFuture(), the functions isStarted(), isCanceled(), and
isFinished() return \c true.
*/
QFutureWatcherBase::QFutureWatcherBase(QObject *parent)
:QObject(*new QFutureWatcherBasePrivate, parent)
@ -241,7 +243,7 @@ QString QFutureWatcherBase::progressText() const
/*! \fn template <typename T> bool QFutureWatcher<T>::isStarted() const
Returns \c true if the asynchronous computation represented by the future()
has been started; otherwise returns \c false.
has been started, or if no future has been set; otherwise returns \c false.
*/
bool QFutureWatcherBase::isStarted() const
{
@ -272,7 +274,7 @@ bool QFutureWatcherBase::isRunning() const
/*! \fn template <typename T> bool QFutureWatcher<T>::isCanceled() const
Returns \c true if the asynchronous computation has been canceled with the
cancel() function; otherwise returns \c false.
cancel() function, or if no future has been set; otherwise returns \c false.
Be aware that the computation may still be running even though this
function returns \c true. See cancel() for more details.

View File

@ -171,7 +171,7 @@ static ParsedDate getDateFromJulianDay(qint64 julianDay)
static const char monthDays[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
#ifndef QT_NO_TEXTDATE
#if QT_CONFIG(textdate)
static const char qt_shortMonthNames[][4] = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
@ -200,9 +200,9 @@ static int fromShortMonthName(const QStringRef &monthName)
}
return -1;
}
#endif // QT_NO_TEXTDATE
#endif // textdate
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
struct ParsedRfcDateTime {
QDate date;
QTime time;
@ -241,7 +241,7 @@ static ParsedRfcDateTime rfcDateImpl(const QString &s)
return result;
}
#endif // QT_NO_DATESTRING
#endif // datestring
// Return offset in [+-]HH:mm format
static QString toOffsetString(Qt::DateFormat format, int offset)
@ -254,6 +254,7 @@ static QString toOffsetString(Qt::DateFormat format, int offset)
(qAbs(offset) / 60) % 60);
}
#if QT_CONFIG(datestring)
// Parse offset in [+-]HH[[:]mm] format
static int fromOffsetString(const QStringRef &offsetString, bool *valid) Q_DECL_NOTHROW
{
@ -298,6 +299,7 @@ static int fromOffsetString(const QStringRef &offsetString, bool *valid) Q_DECL_
*valid = true;
return sign * ((hour * 60) + minute) * 60;
}
#endif // datestring
/*****************************************************************************
QDate member functions
@ -612,7 +614,7 @@ int QDate::weekNumber(int *yearNumber) const
return week;
}
#if QT_DEPRECATED_SINCE(5, 11) && !defined(QT_NO_TEXTDATE)
#if QT_DEPRECATED_SINCE(5, 11) && QT_CONFIG(textdate)
/*!
\since 4.5
\deprecated
@ -774,11 +776,11 @@ QString QDate::longDayName(int weekday, MonthNameType type)
}
return QString();
}
#endif // QT_NO_TEXTDATE && deprecated
#endif // textdate && deprecated
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
#ifndef QT_NO_TEXTDATE
#if QT_CONFIG(textdate)
static QString toStringTextDate(QDate date)
{
const ParsedDate pd = getDateFromJulianDay(date.toJulianDay());
@ -788,7 +790,7 @@ static QString toStringTextDate(QDate date)
+ QString::number(pd.day) + sp
+ QString::number(pd.year);
}
#endif // QT_NO_TEXTDATE
#endif // textdate
static QString toStringIsoDate(qint64 jd)
{
@ -864,7 +866,7 @@ QString QDate::toString(Qt::DateFormat format) const
case Qt::RFC2822Date:
return QLocale::c().toString(*this, QStringViewLiteral("dd MMM yyyy"));
default:
#ifndef QT_NO_TEXTDATE
#if QT_CONFIG(textdate)
case Qt::TextDate:
return toStringTextDate(*this);
#endif
@ -938,7 +940,7 @@ QString QDate::toString(const QString &format) const
}
#endif
#endif //QT_NO_DATESTRING
#endif // datestring
/*!
\fn bool QDate::setYMD(int y, int m, int d)
@ -1200,7 +1202,7 @@ qint64 QDate::daysTo(const QDate &d) const
\sa QTime::currentTime(), QDateTime::currentDateTime()
*/
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
/*!
\fn QDate QDate::fromString(const QString &string, Qt::DateFormat format)
@ -1233,7 +1235,7 @@ QDate QDate::fromString(const QString& string, Qt::DateFormat format)
case Qt::RFC2822Date:
return rfcDateImpl(string).date;
default:
#ifndef QT_NO_TEXTDATE
#if QT_CONFIG(textdate)
case Qt::TextDate: {
QVector<QStringRef> parts = string.splitRef(QLatin1Char(' '), QString::SkipEmptyParts);
@ -1254,7 +1256,7 @@ QDate QDate::fromString(const QString& string, Qt::DateFormat format)
return QDate(year, month, parts.at(2).toInt());
}
#endif // QT_NO_TEXTDATE
#endif // textdate
case Qt::ISODate: {
// Semi-strict parsing, must be long enough and have non-numeric separators
if (string.size() < 10 || string.at(4).isDigit() || string.at(7).isDigit()
@ -1349,7 +1351,7 @@ QDate QDate::fromString(const QString &string, const QString &format)
#endif
return date;
}
#endif // QT_NO_DATESTRING
#endif // datestring
/*!
\overload
@ -1566,7 +1568,7 @@ int QTime::msec() const
return ds() % 1000;
}
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
/*!
\overload
@ -1702,7 +1704,7 @@ QString QTime::toString(const QString &format) const
}
#endif
#endif //QT_NO_DATESTRING
#endif // datestring
/*!
Sets the time to hour \a h, minute \a m, seconds \a s and
@ -1887,7 +1889,7 @@ int QTime::msecsTo(const QTime &t) const
operating system; not all systems provide 1-millisecond accuracy.
*/
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
static QTime fromIsoTimeString(const QStringRef &string, Qt::DateFormat format, bool *isMidnight24)
{
@ -2069,7 +2071,7 @@ QTime QTime::fromString(const QString &string, const QString &format)
return time;
}
#endif // QT_NO_DATESTRING
#endif // datestring
/*!
@ -3773,7 +3775,7 @@ void QDateTime::setTime_t(uint secsSince1Jan1970UTC)
}
#endif
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
/*!
\fn QString QDateTime::toString(Qt::DateFormat format) const
@ -3848,7 +3850,7 @@ QString QDateTime::toString(Qt::DateFormat format) const
return buf;
}
default:
#ifndef QT_NO_TEXTDATE
#if QT_CONFIG(textdate)
case Qt::TextDate: {
const QPair<QDate, QTime> p = getDateTime(d);
buf = p.first.toString(Qt::TextDate);
@ -3993,7 +3995,7 @@ QString QDateTime::toString(const QString &format) const
}
#endif
#endif //QT_NO_DATESTRING
#endif // datestring
static inline void massageAdjustedDateTime(const QDateTimeData &d, QDate *date, QTime *time)
{
@ -4722,7 +4724,7 @@ int QDateTime::utcOffset() const
}
#endif // QT_DEPRECATED_SINCE
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
/*!
\fn QDateTime QDateTime::fromString(const QString &string, Qt::DateFormat format)
@ -4827,7 +4829,7 @@ QDateTime QDateTime::fromString(const QString& string, Qt::DateFormat format)
date = date.addDays(1);
return QDateTime(date, time, spec, offset);
}
#if !defined(QT_NO_TEXTDATE)
#if QT_CONFIG(textdate)
case Qt::TextDate: {
QVector<QStringRef> parts = string.splitRef(QLatin1Char(' '), QString::SkipEmptyParts);
@ -4936,7 +4938,7 @@ QDateTime QDateTime::fromString(const QString& string, Qt::DateFormat format)
return QDateTime(date, time, Qt::UTC);
}
}
#endif //QT_NO_TEXTDATE
#endif // textdate
}
return QDateTime();
@ -5071,7 +5073,7 @@ QDateTime QDateTime::fromString(const QString &string, const QString &format)
return QDateTime();
}
#endif // QT_NO_DATESTRING
#endif // datestring
/*!
\fn QDateTime QDateTime::toLocalTime() const
@ -5330,7 +5332,7 @@ QDataStream &operator>>(QDataStream &in, QDateTime &dateTime)
Date / Time Debug Streams
*****************************************************************************/
#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_NO_DATESTRING)
#if !defined(QT_NO_DEBUG_STREAM) && QT_CONFIG(datestring)
QDebug operator<<(QDebug dbg, const QDate &date)
{
QDebugStateSaver saver(dbg);
@ -5382,7 +5384,7 @@ QDebug operator<<(QDebug dbg, const QDateTime &date)
}
return dbg.nospace() << ')';
}
#endif
#endif // debug_stream && datestring
/*! \fn uint qHash(const QDateTime &key, uint seed = 0)
\relates QHash

View File

@ -81,7 +81,7 @@ public:
int daysInYear() const;
int weekNumber(int *yearNum = nullptr) const;
#if QT_DEPRECATED_SINCE(5, 10) && !defined QT_NO_TEXTDATE
#if QT_DEPRECATED_SINCE(5, 10) && QT_CONFIG(textdate)
QT_DEPRECATED_X("Use QLocale::monthName or QLocale::standaloneMonthName")
static QString shortMonthName(int month, MonthNameType type = DateFormat);
QT_DEPRECATED_X("Use QLocale::dayName or QLocale::standaloneDayName")
@ -90,8 +90,8 @@ public:
static QString longMonthName(int month, MonthNameType type = DateFormat);
QT_DEPRECATED_X("Use QLocale::dayName or QLocale::standaloneDayName")
static QString longDayName(int weekday, MonthNameType type = DateFormat);
#endif // QT_NO_TEXTDATE && deprecated
#ifndef QT_NO_DATESTRING
#endif // textdate && deprecated
#if QT_CONFIG(datestring)
QString toString(Qt::DateFormat f = Qt::TextDate) const;
#if QT_STRINGVIEW_LEVEL < 2
QString toString(const QString &format) const;
@ -123,7 +123,7 @@ QT_DEPRECATED inline bool setYMD(int y, int m, int d)
Q_DECL_CONSTEXPR bool operator>=(const QDate &other) const { return jd >= other.jd; }
static QDate currentDate();
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
static QDate fromString(const QString &s, Qt::DateFormat f = Qt::TextDate);
static QDate fromString(const QString &s, const QString &format);
#endif
@ -167,7 +167,7 @@ public:
int minute() const;
int second() const;
int msec() const;
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
QString toString(Qt::DateFormat f = Qt::TextDate) const;
#if QT_STRINGVIEW_LEVEL < 2
QString toString(const QString &format) const;
@ -192,7 +192,7 @@ public:
Q_DECL_CONSTEXPR inline int msecsSinceStartOfDay() const { return mds == NullTime ? 0 : mds; }
static QTime currentTime();
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
static QTime fromString(const QString &s, Qt::DateFormat f = Qt::TextDate);
static QTime fromString(const QString &s, const QString &format);
#endif
@ -303,7 +303,7 @@ public:
void setMSecsSinceEpoch(qint64 msecs);
void setSecsSinceEpoch(qint64 secs);
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
QString toString(Qt::DateFormat f = Qt::TextDate) const;
#if QT_STRINGVIEW_LEVEL < 2
QString toString(const QString &format) const;
@ -342,7 +342,7 @@ public:
static QDateTime currentDateTime();
static QDateTime currentDateTimeUtc();
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
static QDateTime fromString(const QString &s, Qt::DateFormat f = Qt::TextDate);
static QDateTime fromString(const QString &s, const QString &format);
#endif
@ -386,7 +386,7 @@ private:
friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QDateTime &);
#endif
#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_NO_DATESTRING)
#if !defined(QT_NO_DEBUG_STREAM) && QT_CONFIG(datestring)
friend Q_CORE_EXPORT QDebug operator<<(QDebug, const QDateTime &);
#endif
};
@ -401,7 +401,7 @@ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QDateTime &);
Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QDateTime &);
#endif // QT_NO_DATASTREAM
#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_NO_DATESTRING)
#if !defined(QT_NO_DEBUG_STREAM) && QT_CONFIG(datestring)
Q_CORE_EXPORT QDebug operator<<(QDebug, const QDate &);
Q_CORE_EXPORT QDebug operator<<(QDebug, const QTime &);
Q_CORE_EXPORT QDebug operator<<(QDebug, const QDateTime &);

View File

@ -77,7 +77,7 @@ QDateTimeParser::~QDateTimeParser()
int QDateTimeParser::getDigit(const QDateTime &t, int index) const
{
if (index < 0 || index >= sectionNodes.size()) {
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
qWarning("QDateTimeParser::getDigit() Internal error (%s %d)",
qPrintable(t.toString()), index);
#else
@ -103,7 +103,7 @@ int QDateTimeParser::getDigit(const QDateTime &t, int index) const
default: break;
}
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
qWarning("QDateTimeParser::getDigit() Internal error 2 (%s %d)",
qPrintable(t.toString()), index);
#else
@ -127,7 +127,7 @@ int QDateTimeParser::getDigit(const QDateTime &t, int index) const
bool QDateTimeParser::setDigit(QDateTime &v, int index, int newVal) const
{
if (index < 0 || index >= sectionNodes.size()) {
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
qWarning("QDateTimeParser::setDigit() Internal error (%s %d %d)",
qPrintable(v.toString()), index, newVal);
#else
@ -612,7 +612,7 @@ int QDateTimeParser::sectionSize(int sectionIndex) const
int QDateTimeParser::sectionMaxSize(Section s, int count) const
{
#ifndef QT_NO_TEXTDATE
#if QT_CONFIG(textdate)
int mcount = 12;
#endif
@ -636,14 +636,14 @@ int QDateTimeParser::sectionMaxSize(Section s, int count) const
case DaySection: return 2;
case DayOfWeekSectionShort:
case DayOfWeekSectionLong:
#ifdef QT_NO_TEXTDATE
#if !QT_CONFIG(textdate)
return 2;
#else
mcount = 7;
Q_FALLTHROUGH();
#endif
case MonthSection:
#ifdef QT_NO_TEXTDATE
#if !QT_CONFIG(textdate)
return 2;
#else
if (count <= 2)
@ -725,7 +725,7 @@ QString QDateTimeParser::sectionText(int sectionIndex) const
}
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
QDateTimeParser::ParsedSection
QDateTimeParser::parseSection(const QDateTime &currentValue, int sectionIndex,
@ -1727,7 +1727,7 @@ QDateTimeParser::AmPmFinder QDateTimeParser::findAmPm(QString &str, int sectionI
return PossibleBoth;
return (!broken[amindex] ? PossibleAM : PossiblePM);
}
#endif // QT_NO_DATESTRING
#endif // datestring
/*!
\internal
@ -1958,7 +1958,7 @@ QString QDateTimeParser::stateName(State s) const
}
}
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
bool QDateTimeParser::fromString(const QString &t, QDate *date, QTime *time) const
{
QDateTime val(QDate(1900, 1, 1), QDATETIMEEDIT_TIME_MIN);
@ -1983,7 +1983,7 @@ bool QDateTimeParser::fromString(const QString &t, QDate *date, QTime *time) con
}
return true;
}
#endif // QT_NO_DATESTRING
#endif // datestring
QDateTime QDateTimeParser::getMinimum() const
{

View File

@ -180,7 +180,7 @@ public:
LowerCase
};
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
StateNode parse(QString input, int position, const QDateTime &defaultValue, bool fixup) const;
bool fromString(const QString &text, QDate *date, QTime *time) const;
#endif
@ -202,7 +202,7 @@ public:
private:
int sectionMaxSize(Section s, int count) const;
QString sectionText(const QString &text, int sectionIndex, int index) const;
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
StateNode scanString(const QDateTime &defaultValue,
bool fixup, QString *input) const;
struct ParsedSection {
@ -237,7 +237,7 @@ private:
PossibleBoth = 4
};
AmPmFinder findAmPm(QString &str, int index, int *used = 0) const;
#endif // QT_NO_DATESTRING
#endif // datestring
bool potentialValue(const QStringRef &str, int min, int max, int index,
const QDateTime &currentValue, int insert) const;

View File

@ -2074,7 +2074,7 @@ QString QLocale::dateTimeFormat(FormatType format) const
\sa timeFormat(), toDate(), toDateTime(), QTime::fromString()
*/
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
QTime QLocale::toTime(const QString &string, FormatType format) const
{
return toTime(string, timeFormat(format));
@ -2092,7 +2092,7 @@ QTime QLocale::toTime(const QString &string, FormatType format) const
\sa dateFormat(), toTime(), toDateTime(), QDate::fromString()
*/
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
QDate QLocale::toDate(const QString &string, FormatType format) const
{
return toDate(string, dateFormat(format));
@ -2111,7 +2111,7 @@ QDate QLocale::toDate(const QString &string, FormatType format) const
\sa dateTimeFormat(), toTime(), toDate(), QDateTime::fromString()
*/
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
QDateTime QLocale::toDateTime(const QString &string, FormatType format) const
{
return toDateTime(string, dateTimeFormat(format));
@ -2129,7 +2129,7 @@ QDateTime QLocale::toDateTime(const QString &string, FormatType format) const
\sa timeFormat(), toDate(), toDateTime(), QTime::fromString()
*/
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
QTime QLocale::toTime(const QString &string, const QString &format) const
{
QTime time;
@ -2160,7 +2160,7 @@ QTime QLocale::toTime(const QString &string, const QString &format) const
\sa dateFormat(), toTime(), toDateTime(), QDate::fromString()
*/
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
QDate QLocale::toDate(const QString &string, const QString &format) const
{
QDate date;
@ -2191,7 +2191,7 @@ QDate QLocale::toDate(const QString &string, const QString &format) const
\sa dateTimeFormat(), toTime(), toDate(), QDateTime::fromString()
*/
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
QDateTime QLocale::toDateTime(const QString &string, const QString &format) const
{
#if QT_CONFIG(datetimeparser)

View File

@ -1004,7 +1004,7 @@ public:
QString dateFormat(FormatType format = LongFormat) const;
QString timeFormat(FormatType format = LongFormat) const;
QString dateTimeFormat(FormatType format = LongFormat) const;
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
QDate toDate(const QString &string, FormatType = LongFormat) const;
QTime toTime(const QString &string, FormatType = LongFormat) const;
QDateTime toDateTime(const QString &string, FormatType format = LongFormat) const;

View File

@ -5205,8 +5205,10 @@ void qBlendTexture(int count, const QSpan *spans, void *userData)
case QImage::Format_RGB16:
proc = processTextureSpansRGB16[blendType];
break;
#if defined(__SSE2__) || defined(__ARM_NEON__) || (Q_PROCESSOR_WORDSIZE == 8)
case QImage::Format_ARGB32:
case QImage::Format_RGBA8888:
#endif
case QImage::Format_BGR30:
case QImage::Format_A2BGR30_Premultiplied:
case QImage::Format_RGB30:

View File

@ -24,8 +24,7 @@ HEADERS += \
access/qabstractnetworkcache.h \
access/qnetworkfile_p.h \
access/qhsts_p.h \
access/qhstspolicy.h \
access/qhstsstore_p.h
access/qhstspolicy.h
SOURCES += \
access/qnetworkaccessauthenticationmanager.cpp \
@ -45,8 +44,7 @@ SOURCES += \
access/qabstractnetworkcache.cpp \
access/qnetworkfile.cpp \
access/qhsts.cpp \
access/qhstspolicy.cpp \
access/qhstsstore.cpp
access/qhstspolicy.cpp
qtConfig(ftp) {
HEADERS += \
@ -66,6 +64,14 @@ qtConfig(networkdiskcache) {
SOURCES += access/qnetworkdiskcache.cpp
}
qtConfig(settings) {
HEADERS += \
access/qhstsstore_p.h
SOURCES += \
access/qhstsstore.cpp
}
mac: LIBS_PRIVATE += -framework Security
wasm {

View File

@ -525,7 +525,7 @@ static void _q_parseUnixDir(const QStringList &tokens, const QString &userName,
// Resolve the modification date by parsing all possible formats
QDateTime dateTime;
int n = 0;
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
do {
dateTime = QLocale::c().toDateTime(dateString, formats.at(n++));
} while (n < formats.size() && (!dateTime.isValid()));
@ -600,7 +600,7 @@ static void _q_parseDosDir(const QStringList &tokens, const QString &userName, Q
info->setWritable(info->isFile());
QDateTime dateTime;
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
dateTime = QLocale::c().toDateTime(tokens.at(1), QLatin1String("MM-dd-yy hh:mmAP"));
if (dateTime.date().year() < 1971) {
dateTime.setDate(QDate(dateTime.date().year() + 100,

View File

@ -37,13 +37,16 @@
**
****************************************************************************/
#include "qhstsstore_p.h"
#include "qhsts_p.h"
#include "QtCore/private/qipaddress_p.h"
#include "QtCore/qvector.h"
#include "QtCore/qlist.h"
#if QT_CONFIG(settings)
#include "qhstsstore_p.h"
#endif // QT_CONFIG(settings)
QT_BEGIN_NAMESPACE
static bool is_valid_domain_name(const QString &host)
@ -83,8 +86,10 @@ void QHstsCache::updateFromHeaders(const QList<QPair<QByteArray, QByteArray>> &h
QHstsHeaderParser parser;
if (parser.parse(headers)) {
updateKnownHost(url.host(), parser.expirationDate(), parser.includeSubDomains());
#if QT_CONFIG(settings)
if (hstsStore)
hstsStore->synchronize();
#endif // QT_CONFIG(settings)
}
}
@ -93,12 +98,14 @@ void QHstsCache::updateFromPolicies(const QVector<QHstsPolicy> &policies)
for (const auto &policy : policies)
updateKnownHost(policy.host(), policy.expiry(), policy.includesSubDomains());
#if QT_CONFIG(settings)
if (hstsStore && policies.size()) {
// These policies are coming either from store or from QNAM's setter
// function. As a result we can notice expired or new policies, time
// to sync ...
hstsStore->synchronize();
}
#endif // QT_CONFIG(settings)
}
void QHstsCache::updateKnownHost(const QUrl &url, const QDateTime &expires,
@ -108,8 +115,10 @@ void QHstsCache::updateKnownHost(const QUrl &url, const QDateTime &expires,
return;
updateKnownHost(url.host(), expires, includeSubDomains);
#if QT_CONFIG(settings)
if (hstsStore)
hstsStore->synchronize();
#endif // QT_CONFIG(settings)
}
void QHstsCache::updateKnownHost(const QString &host, const QDateTime &expires,
@ -137,8 +146,10 @@ void QHstsCache::updateKnownHost(const QString &host, const QDateTime &expires,
}
knownHosts.insert(pos, {hostName, newPolicy});
#if QT_CONFIG(settings)
if (hstsStore)
hstsStore->addToObserved(newPolicy);
#endif // QT_CONFIG(settings)
return;
}
@ -149,8 +160,10 @@ void QHstsCache::updateKnownHost(const QString &host, const QDateTime &expires,
else
return;
#if QT_CONFIG(settings)
if (hstsStore)
hstsStore->addToObserved(newPolicy);
#endif // QT_CONFIG(settings)
}
bool QHstsCache::isKnownHost(const QUrl &url) const
@ -187,10 +200,12 @@ bool QHstsCache::isKnownHost(const QUrl &url) const
if (pos != knownHosts.end()) {
if (pos->second.isExpired()) {
knownHosts.erase(pos);
#if QT_CONFIG(settings)
if (hstsStore) {
// Inform our store that this policy has expired.
hstsStore->addToObserved(pos->second);
}
#endif // QT_CONFIG(settings)
} else if (!superDomainMatch || pos->second.includesSubDomains()) {
return true;
}
@ -221,6 +236,7 @@ QVector<QHstsPolicy> QHstsCache::policies() const
return values;
}
#if QT_CONFIG(settings)
void QHstsCache::setStore(QHstsStore *store)
{
// Caller retains ownership of store, which must outlive this cache.
@ -248,6 +264,7 @@ void QHstsCache::setStore(QHstsStore *store)
updateFromPolicies(restored);
}
}
#endif // QT_CONFIG(settings)
// The parser is quite simple: 'nextToken' knowns exactly what kind of tokens
// are valid and it will return false if something else was found; then

View File

@ -69,8 +69,6 @@ QT_BEGIN_NAMESPACE
template<typename T> class QList;
template <typename T> class QVector;
class QHstsStore;
class Q_AUTOTEST_EXPORT QHstsCache
{
public:
@ -85,7 +83,9 @@ public:
QVector<QHstsPolicy> policies() const;
void setStore(QHstsStore *store);
#if QT_CONFIG(settings)
void setStore(class QHstsStore *store);
#endif // QT_CONFIG(settings)
private:
@ -119,7 +119,9 @@ private:
};
mutable std::map<HostName, QHstsPolicy> knownHosts;
#if QT_CONFIG(settings)
QHstsStore *hstsStore = nullptr;
#endif // QT_CONFIG(settings)
};
class Q_AUTOTEST_EXPORT QHstsHeaderParser

View File

@ -53,6 +53,8 @@
#include <QtNetwork/private/qtnetworkglobal_p.h>
QT_REQUIRE_CONFIG(settings);
#include <QtCore/qsettings.h>
#include <QtCore/qvector.h>

View File

@ -423,7 +423,7 @@ void QNetworkAccessFtpBackend::ftpRawCommandReply(int code, const QString &text)
if (id == sizeId) {
// reply to the size command
setHeader(QNetworkRequest::ContentLengthHeader, text.toLongLong());
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
} else if (id == mdtmId) {
QDateTime dt = QDateTime::fromString(text, QLatin1String("yyyyMMddHHmmss"));
setHeader(QNetworkRequest::LastModifiedHeader, dt);

View File

@ -48,6 +48,10 @@
#include "qhstspolicy.h"
#include "qhsts_p.h"
#if QT_CONFIG(settings)
#include "qhstsstore_p.h"
#endif // QT_CONFIG(settings)
#include "QtNetwork/qnetworksession.h"
#include "QtNetwork/private/qsharednetworksession_p.h"
@ -763,9 +767,14 @@ bool QNetworkAccessManager::isStrictTransportSecurityEnabled() const
void QNetworkAccessManager::enableStrictTransportSecurityStore(bool enabled, const QString &storeDir)
{
#if QT_CONFIG(settings)
Q_D(QNetworkAccessManager);
d->stsStore.reset(enabled ? new QHstsStore(storeDir) : nullptr);
d->stsCache.setStore(d->stsStore.data());
#else
Q_UNUSED(enabled) Q_UNUSED(storeDir)
qWarning("HSTS permanent store requires the feature 'settings' enabled");
#endif // QT_CONFIG(settings)
}
/*!
@ -779,8 +788,12 @@ void QNetworkAccessManager::enableStrictTransportSecurityStore(bool enabled, con
bool QNetworkAccessManager::isStrictTransportSecurityStoreEnabled() const
{
#if QT_CONFIG(settings)
Q_D(const QNetworkAccessManager);
return bool(d->stsStore.data());
#else
return false;
#endif // QT_CONFIG(settings)
}
/*!

View File

@ -56,7 +56,6 @@
#include "qnetworkaccesscache_p.h"
#include "qnetworkaccessbackend_p.h"
#include "qnetworkrequest.h"
#include "qhstsstore_p.h"
#include "qhsts_p.h"
#include "private/qobject_p.h"
#include "QtNetwork/qnetworkproxy.h"
@ -66,6 +65,10 @@
#include "QtNetwork/qnetworkconfigmanager.h"
#endif
#if QT_CONFIG(settings)
#include "qhstsstore_p.h"
#endif // QT_CONFIG(settings)
QT_BEGIN_NAMESPACE
class QAuthenticator;
@ -215,7 +218,9 @@ public:
Q_AUTOTEST_EXPORT static void clearConnectionCache(QNetworkAccessManager *manager);
QHstsCache stsCache;
#if QT_CONFIG(settings)
QScopedPointer<QHstsStore> stsStore;
#endif // QT_CONFIG(settings)
bool stsEnabled = false;
#ifndef QT_NO_BEARERMANAGEMENT

View File

@ -47,7 +47,7 @@
#include "QtCore/qdatetime.h"
#include <ctype.h>
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
# include <stdio.h>
#endif
@ -1273,7 +1273,7 @@ QDateTime QNetworkHeadersPrivate::fromHttpDate(const QByteArray &value)
int pos = value.indexOf(',');
QDateTime dt;
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
if (pos == -1) {
// no comma -> asctime(3) format
dt = QDateTime::fromString(QString::fromLatin1(value), Qt::TextDate);
@ -1300,7 +1300,7 @@ QDateTime QNetworkHeadersPrivate::fromHttpDate(const QByteArray &value)
dt = c.toDateTime(sansWeekday, QLatin1String("dd-MMM-yy hh:mm:ss 'GMT'"));
}
}
#endif // QT_NO_DATESTRING
#endif // datestring
if (dt.isValid())
dt.setTimeSpec(Qt::UTC);

View File

@ -761,7 +761,7 @@ QDebug operator<<(QDebug debug, const QSslCertificate &certificate)
<< ", " << certificate.issuerDisplayName()
<< ", " << certificate.subjectDisplayName()
<< ", " << certificate.subjectAlternativeNames()
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
<< ", " << certificate.effectiveDate()
<< ", " << certificate.expiryDate()
#endif

View File

@ -159,20 +159,20 @@ init_context:
case QSsl::TlsV1SslV3:
case QSsl::AnyProtocol:
minVersion = SSL3_VERSION;
maxVersion = TLS_MAX_VERSION;
maxVersion = 0;
break;
case QSsl::SecureProtocols:
case QSsl::TlsV1_0OrLater:
minVersion = TLS1_VERSION;
maxVersion = TLS_MAX_VERSION;
maxVersion = 0;
break;
case QSsl::TlsV1_1OrLater:
minVersion = TLS1_1_VERSION;
maxVersion = TLS_MAX_VERSION;
maxVersion = 0;
break;
case QSsl::TlsV1_2OrLater:
minVersion = TLS1_2_VERSION;
maxVersion = TLS_MAX_VERSION;
maxVersion = 0;
break;
#if QT_CONFIG(dtls)
case QSsl::DtlsV1_0:

View File

@ -45,6 +45,8 @@
#include <QtCore/QSharedDataPointer>
#include <QtCore/QMetaType>
QT_REQUIRE_CONFIG(ssl);
QT_BEGIN_NAMESPACE
class QSslPreSharedKeyAuthenticatorPrivate;

View File

@ -130,7 +130,7 @@ static inline QByteArray fromUnicode(QTextCodec *tc, const QString &str)
static inline QVariant qDateFromString(const QString &val)
{
#ifdef QT_NO_DATESTRING
#if !QT_CONFIG(datestring)
Q_UNUSED(val);
return QVariant(val);
#else
@ -142,7 +142,7 @@ static inline QVariant qDateFromString(const QString &val)
static inline QVariant qTimeFromString(const QString &val)
{
#ifdef QT_NO_DATESTRING
#if !QT_CONFIG(datestring)
Q_UNUSED(val);
return QVariant(val);
#else
@ -154,7 +154,7 @@ static inline QVariant qTimeFromString(const QString &val)
static inline QVariant qDateTimeFromString(QString &val)
{
#ifdef QT_NO_DATESTRING
#if !QT_CONFIG(datestring)
Q_UNUSED(val);
return QVariant(val);
#else

View File

@ -679,7 +679,7 @@ QVariant QPSQLResult::data(int i)
if (val[0] == '\0') {
return QVariant(QDate());
} else {
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
return QVariant(QDate::fromString(QString::fromLatin1(val), Qt::ISODate));
#else
return QVariant(QString::fromLatin1(val));
@ -687,7 +687,7 @@ QVariant QPSQLResult::data(int i)
}
case QVariant::Time: {
const QString str = QString::fromLatin1(val);
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
if (str.isEmpty())
return QVariant(QTime());
else
@ -698,7 +698,7 @@ QVariant QPSQLResult::data(int i)
}
case QVariant::DateTime: {
QString dtval = QString::fromLatin1(val);
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
if (dtval.length() < 10) {
return QVariant(QDateTime());
} else {
@ -1500,7 +1500,7 @@ QString QPSQLDriver::formatValue(const QSqlField &field, bool trimStrings) const
} else {
switch (int(field.type())) {
case QVariant::DateTime:
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
if (field.value().toDateTime().isValid()) {
// we force the value to be considered with a timezone information, and we force it to be UTC
// this is safe since postgresql stores only the UTC value and not the timezone offset (only used
@ -1513,10 +1513,10 @@ QString QPSQLDriver::formatValue(const QSqlField &field, bool trimStrings) const
}
#else
r = QLatin1String("NULL");
#endif // QT_NO_DATESTRING
#endif // datestring
break;
case QVariant::Time:
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
if (field.value().toTime().isValid()) {
r = QLatin1Char('\'') + field.value().toTime().toString(QLatin1String("hh:mm:ss.zzz")) + QLatin1Char('\'');
} else

View File

@ -617,7 +617,7 @@ QString QSqlDriver::formatValue(const QSqlField &field, bool trimStrings) const
else
r = field.value().toString();
break;
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
case QVariant::Date:
if (field.value().toDate().isValid())
r = QLatin1Char('\'') + field.value().toDate().toString(Qt::ISODate)

View File

@ -87,7 +87,7 @@ template<> inline char *toString(const QByteArray &ba)
return QTest::toPrettyCString(ba.constData(), ba.length());
}
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
template<> inline char *toString(const QTime &time)
{
return time.isValid()
@ -108,7 +108,7 @@ template<> inline char *toString(const QDateTime &dateTime)
? qstrdup(qPrintable(dateTime.toString(QStringViewLiteral("yyyy/MM/dd hh:mm:ss.zzz[t]"))))
: qstrdup("Invalid QDateTime");
}
#endif // QT_NO_DATESTRING
#endif // datestring
template<> inline char *toString(const QChar &c)
{

View File

@ -797,7 +797,7 @@ QString QFileSystemModelPrivate::time(const QModelIndex &index) const
{
if (!index.isValid())
return QString();
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
return node(index)->lastModified().toString(Qt::SystemLocaleDate);
#else
Q_UNUSED(index);

View File

@ -1319,7 +1319,7 @@ QString QDirModelPrivate::type(const QModelIndex &index) const
QString QDirModelPrivate::time(const QModelIndex &index) const
{
#ifndef QT_NO_DATESTRING
#if QT_CONFIG(datestring)
return node(index)->info.lastModified().toString(Qt::LocalDate);
#else
Q_UNUSED(index);

View File

@ -2213,9 +2213,6 @@ void QHeaderViewPrivate::_q_sectionsAboutToBeChanged(const QList<QPersistentMode
? model->index(0, logical, root)
: model->index(logical, 0, root),
s});
if (layoutChangePersistentSections.size() > 1000)
break;
}
}

View File

@ -1243,7 +1243,14 @@ void QCompleter::setPopup(QAbstractItemView *popup)
Qt::FocusPolicy origPolicy = Qt::NoFocus;
if (d->widget)
origPolicy = d->widget->focusPolicy();
popup->setParent(nullptr, Qt::Popup);
// Mark the widget window as a popup, so that if the last non-popup window is closed by the
// user, the application should not be prevented from exiting. It needs to be set explicitly via
// setWindowFlag(), because passing the flag via setParent(parent, windowFlags) does not call
// QWidgetPrivate::adjustQuitOnCloseAttribute(), and causes an application not to exit if the
// popup ends up being the last window.
popup->setParent(nullptr);
popup->setWindowFlag(Qt::Popup);
popup->setFocusPolicy(Qt::NoFocus);
if (d->widget)
d->widget->setFocusPolicy(origPolicy);