diff --git a/dist/changes-5.11.2 b/dist/changes-5.11.2 index 5bb61339dd..acf8570e8e 100644 --- a/dist/changes-5.11.2 +++ b/dist/changes-5.11.2 @@ -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. diff --git a/src/3rdparty/iaccessible2/qt_attribution.json b/src/3rdparty/iaccessible2/qt_attribution.json index 545ffe4d63..290d0d4b7d 100644 --- a/src/3rdparty/iaccessible2/qt_attribution.json +++ b/src/3rdparty/iaccessible2/qt_attribution.json @@ -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", diff --git a/src/corelib/global/qconfig-bootstrapped.h b/src/corelib/global/qconfig-bootstrapped.h index a8dbb3edcd..506c8513dc 100644 --- a/src/corelib/global/qconfig-bootstrapped.h +++ b/src/corelib/global/qconfig-bootstrapped.h @@ -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() ? 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() ? 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 diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp index 422d08f32c..e727f00c8e 100644 --- a/src/corelib/global/qlibraryinfo.cpp +++ b/src/corelib/global/qlibraryinfo.cpp @@ -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 diff --git a/src/corelib/global/qlibraryinfo.h b/src/corelib/global/qlibraryinfo.h index 809813d99d..80fc5bd4fc 100644 --- a/src/corelib/global/qlibraryinfo.h +++ b/src/corelib/global/qlibraryinfo.h @@ -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; diff --git a/src/corelib/kernel/qcore_unix_p.h b/src/corelib/kernel/qcore_unix_p.h index cb98bef347..5a2a29a327 100644 --- a/src/corelib/kernel/qcore_unix_p.h +++ b/src/corelib/kernel/qcore_unix_p.h @@ -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 diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp index 4d1aa911f7..0b4c3f387f 100644 --- a/src/corelib/kernel/qvariant.cpp +++ b/src/corelib/kernel/qvariant.cpp @@ -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(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(result); if (d->type == QVariant::DateTime) *dt = v_cast(d)->date(); -#ifndef QT_NO_DATESTRING +#if QT_CONFIG(datestring) else if (d->type == QVariant::String) *dt = QDate::fromString(*v_cast(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(d)->time(); break; -#ifndef QT_NO_DATESTRING +#if QT_CONFIG(datestring) case QVariant::String: *t = QTime::fromString(*v_cast(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(result); switch (d->type) { -#ifndef QT_NO_DATESTRING +#if QT_CONFIG(datestring) case QVariant::String: *dt = QDateTime::fromString(*v_cast(d), Qt::ISODate); break; diff --git a/src/corelib/plugin/qelfparser_p.h b/src/corelib/plugin/qelfparser_p.h index 1d3578255f..cdf055329d 100644 --- a/src/corelib/plugin/qelfparser_p.h +++ b/src/corelib/plugin/qelfparser_p.h @@ -84,7 +84,7 @@ public: int m_endian; int m_bits; - int m_stringTableFileOffset; + qelfoff_t m_stringTableFileOffset; template T read(const char *s) diff --git a/src/corelib/thread/qfuturewatcher.cpp b/src/corelib/thread/qfuturewatcher.cpp index 5b68af1fbc..faeb6b3a28 100644 --- a/src/corelib/thread/qfuturewatcher.cpp +++ b/src/corelib/thread/qfuturewatcher.cpp @@ -98,7 +98,9 @@ QT_BEGIN_NAMESPACE /*! \fn template QFutureWatcher::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 bool QFutureWatcher::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 bool QFutureWatcher::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. diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp index 9aeebe624d..816bd974eb 100644 --- a/src/corelib/tools/qdatetime.cpp +++ b/src/corelib/tools/qdatetime.cpp @@ -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 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 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 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 diff --git a/src/corelib/tools/qdatetime.h b/src/corelib/tools/qdatetime.h index 5a7b75db62..43271b34ed 100644 --- a/src/corelib/tools/qdatetime.h +++ b/src/corelib/tools/qdatetime.h @@ -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 &); diff --git a/src/corelib/tools/qdatetimeparser.cpp b/src/corelib/tools/qdatetimeparser.cpp index d03518e70d..18c44c3a17 100644 --- a/src/corelib/tools/qdatetimeparser.cpp +++ b/src/corelib/tools/qdatetimeparser.cpp @@ -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 ¤tValue, 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 { diff --git a/src/corelib/tools/qdatetimeparser_p.h b/src/corelib/tools/qdatetimeparser_p.h index c9e63fe307..f7e6e351fe 100644 --- a/src/corelib/tools/qdatetimeparser_p.h +++ b/src/corelib/tools/qdatetimeparser_p.h @@ -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 ¤tValue, int insert) const; diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp index b285e58779..ddc973cb37 100644 --- a/src/corelib/tools/qlocale.cpp +++ b/src/corelib/tools/qlocale.cpp @@ -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) diff --git a/src/corelib/tools/qlocale.h b/src/corelib/tools/qlocale.h index 8e6c5c503b..f3afb8c406 100644 --- a/src/corelib/tools/qlocale.h +++ b/src/corelib/tools/qlocale.h @@ -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; diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index 4b1031daaf..0264059a5c 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -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: diff --git a/src/network/access/access.pri b/src/network/access/access.pri index b068f96283..8a92308f12 100644 --- a/src/network/access/access.pri +++ b/src/network/access/access.pri @@ -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 { diff --git a/src/network/access/qftp.cpp b/src/network/access/qftp.cpp index 719e3536b4..feece4ebaf 100644 --- a/src/network/access/qftp.cpp +++ b/src/network/access/qftp.cpp @@ -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, diff --git a/src/network/access/qhsts.cpp b/src/network/access/qhsts.cpp index a015feb044..ce70b6af90 100644 --- a/src/network/access/qhsts.cpp +++ b/src/network/access/qhsts.cpp @@ -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> &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 &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 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 diff --git a/src/network/access/qhsts_p.h b/src/network/access/qhsts_p.h index bc8708341d..c219d9eab5 100644 --- a/src/network/access/qhsts_p.h +++ b/src/network/access/qhsts_p.h @@ -69,8 +69,6 @@ QT_BEGIN_NAMESPACE template class QList; template class QVector; -class QHstsStore; - class Q_AUTOTEST_EXPORT QHstsCache { public: @@ -85,7 +83,9 @@ public: QVector 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 knownHosts; +#if QT_CONFIG(settings) QHstsStore *hstsStore = nullptr; +#endif // QT_CONFIG(settings) }; class Q_AUTOTEST_EXPORT QHstsHeaderParser diff --git a/src/network/access/qhstsstore_p.h b/src/network/access/qhstsstore_p.h index 13042839c4..e82596b250 100644 --- a/src/network/access/qhstsstore_p.h +++ b/src/network/access/qhstsstore_p.h @@ -53,6 +53,8 @@ #include +QT_REQUIRE_CONFIG(settings); + #include #include diff --git a/src/network/access/qnetworkaccessftpbackend.cpp b/src/network/access/qnetworkaccessftpbackend.cpp index 269845ed39..fd6589b396 100644 --- a/src/network/access/qnetworkaccessftpbackend.cpp +++ b/src/network/access/qnetworkaccessftpbackend.cpp @@ -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); diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp index 375b8763ee..263469ce38 100644 --- a/src/network/access/qnetworkaccessmanager.cpp +++ b/src/network/access/qnetworkaccessmanager.cpp @@ -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) } /*! diff --git a/src/network/access/qnetworkaccessmanager_p.h b/src/network/access/qnetworkaccessmanager_p.h index ffed24a314..5cab4928e4 100644 --- a/src/network/access/qnetworkaccessmanager_p.h +++ b/src/network/access/qnetworkaccessmanager_p.h @@ -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 stsStore; +#endif // QT_CONFIG(settings) bool stsEnabled = false; #ifndef QT_NO_BEARERMANAGEMENT diff --git a/src/network/access/qnetworkrequest.cpp b/src/network/access/qnetworkrequest.cpp index 57529761ee..689eecfbb9 100644 --- a/src/network/access/qnetworkrequest.cpp +++ b/src/network/access/qnetworkrequest.cpp @@ -47,7 +47,7 @@ #include "QtCore/qdatetime.h" #include -#ifndef QT_NO_DATESTRING +#if QT_CONFIG(datestring) # include #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); diff --git a/src/network/ssl/qsslcertificate.cpp b/src/network/ssl/qsslcertificate.cpp index 31ff296480..d153e0b929 100644 --- a/src/network/ssl/qsslcertificate.cpp +++ b/src/network/ssl/qsslcertificate.cpp @@ -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 diff --git a/src/network/ssl/qsslcontext_openssl11.cpp b/src/network/ssl/qsslcontext_openssl11.cpp index 7d11e51e8b..708cb7bb0e 100644 --- a/src/network/ssl/qsslcontext_openssl11.cpp +++ b/src/network/ssl/qsslcontext_openssl11.cpp @@ -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: diff --git a/src/network/ssl/qsslpresharedkeyauthenticator.h b/src/network/ssl/qsslpresharedkeyauthenticator.h index d0e2eda973..423f7731b4 100644 --- a/src/network/ssl/qsslpresharedkeyauthenticator.h +++ b/src/network/ssl/qsslpresharedkeyauthenticator.h @@ -45,6 +45,8 @@ #include #include +QT_REQUIRE_CONFIG(ssl); + QT_BEGIN_NAMESPACE class QSslPreSharedKeyAuthenticatorPrivate; diff --git a/src/plugins/sqldrivers/mysql/qsql_mysql.cpp b/src/plugins/sqldrivers/mysql/qsql_mysql.cpp index e2455f87fb..58da2a3c51 100644 --- a/src/plugins/sqldrivers/mysql/qsql_mysql.cpp +++ b/src/plugins/sqldrivers/mysql/qsql_mysql.cpp @@ -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 diff --git a/src/plugins/sqldrivers/psql/qsql_psql.cpp b/src/plugins/sqldrivers/psql/qsql_psql.cpp index 5796644d34..bf0493b0c3 100644 --- a/src/plugins/sqldrivers/psql/qsql_psql.cpp +++ b/src/plugins/sqldrivers/psql/qsql_psql.cpp @@ -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 diff --git a/src/sql/kernel/qsqldriver.cpp b/src/sql/kernel/qsqldriver.cpp index 2d306e9fae..8c6ae382f6 100644 --- a/src/sql/kernel/qsqldriver.cpp +++ b/src/sql/kernel/qsqldriver.cpp @@ -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) diff --git a/src/testlib/qtest.h b/src/testlib/qtest.h index 927b68bd27..2578037946 100644 --- a/src/testlib/qtest.h +++ b/src/testlib/qtest.h @@ -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) { diff --git a/src/widgets/dialogs/qfilesystemmodel.cpp b/src/widgets/dialogs/qfilesystemmodel.cpp index e4edd2f6ef..e54fdc97d4 100644 --- a/src/widgets/dialogs/qfilesystemmodel.cpp +++ b/src/widgets/dialogs/qfilesystemmodel.cpp @@ -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); diff --git a/src/widgets/itemviews/qdirmodel.cpp b/src/widgets/itemviews/qdirmodel.cpp index 449850c42e..78fc623fb5 100644 --- a/src/widgets/itemviews/qdirmodel.cpp +++ b/src/widgets/itemviews/qdirmodel.cpp @@ -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); diff --git a/src/widgets/itemviews/qheaderview.cpp b/src/widgets/itemviews/qheaderview.cpp index 3396a91dc5..7bfa51337d 100644 --- a/src/widgets/itemviews/qheaderview.cpp +++ b/src/widgets/itemviews/qheaderview.cpp @@ -2213,9 +2213,6 @@ void QHeaderViewPrivate::_q_sectionsAboutToBeChanged(const QListindex(0, logical, root) : model->index(logical, 0, root), s}); - - if (layoutChangePersistentSections.size() > 1000) - break; } } diff --git a/src/widgets/util/qcompleter.cpp b/src/widgets/util/qcompleter.cpp index df280119cb..0daa4a4b41 100644 --- a/src/widgets/util/qcompleter.cpp +++ b/src/widgets/util/qcompleter.cpp @@ -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);