diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-08-31 01:01:42 +0200 |
---|---|---|
committer | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-08-31 01:01:53 +0200 |
commit | d795272af5434bdcc794e80e077323a0d1140ab2 (patch) | |
tree | 5888fed53d5b747e122ade9517ce750ffba23eca /src | |
parent | a5ba29b79d4793a3c18aaf64f24582d93c0fe4e8 (diff) | |
parent | a2a4c3a5ff50dc68f6931917c8f017f9b4d69b6b (diff) |
Merge "Merge remote-tracking branch 'origin/5.14' into dev"
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/io/qfileinfo.cpp | 93 | ||||
-rw-r--r-- | src/corelib/io/qfileinfo.h | 19 | ||||
-rw-r--r-- | src/corelib/text/qlocale_win.cpp | 8 | ||||
-rw-r--r-- | src/corelib/time/qcalendar.cpp | 2 | ||||
-rw-r--r-- | src/corelib/time/qdatetime.cpp | 107 | ||||
-rw-r--r-- | src/corelib/time/qdatetime.h | 16 | ||||
-rw-r--r-- | src/corelib/time/qdatetimeparser.cpp | 9 | ||||
-rw-r--r-- | src/corelib/time/qgregoriancalendar.cpp | 39 | ||||
-rw-r--r-- | src/corelib/time/qgregoriancalendar_p.h | 8 | ||||
-rw-r--r-- | src/plugins/platforms/offscreen/qoffscreencommon.cpp | 3 | ||||
-rw-r--r-- | src/plugins/platforms/vnc/qvncclient.cpp | 13 | ||||
-rw-r--r-- | src/widgets/widgets/qcalendarwidget.cpp | 106 | ||||
-rw-r--r-- | src/widgets/widgets/qdatetimeedit.cpp | 6 | ||||
-rw-r--r-- | src/widgets/widgets/qdatetimeedit_p.h | 12 |
14 files changed, 262 insertions, 179 deletions
diff --git a/src/corelib/io/qfileinfo.cpp b/src/corelib/io/qfileinfo.cpp index b720966d8f..a6f8b45ea3 100644 --- a/src/corelib/io/qfileinfo.cpp +++ b/src/corelib/io/qfileinfo.cpp @@ -311,19 +311,6 @@ QDateTime &QFileInfoPrivate::getFileTime(QAbstractFileEngine::FileTime request) */ /*! - \enum QFileInfo::FileType - - This enum is returned by type() to describe the type of the file system - entity described by the QFileInfo object. - - \value Unknown The object refers to an unknown item. - \value Regular The object refers to a regular file. - \value Directory The object refers to a directory. - \value SymbolicLink The object refers to a symbolic link. - \value Shortcut The object refers to a shortcut. -*/ - -/*! \fn QFileInfo &QFileInfo::operator=(QFileInfo &&other) Move-assigns \a other to this QFileInfo instance. @@ -1008,7 +995,11 @@ bool QFileInfo::isNativePath() const */ bool QFileInfo::isFile() const { - return (type() & FileTypeMask) == Regular; + Q_D(const QFileInfo); + return d->checkAttribute<bool>( + QFileSystemMetaData::FileType, + [d]() { return d->metaData.isFile(); }, + [d]() { return d->getFileFlags(QAbstractFileEngine::FileType); }); } /*! @@ -1019,7 +1010,11 @@ bool QFileInfo::isFile() const */ bool QFileInfo::isDir() const { - return (type() & FileTypeMask) == Directory; + Q_D(const QFileInfo); + return d->checkAttribute<bool>( + QFileSystemMetaData::DirectoryType, + [d]() { return d->metaData.isDirectory(); }, + [d]() { return d->getFileFlags(QAbstractFileEngine::DirectoryType); }); } @@ -1070,8 +1065,6 @@ bool QFileInfo::isSymLink() const } /*! - \fn bool QFileInfo::isSymbolicLink() const - Returns \c true if this object points to a symbolic link; otherwise returns \c false. @@ -1091,9 +1084,16 @@ bool QFileInfo::isSymLink() const \sa isFile(), isDir(), isShortcut(), symLinkTarget() */ -/*! - \fn bool QFileInfo::isShortcut() const +bool QFileInfo::isSymbolicLink() const +{ + Q_D(const QFileInfo); + return d->checkAttribute<bool>( + QFileSystemMetaData::LegacyLinkType, + [d]() { return d->metaData.isLink(); }, + [d]() { return d->getFileFlags(QAbstractFileEngine::LinkType); }); +} +/*! Returns \c true if this object points to a shortcut; otherwise returns \c false. @@ -1110,6 +1110,14 @@ bool QFileInfo::isSymLink() const \sa isFile(), isDir(), isSymbolicLink(), symLinkTarget() */ +bool QFileInfo::isShortcut() const +{ + Q_D(const QFileInfo); + return d->checkAttribute<bool>( + QFileSystemMetaData::LegacyLinkType, + [d]() { return d->metaData.isLnkFile(); }, + [d]() { return d->getFileFlags(QAbstractFileEngine::LinkType); }); +} /*! Returns \c true if the object points to a directory or to a symbolic @@ -1314,53 +1322,6 @@ qint64 QFileInfo::size() const }); } -/*! - Returns the QFileInfo::FileTypes. - - QFileInfo::FileTypes combines with an indirection flag (link type) and a - base type it refers to. - - For example, \c SymbolicLink combines with \c Regular meaning a symlink to - a regular file. - - In addition, FileTypeMask and LinkTypeMask are used to extract the base - type and link type respectively. - - \sa isFile(), isDir(), isShortcut(), isSymbolicLink() -*/ -QFileInfo::FileTypes QFileInfo::type() const -{ - Q_D(const QFileInfo); - - QFileInfo::FileTypes type = QFileInfo::Unknown; - if (d->checkAttribute<bool>( - QFileSystemMetaData::LegacyLinkType, - [d]() { return d->metaData.isLnkFile(); }, - [d]() { return d->getFileFlags(QAbstractFileEngine::LinkType); })) { - type = QFileInfo::Shortcut; - } else if (d->checkAttribute<bool>( - QFileSystemMetaData::LegacyLinkType, - [d]() { return d->metaData.isLink(); }, - [d]() { return d->getFileFlags(QAbstractFileEngine::LinkType); })) { - type = QFileInfo::SymbolicLink; - } - - if (d->checkAttribute<bool>( - QFileSystemMetaData::DirectoryType, - [d]() { return d->metaData.isDirectory(); }, - [d]() { return d->getFileFlags(QAbstractFileEngine::DirectoryType); })) { - return type | QFileInfo::Directory; - } - - if (d->checkAttribute<bool>( - QFileSystemMetaData::FileType, - [d]() { return d->metaData.isFile(); }, - [d]() { return d->getFileFlags(QAbstractFileEngine::FileType); })) { - return type | QFileInfo::Regular; - } - return type; -} - #if QT_DEPRECATED_SINCE(5, 10) /*! \deprecated diff --git a/src/corelib/io/qfileinfo.h b/src/corelib/io/qfileinfo.h index 1cbeafdd4a..3ac028085a 100644 --- a/src/corelib/io/qfileinfo.h +++ b/src/corelib/io/qfileinfo.h @@ -66,20 +66,6 @@ public: QFileInfo(const QFileInfo &fileinfo); ~QFileInfo(); - enum FileType { - Unknown, - // base type - Regular, - Directory, - // indirection flag - SymbolicLink = 0x10, - Shortcut = 0x20, - // mask - FileTypeMask = 0x0f, - LinkTypeMask = 0xf0 - }; - Q_DECLARE_FLAGS(FileTypes, FileType) - QFileInfo &operator=(const QFileInfo &fileinfo); QFileInfo &operator=(QFileInfo &&other) noexcept { swap(other); return *this; } @@ -125,8 +111,8 @@ public: bool isFile() const; bool isDir() const; bool isSymLink() const; - inline bool isSymbolicLink() const { return type() & SymbolicLink; } - inline bool isShortcut() const { return type() & Shortcut; } + bool isSymbolicLink() const; + bool isShortcut() const; bool isRoot() const; bool isBundle() const; @@ -145,7 +131,6 @@ public: QFile::Permissions permissions() const; qint64 size() const; - FileTypes type() const; // ### Qt6: inline these functions #if QT_DEPRECATED_SINCE(5, 10) diff --git a/src/corelib/text/qlocale_win.cpp b/src/corelib/text/qlocale_win.cpp index dc904ad02d..79ea67f966 100644 --- a/src/corelib/text/qlocale_win.cpp +++ b/src/corelib/text/qlocale_win.cpp @@ -116,8 +116,8 @@ struct QSystemLocalePrivate QVariant dateTimeFormat(QLocale::FormatType); QVariant dayName(int, QLocale::FormatType); QVariant monthName(int, QLocale::FormatType); - QVariant toString(const QDate &, QLocale::FormatType); - QVariant toString(const QTime &, QLocale::FormatType); + QVariant toString(QDate, QLocale::FormatType); + QVariant toString(QTime, QLocale::FormatType); QVariant toString(const QDateTime &, QLocale::FormatType); QVariant measurementSystem(); QVariant collation(); @@ -394,7 +394,7 @@ QVariant QSystemLocalePrivate::monthName(int month, QLocale::FormatType type) return getLocaleInfo(lctype); } -QVariant QSystemLocalePrivate::toString(const QDate &date, QLocale::FormatType type) +QVariant QSystemLocalePrivate::toString(QDate date, QLocale::FormatType type) { SYSTEMTIME st; memset(&st, 0, sizeof(SYSTEMTIME)); @@ -413,7 +413,7 @@ QVariant QSystemLocalePrivate::toString(const QDate &date, QLocale::FormatType t return QString(); } -QVariant QSystemLocalePrivate::toString(const QTime &time, QLocale::FormatType type) +QVariant QSystemLocalePrivate::toString(QTime time, QLocale::FormatType type) { SYSTEMTIME st; memset(&st, 0, sizeof(SYSTEMTIME)); diff --git a/src/corelib/time/qcalendar.cpp b/src/corelib/time/qcalendar.cpp index f6bb242788..b569a6834c 100644 --- a/src/corelib/time/qcalendar.cpp +++ b/src/corelib/time/qcalendar.cpp @@ -810,7 +810,7 @@ bool QCalendar::isLuniSolar() const /*! Returns \c true if this calendar is solar. - A solar calendar is based primaril on the Sun's varying position in the sky, + A solar calendar is based primarily on the Sun's varying position in the sky, relative to the fixed stars. */ bool QCalendar::isSolar() const diff --git a/src/corelib/time/qdatetime.cpp b/src/corelib/time/qdatetime.cpp index 020eac6dec..a9fc47e053 100644 --- a/src/corelib/time/qdatetime.cpp +++ b/src/corelib/time/qdatetime.cpp @@ -74,6 +74,7 @@ #endif #include "qcalendar.h" +#include "qgregoriancalendar_p.h" QT_BEGIN_NAMESPACE @@ -105,6 +106,17 @@ static inline QDate fixedDate(QCalendar::YearMonthDay &&parts, QCalendar cal) return cal.dateFromParts(parts); } +static inline QDate fixedDate(QCalendar::YearMonthDay &&parts) +{ + if (parts.year) { + parts.day = qMin(parts.day, QGregorianCalendar::monthLength(parts.month, parts.year)); + qint64 jd; + if (QGregorianCalendar::julianFromParts(parts.year, parts.month, parts.day, &jd)) + return QDate::fromJulianDay(jd); + } + return QDate(); +} + /***************************************************************************** Date/Time formatting helper functions *****************************************************************************/ @@ -340,7 +352,8 @@ static int fromOffsetString(const QStringRef &offsetString, bool *valid) noexcep QDate::QDate(int y, int m, int d) { - *this = QCalendar().dateFromParts(y, m, d); + if (!QGregorianCalendar::julianFromParts(y, m, d, &jd)) + jd = nullJd(); } QDate::QDate(int y, int m, int d, QCalendar cal) @@ -405,7 +418,12 @@ int QDate::year(QCalendar cal) const int QDate::year() const { - return year(QCalendar()); + if (isValid()) { + const auto parts = QGregorianCalendar::partsFromJulian(jd); + if (parts.isValid()) + return parts.year; + } + return 0; } /*! @@ -452,7 +470,12 @@ int QDate::month(QCalendar cal) const int QDate::month() const { - return month(QCalendar()); + if (isValid()) { + const auto parts = QGregorianCalendar::partsFromJulian(jd); + if (parts.isValid()) + return parts.month; + } + return 0; } /*! @@ -480,7 +503,12 @@ int QDate::day(QCalendar cal) const int QDate::day() const { - return day(QCalendar()); + if (isValid()) { + const auto parts = QGregorianCalendar::partsFromJulian(jd); + if (parts.isValid()) + return parts.day; + } + return 0; } /*! @@ -507,7 +535,7 @@ int QDate::dayOfWeek(QCalendar cal) const int QDate::dayOfWeek() const { - return dayOfWeek(QCalendar()); + return isValid() ? QGregorianCalendar::weekDayOfJulian(jd) : 0; } /*! @@ -535,7 +563,12 @@ int QDate::dayOfYear(QCalendar cal) const int QDate::dayOfYear() const { - return dayOfYear(QCalendar()); + if (isValid()) { + qint64 first; + if (QGregorianCalendar::julianFromParts(year(), 1, 1, &first)) + return jd - first + 1; + } + return 0; } /*! @@ -563,7 +596,12 @@ int QDate::daysInMonth(QCalendar cal) const int QDate::daysInMonth() const { - return daysInMonth(QCalendar()); + if (isValid()) { + const auto parts = QGregorianCalendar::partsFromJulian(jd); + if (parts.isValid()) + return QGregorianCalendar::monthLength(parts.month, parts.year); + } + return 0; } /*! @@ -589,7 +627,7 @@ int QDate::daysInYear(QCalendar cal) const int QDate::daysInYear() const { - return daysInYear(QCalendar()); + return isValid() ? QGregorianCalendar::leapTest(year()) ? 366 : 365 : 0; } /*! @@ -1303,7 +1341,11 @@ QString QDate::toString(const QString &format, QCalendar cal) const */ bool QDate::setDate(int year, int month, int day) { - return setDate(year, month, day, QCalendar()); + if (QGregorianCalendar::julianFromParts(year, month, day, &jd)) + return true; + + jd = nullJd(); + return false; } /*! @@ -1339,7 +1381,7 @@ void QDate::getDate(int *year, int *month, int *day) const { QCalendar::YearMonthDay parts; // invalid by default if (isValid()) - parts = QCalendar().partsFromDate(*this); + parts = QGregorianCalendar::partsFromJulian(jd); const bool ok = parts.isValid(); if (year) @@ -1428,7 +1470,30 @@ QDate QDate::addMonths(int nmonths, QCalendar cal) const QDate QDate::addMonths(int nmonths) const { - return addMonths(nmonths, QCalendar()); + if (isNull()) + return QDate(); + + if (nmonths == 0) + return *this; + + auto parts = QGregorianCalendar::partsFromJulian(jd); + + if (!parts.isValid()) + return QDate(); + Q_ASSERT(parts.year); + + parts.month += nmonths; + while (parts.month <= 0) { + if (--parts.year) // skip over year 0 + parts.month += 12; + } + while (parts.month > 12) { + parts.month -= 12; + if (!++parts.year) // skip over year 0 + ++parts.year; + } + + return fixedDate(std::move(parts)); } /*! @@ -1470,7 +1535,21 @@ QDate QDate::addYears(int nyears, QCalendar cal) const QDate QDate::addYears(int nyears) const { - return addYears(nyears, QCalendar()); + if (isNull()) + return QDate(); + + auto parts = QGregorianCalendar::partsFromJulian(jd); + if (!parts.isValid()) + return QDate(); + + int old_y = parts.year; + parts.year += nyears; + + // If we just crossed (or hit) a missing year zero, adjust year by +/- 1: + if ((old_y > 0) != (parts.year > 0) || !parts.year) + parts.year += nyears > 0 ? +1 : -1; + + return fixedDate(std::move(parts)); } /*! @@ -1719,7 +1798,7 @@ QDate QDate::fromString(const QString &string, const QString &format) bool QDate::isValid(int year, int month, int day) { - return QCalendar().isDateValid(year, month, day); + return QGregorianCalendar::validParts(year, month, day); } /*! @@ -1733,7 +1812,7 @@ bool QDate::isValid(int year, int month, int day) bool QDate::isLeapYear(int y) { - return QCalendar().isLeapYear(y); + return QGregorianCalendar::leapTest(y); } /*! \fn static QDate QDate::fromJulianDay(qint64 jd) diff --git a/src/corelib/time/qdatetime.h b/src/corelib/time/qdatetime.h index e1909b85e3..3eae8ebf64 100644 --- a/src/corelib/time/qdatetime.h +++ b/src/corelib/time/qdatetime.h @@ -58,7 +58,7 @@ class QCalendar; class QTimeZone; class QDateTime; -class Q_CORE_EXPORT QDate +class Q_CORE_EXPORT QDate // ### Qt 6: change to be used by value, not const & { public: enum MonthNameType { // ### Qt 6: remove, along with methods using it @@ -138,7 +138,7 @@ public: Q_REQUIRED_RESULT QDate addYears(int years) const; Q_REQUIRED_RESULT QDate addMonths(int months, QCalendar cal) const; Q_REQUIRED_RESULT QDate addYears(int years, QCalendar cal) const; - qint64 daysTo(const QDate &) const; + qint64 daysTo(const QDate &) const; // ### Qt 6: QDate Q_DECL_CONSTEXPR bool operator==(const QDate &other) const { return jd == other.jd; } Q_DECL_CONSTEXPR bool operator!=(const QDate &other) const { return jd != other.jd; } @@ -177,7 +177,7 @@ private: }; Q_DECLARE_TYPEINFO(QDate, Q_MOVABLE_TYPE); -class Q_CORE_EXPORT QTime +class Q_CORE_EXPORT QTime // ### Qt 6: change to be used by value, not const & { explicit Q_DECL_CONSTEXPR QTime(int ms) : mds(ms) {} @@ -203,9 +203,9 @@ public: bool setHMS(int h, int m, int s, int ms = 0); Q_REQUIRED_RESULT QTime addSecs(int secs) const; - int secsTo(const QTime &) const; + int secsTo(const QTime &) const; // ### Qt 6: plain QTime Q_REQUIRED_RESULT QTime addMSecs(int ms) const; - int msecsTo(const QTime &) const; + int msecsTo(const QTime &) const; // ### Qt 6: plain QTime Q_DECL_CONSTEXPR bool operator==(const QTime &other) const { return mds == other.mds; } Q_DECL_CONSTEXPR bool operator!=(const QTime &other) const { return mds != other.mds; } @@ -236,7 +236,7 @@ private: friend class QDateTime; friend class QDateTimePrivate; -#ifndef QT_NO_DATASTREAM +#ifndef QT_NO_DATASTREAM // ### Qt 6: plain QTime friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QTime &); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QTime &); #endif @@ -287,7 +287,7 @@ class Q_CORE_EXPORT QDateTime public: QDateTime() noexcept(Data::CanBeSmall); - explicit QDateTime(const QDate &); + explicit QDateTime(const QDate &); // ### Qt 6: plain QDate, QTime QDateTime(const QDate &, const QTime &, Qt::TimeSpec spec = Qt::LocalTime); // ### Qt 6: Merge with above with default offsetSeconds = 0 QDateTime(const QDate &date, const QTime &time, Qt::TimeSpec spec, int offsetSeconds); @@ -319,7 +319,7 @@ public: qint64 toMSecsSinceEpoch() const; qint64 toSecsSinceEpoch() const; - void setDate(const QDate &date); + void setDate(const QDate &date); // ### Qt 6: plain QDate void setTime(const QTime &time); void setTimeSpec(Qt::TimeSpec spec); void setOffsetFromUtc(int offsetSeconds); diff --git a/src/corelib/time/qdatetimeparser.cpp b/src/corelib/time/qdatetimeparser.cpp index 3c54a259a4..d0f34358b9 100644 --- a/src/corelib/time/qdatetimeparser.cpp +++ b/src/corelib/time/qdatetimeparser.cpp @@ -60,6 +60,9 @@ QT_BEGIN_NAMESPACE +template <typename T> +using ShortVector = QVarLengthArray<T, 13>; // enough for month (incl. leap) and day-of-week names + QDateTimeParser::~QDateTimeParser() { } @@ -1538,7 +1541,7 @@ QDateTimeParser::parse(QString input, int position, const QDateTime &defaultValu length of overlap in *used (if \a used is non-NULL) and the first entry that overlapped this much in *usedText (if \a usedText is non-NULL). */ -static int findTextEntry(const QString &text, const QVector<QString> &entries, QString *usedText, int *used) +static int findTextEntry(const QString &text, const ShortVector<QString> &entries, QString *usedText, int *used) { if (text.isEmpty()) return -1; @@ -1586,7 +1589,7 @@ int QDateTimeParser::findMonth(const QString &str1, int startMonth, int sectionI QLocale::FormatType type = sn.count == 3 ? QLocale::ShortFormat : QLocale::LongFormat; QLocale l = locale(); - QVector<QString> monthNames; + ShortVector<QString> monthNames; monthNames.reserve(13 - startMonth); for (int month = startMonth; month <= 12; ++month) monthNames.append(calendar.monthName(l, month, year, type)); @@ -1605,7 +1608,7 @@ int QDateTimeParser::findDay(const QString &str1, int startDay, int sectionIndex QLocale::FormatType type = sn.count == 4 ? QLocale::LongFormat : QLocale::ShortFormat; QLocale l = locale(); - QVector<QString> daysOfWeek; + ShortVector<QString> daysOfWeek; daysOfWeek.reserve(8 - startDay); for (int day = startDay; day <= 7; ++day) daysOfWeek.append(l.dayName(day, type)); diff --git a/src/corelib/time/qgregoriancalendar.cpp b/src/corelib/time/qgregoriancalendar.cpp index d3db572aa7..447185d124 100644 --- a/src/corelib/time/qgregoriancalendar.cpp +++ b/src/corelib/time/qgregoriancalendar.cpp @@ -78,6 +78,11 @@ QCalendar::System QGregorianCalendar::calendarSystem() const bool QGregorianCalendar::isLeapYear(int year) const { + return leapTest(year); +} + +bool QGregorianCalendar::leapTest(int year) +{ if (year == QCalendar::Unspecified) return false; @@ -88,10 +93,37 @@ bool QGregorianCalendar::isLeapYear(int year) const return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); } +// Duplicating code from QRomanCalendar, but inlining isLeapYear() as leapTest(): +int QGregorianCalendar::monthLength(int month, int year) +{ + if (month < 1 || month > 12) + return 0; + + if (month == 2) + return leapTest(year) ? 29 : 28; + + return 30 | ((month & 1) ^ (month >> 3)); +} + +bool QGregorianCalendar::validParts(int year, int month, int day) +{ + return year && 0 < day && day <= monthLength(month, year); +} + +int QGregorianCalendar::weekDayOfJulian(qint64 jd) +{ + return qMod(jd, 7) + 1; +} + bool QGregorianCalendar::dateToJulianDay(int year, int month, int day, qint64 *jd) const { + return julianFromParts(year, month, day, jd); +} + +bool QGregorianCalendar::julianFromParts(int year, int month, int day, qint64 *jd) +{ Q_ASSERT(jd); - if (!isDateValid(year, month, day)) + if (!validParts(year, month, day)) return false; if (year < 0) @@ -112,6 +144,11 @@ bool QGregorianCalendar::dateToJulianDay(int year, int month, int day, qint64 *j QCalendar::YearMonthDay QGregorianCalendar::julianDayToDate(qint64 jd) const { + return partsFromJulian(jd); +} + +QCalendar::YearMonthDay QGregorianCalendar::partsFromJulian(qint64 jd) +{ /* * Math from The Calendar FAQ at http://www.tondering.dk/claus/cal/julperiod.php * This formula is correct for all julian days, when using mathematical integer diff --git a/src/corelib/time/qgregoriancalendar_p.h b/src/corelib/time/qgregoriancalendar_p.h index 4e6c42ef76..191f9c127b 100644 --- a/src/corelib/time/qgregoriancalendar_p.h +++ b/src/corelib/time/qgregoriancalendar_p.h @@ -75,6 +75,14 @@ public: QLocale::FormatType format) const override; QString standaloneMonthName(const QLocale &locale, int month, int year, QLocale::FormatType format) const override; + + // Static optimized versions for the benefit of QDate: + static int weekDayOfJulian(qint64 jd); + static bool leapTest(int year); + static int monthLength(int month, int year); + static bool validParts(int year, int month, int day); + static QCalendar::YearMonthDay partsFromJulian(qint64 jd); + static bool julianFromParts(int year, int month, int day, qint64 *jd); }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/offscreen/qoffscreencommon.cpp b/src/plugins/platforms/offscreen/qoffscreencommon.cpp index f0eb69718a..eae25012c1 100644 --- a/src/plugins/platforms/offscreen/qoffscreencommon.cpp +++ b/src/plugins/platforms/offscreen/qoffscreencommon.cpp @@ -77,7 +77,8 @@ public: if (containing != previous) QWindowSystemInterface::handleEnterLeaveEvent(containing, previous, local, pos); - QWindowSystemInterface::handleMouseEvent(containing, local, pos, QGuiApplication::mouseButtons(), QGuiApplication::keyboardModifiers()); + QWindowSystemInterface::handleMouseEvent(containing, local, pos, QGuiApplication::mouseButtons(), Qt::NoButton, + QEvent::MouseMove, QGuiApplication::keyboardModifiers(), Qt::MouseEventSynthesizedByQt); QOffscreenScreen::windowContainingCursor = containing ? containing->handle() : 0; } diff --git a/src/plugins/platforms/vnc/qvncclient.cpp b/src/plugins/platforms/vnc/qvncclient.cpp index 9dfe873927..3a373a5e4b 100644 --- a/src/plugins/platforms/vnc/qvncclient.cpp +++ b/src/plugins/platforms/vnc/qvncclient.cpp @@ -587,9 +587,18 @@ void QVncClient::frameBufferUpdateRequest() void QVncClient::pointerEvent() { QRfbPointerEvent ev; + static int buttonState = Qt::NoButton; if (ev.read(m_clientSocket)) { - const QPoint pos = m_server->screen()->geometry().topLeft() + QPoint(ev.x, ev.y); - QWindowSystemInterface::handleMouseEvent(0, pos, pos, ev.buttons, QGuiApplication::keyboardModifiers()); + const QPointF pos = m_server->screen()->geometry().topLeft() + QPoint(ev.x, ev.y); + int buttonStateChange = buttonState ^ int(ev.buttons); + QEvent::Type type = QEvent::MouseMove; + if (int(ev.buttons) > buttonState) + type = QEvent::MouseButtonPress; + else if (int(ev.buttons) < buttonState) + type = QEvent::MouseButtonRelease; + QWindowSystemInterface::handleMouseEvent(nullptr, pos, pos, ev.buttons, Qt::MouseButton(buttonStateChange), + type, QGuiApplication::keyboardModifiers()); + buttonState = int(ev.buttons); m_handleMsg = false; } } diff --git a/src/widgets/widgets/qcalendarwidget.cpp b/src/widgets/widgets/qcalendarwidget.cpp index 296a15f94b..ec19b64d4a 100644 --- a/src/widgets/widgets/qcalendarwidget.cpp +++ b/src/widgets/widgets/qcalendarwidget.cpp @@ -91,10 +91,10 @@ public: QCalendarDateSectionValidator() {} virtual ~QCalendarDateSectionValidator() {} virtual Section handleKey(int key) = 0; - virtual QDate applyToDate(const QDate &date, QCalendar cal = QCalendar()) const = 0; - virtual void setDate(const QDate &date, QCalendar cal = QCalendar()) = 0; + virtual QDate applyToDate(QDate date, QCalendar cal = QCalendar()) const = 0; + virtual void setDate(QDate date, QCalendar cal = QCalendar()) = 0; virtual QString text() const = 0; - virtual QString text(const QDate &date, QCalendar cal, int repeat) const = 0; + virtual QString text(QDate date, QCalendar cal, int repeat) const = 0; QLocale m_locale; @@ -117,10 +117,10 @@ class QCalendarDayValidator : public QCalendarDateSectionValidator public: QCalendarDayValidator(); virtual Section handleKey(int key) override; - virtual QDate applyToDate(const QDate &date, QCalendar cal) const override; - virtual void setDate(const QDate &date, QCalendar cal) override; + virtual QDate applyToDate(QDate date, QCalendar cal) const override; + virtual void setDate(QDate date, QCalendar cal) override; virtual QString text() const override; - virtual QString text(const QDate &date, QCalendar cal, int repeat) const override; + virtual QString text(QDate date, QCalendar cal, int repeat) const override; private: int m_pos; int m_day; @@ -181,7 +181,7 @@ QCalendarDateSectionValidator::Section QCalendarDayValidator::handleKey(int key) return QCalendarDateSectionValidator::ThisSection; } -QDate QCalendarDayValidator::applyToDate(const QDate &date, QCalendar cal) const +QDate QCalendarDayValidator::applyToDate(QDate date, QCalendar cal) const { auto parts = cal.partsFromDate(date); if (!parts.isValid()) @@ -190,7 +190,7 @@ QDate QCalendarDayValidator::applyToDate(const QDate &date, QCalendar cal) const return cal.dateFromParts(parts); } -void QCalendarDayValidator::setDate(const QDate &date, QCalendar cal) +void QCalendarDayValidator::setDate(QDate date, QCalendar cal) { m_day = m_oldDay = date.day(cal); m_pos = 0; @@ -201,7 +201,7 @@ QString QCalendarDayValidator::text() const return highlightString(formatNumber(m_day, 2), m_pos); } -QString QCalendarDayValidator::text(const QDate &date, QCalendar cal, int repeat) const +QString QCalendarDayValidator::text(QDate date, QCalendar cal, int repeat) const { if (repeat <= 1) { return QString::number(date.day(cal)); @@ -222,10 +222,10 @@ class QCalendarMonthValidator : public QCalendarDateSectionValidator public: QCalendarMonthValidator(); virtual Section handleKey(int key) override; - virtual QDate applyToDate(const QDate &date, QCalendar cal) const override; - virtual void setDate(const QDate &date, QCalendar cal) override; + virtual QDate applyToDate(QDate date, QCalendar cal) const override; + virtual void setDate(QDate date, QCalendar cal) override; virtual QString text() const override; - virtual QString text(const QDate &date, QCalendar cal, int repeat) const override; + virtual QString text(QDate date, QCalendar cal, int repeat) const override; private: int m_pos; int m_month; @@ -286,7 +286,7 @@ QCalendarDateSectionValidator::Section QCalendarMonthValidator::handleKey(int ke return QCalendarDateSectionValidator::ThisSection; } -QDate QCalendarMonthValidator::applyToDate(const QDate &date, QCalendar cal) const +QDate QCalendarMonthValidator::applyToDate(QDate date, QCalendar cal) const { auto parts = cal.partsFromDate(date); if (!parts.isValid()) @@ -296,7 +296,7 @@ QDate QCalendarMonthValidator::applyToDate(const QDate &date, QCalendar cal) con return cal.dateFromParts(parts); } -void QCalendarMonthValidator::setDate(const QDate &date, QCalendar cal) +void QCalendarMonthValidator::setDate(QDate date, QCalendar cal) { m_month = m_oldMonth = date.month(cal); m_pos = 0; @@ -307,7 +307,7 @@ QString QCalendarMonthValidator::text() const return highlightString(formatNumber(m_month, 2), m_pos); } -QString QCalendarMonthValidator::text(const QDate &date, QCalendar cal, int repeat) const +QString QCalendarMonthValidator::text(QDate date, QCalendar cal, int repeat) const { if (repeat <= 1) { return QString::number(date.month(cal)); @@ -328,10 +328,10 @@ class QCalendarYearValidator : public QCalendarDateSectionValidator public: QCalendarYearValidator(); virtual Section handleKey(int key) override; - virtual QDate applyToDate(const QDate &date, QCalendar cal) const override; - virtual void setDate(const QDate &date, QCalendar cal) override; + virtual QDate applyToDate(QDate date, QCalendar cal) const override; + virtual void setDate(QDate date, QCalendar cal) override; virtual QString text() const override; - virtual QString text(const QDate &date, QCalendar cal, int repeat) const override; + virtual QString text(QDate date, QCalendar cal, int repeat) const override; private: int pow10(int n); int m_pos; @@ -392,7 +392,7 @@ QCalendarDateSectionValidator::Section QCalendarYearValidator::handleKey(int key return QCalendarDateSectionValidator::ThisSection; } -QDate QCalendarYearValidator::applyToDate(const QDate &date, QCalendar cal) const +QDate QCalendarYearValidator::applyToDate(QDate date, QCalendar cal) const { auto parts = cal.partsFromDate(date); if (!parts.isValid()) @@ -403,7 +403,7 @@ QDate QCalendarYearValidator::applyToDate(const QDate &date, QCalendar cal) cons return cal.dateFromParts(parts); } -void QCalendarYearValidator::setDate(const QDate &date, QCalendar cal) +void QCalendarYearValidator::setDate(QDate date, QCalendar cal) { m_year = m_oldYear = date.year(cal); m_pos = 0; @@ -414,7 +414,7 @@ QString QCalendarYearValidator::text() const return highlightString(formatNumber(m_year, 4), m_pos); } -QString QCalendarYearValidator::text(const QDate &date, QCalendar cal, int repeat) const +QString QCalendarYearValidator::text(QDate date, QCalendar cal, int repeat) const { if (repeat < 4) return formatNumber(date.year(cal) % 100, 2); @@ -444,7 +444,7 @@ public: QString currentText(QCalendar cal) const; QDate currentDate() const { return m_currentDate; } void setFormat(const QString &format); - void setInitialDate(const QDate &date, QCalendar cal); + void setInitialDate(QDate date, QCalendar cal); void setLocale(const QLocale &locale); @@ -501,7 +501,7 @@ int QCalendarDateValidator::countRepeat(const QString &str, int index) const return count; } -void QCalendarDateValidator::setInitialDate(const QDate &date, QCalendar cal) +void QCalendarDateValidator::setInitialDate(QDate date, QCalendar cal) { m_yearValidator.setDate(date, cal); m_monthValidator.setDate(date, cal); @@ -648,13 +648,13 @@ public: int dateEditAcceptDelay() const; void setDateEditAcceptDelay(int delay); - void setDate(const QDate &date); + void setDate(QDate date); bool eventFilter(QObject *o, QEvent *e) override; void timerEvent(QTimerEvent *e) override; signals: - void dateChanged(const QDate &date); + void dateChanged(QDate date); void editingFinished(); private: @@ -684,7 +684,7 @@ void QCalendarTextNavigator::setWidget(QWidget *widget) m_widget = widget; } -void QCalendarTextNavigator::setDate(const QDate &date) +void QCalendarTextNavigator::setDate(QDate date) { m_date = date; } @@ -891,15 +891,15 @@ public: } void showMonth(int year, int month); - void setDate(const QDate &d); + void setDate(QDate d); void setCalendar(QCalendar c); QCalendar calendar() const; - void setMinimumDate(const QDate &date); - void setMaximumDate(const QDate &date); + void setMinimumDate(QDate date); + void setMaximumDate(QDate date); - void setRange(const QDate &min, const QDate &max); + void setRange(QDate min, QDate max); void setHorizontalHeaderFormat(QCalendarWidget::HorizontalHeaderFormat format); @@ -913,7 +913,7 @@ public: Qt::DayOfWeek dayOfWeekForColumn(int section) const; int columnForDayOfWeek(Qt::DayOfWeek day) const; QDate dateForCell(int row, int column) const; - void cellForDate(const QDate &date, int *row, int *column) const; + void cellForDate(QDate date, int *row, int *column) const; QString dayName(Qt::DayOfWeek day) const; void setView(QCalendarView *view) @@ -921,7 +921,7 @@ public: void internalUpdate(); QDate referenceDate() const; - int columnForFirstOfMonth(const QDate &date) const; + int columnForFirstOfMonth(QDate date) const; int m_firstColumn; int m_firstRow; @@ -951,9 +951,9 @@ public: virtual void keyboardSearch(const QString & search) override { Q_UNUSED(search) } signals: - void showDate(const QDate &date); - void changeDate(const QDate &date, bool changeMonth); - void clicked(const QDate &date); + void showDate(QDate date); + void changeDate(QDate date, bool changeMonth); + void clicked(QDate date); void editingFinished(); protected: QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers) override; @@ -1039,7 +1039,7 @@ QDate QCalendarModel::referenceDate() const return QDate(); } -int QCalendarModel::columnForFirstOfMonth(const QDate &date) const +int QCalendarModel::columnForFirstOfMonth(QDate date) const { return (columnForDayOfWeek(static_cast<Qt::DayOfWeek>(m_calendar.dayOfWeek(date))) - (date.day(m_calendar) % 7) + 8) % 7; @@ -1063,7 +1063,7 @@ QDate QCalendarModel::dateForCell(int row, int column) const return refDate.addDays(requestedDay); } -void QCalendarModel::cellForDate(const QDate &date, int *row, int *column) const +void QCalendarModel::cellForDate(QDate date, int *row, int *column) const { if (!row && !column) return; @@ -1206,7 +1206,7 @@ Qt::ItemFlags QCalendarModel::flags(const QModelIndex &index) const return QAbstractTableModel::flags(index); } -void QCalendarModel::setDate(const QDate &d) +void QCalendarModel::setDate(QDate d) { m_date = d; if (m_date < m_minimumDate) @@ -1240,7 +1240,7 @@ void QCalendarModel::showMonth(int year, int month) internalUpdate(); } -void QCalendarModel::setMinimumDate(const QDate &d) +void QCalendarModel::setMinimumDate(QDate d) { if (!d.isValid() || d == m_minimumDate) return; @@ -1253,7 +1253,7 @@ void QCalendarModel::setMinimumDate(const QDate &d) internalUpdate(); } -void QCalendarModel::setMaximumDate(const QDate &d) +void QCalendarModel::setMaximumDate(QDate d) { if (!d.isValid() || d == m_maximumDate) return; @@ -1266,7 +1266,7 @@ void QCalendarModel::setMaximumDate(const QDate &d) internalUpdate(); } -void QCalendarModel::setRange(const QDate &min, const QDate &max) +void QCalendarModel::setRange(QDate min, QDate max) { m_minimumDate = min; m_maximumDate = max; @@ -1597,7 +1597,7 @@ public: { } virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; - void paintCell(QPainter *painter, const QRect &rect, const QDate &date) const; + void paintCell(QPainter *painter, const QRect &rect, QDate date) const; private: QCalendarWidgetPrivate *calendarWidgetPrivate; @@ -1658,11 +1658,11 @@ public: void showMonth(int year, int month); void update(); - void paintCell(QPainter *painter, const QRect &rect, const QDate &date) const; + void paintCell(QPainter *painter, const QRect &rect, QDate date) const; - void _q_slotShowDate(const QDate &date); - void _q_slotChangeDate(const QDate &date); - void _q_slotChangeDate(const QDate &date, bool changeMonth); + void _q_slotShowDate(QDate date); + void _q_slotChangeDate(QDate date); + void _q_slotChangeDate(QDate date, bool changeMonth); void _q_editingFinished(); void _q_monthChanged(QAction*); void _q_prevMonthClicked(); @@ -1675,7 +1675,7 @@ public: void updateMonthMenu(); void updateMonthMenuNames(); void updateNavigationBar(); - void updateCurrentPage(const QDate &newDate); + void updateCurrentPage(QDate newDate); inline QDate getCurrentDate(); void setNavigatorEnabled(bool enable); @@ -1714,7 +1714,7 @@ void QCalendarDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opt } } -void QCalendarDelegate::paintCell(QPainter *painter, const QRect &rect, const QDate &date) const +void QCalendarDelegate::paintCell(QPainter *painter, const QRect &rect, QDate date) const { storedOption.rect = rect; int row = -1; @@ -1881,7 +1881,7 @@ void QCalendarWidgetPrivate::updateMonthMenuNames() } } -void QCalendarWidgetPrivate::updateCurrentPage(const QDate &date) +void QCalendarWidgetPrivate::updateCurrentPage(QDate date) { Q_Q(QCalendarWidget); QCalendar cal = m_model->calendar(); @@ -1999,23 +1999,23 @@ void QCalendarWidgetPrivate::update() } } -void QCalendarWidgetPrivate::paintCell(QPainter *painter, const QRect &rect, const QDate &date) const +void QCalendarWidgetPrivate::paintCell(QPainter *painter, const QRect &rect, QDate date) const { Q_Q(const QCalendarWidget); q->paintCell(painter, rect, date); } -void QCalendarWidgetPrivate::_q_slotShowDate(const QDate &date) +void QCalendarWidgetPrivate::_q_slotShowDate(QDate date) { updateCurrentPage(date); } -void QCalendarWidgetPrivate::_q_slotChangeDate(const QDate &date) +void QCalendarWidgetPrivate::_q_slotChangeDate(QDate date) { _q_slotChangeDate(date, true); } -void QCalendarWidgetPrivate::_q_slotChangeDate(const QDate &date, bool changeMonth) +void QCalendarWidgetPrivate::_q_slotChangeDate(QDate date, bool changeMonth) { QDate oldDate = m_model->m_date; m_model->setDate(date); diff --git a/src/widgets/widgets/qdatetimeedit.cpp b/src/widgets/widgets/qdatetimeedit.cpp index 31607d77e7..e26993fb23 100644 --- a/src/widgets/widgets/qdatetimeedit.cpp +++ b/src/widgets/widgets/qdatetimeedit.cpp @@ -2636,13 +2636,13 @@ void QCalendarPopup::setCalendarWidget(QCalendarWidget *cw) } -void QCalendarPopup::setDate(const QDate &date) +void QCalendarPopup::setDate(QDate date) { oldDate = date; verifyCalendarInstance()->setSelectedDate(date); } -void QCalendarPopup::setDateRange(const QDate &min, const QDate &max) +void QCalendarPopup::setDateRange(QDate min, QDate max) { QCalendarWidget *cw = verifyCalendarInstance(); cw->setMinimumDate(min); @@ -2686,7 +2686,7 @@ void QCalendarPopup::dateSelectionChanged() dateChanged = true; emit newDateSelected(verifyCalendarInstance()->selectedDate()); } -void QCalendarPopup::dateSelected(const QDate &date) +void QCalendarPopup::dateSelected(QDate date) { dateChanged = true; emit activated(date); diff --git a/src/widgets/widgets/qdatetimeedit_p.h b/src/widgets/widgets/qdatetimeedit_p.h index 453ac36d15..dcf8863c8b 100644 --- a/src/widgets/widgets/qdatetimeedit_p.h +++ b/src/widgets/widgets/qdatetimeedit_p.h @@ -148,19 +148,19 @@ public: explicit QCalendarPopup(QWidget *parent = nullptr, QCalendarWidget *cw = nullptr, QCalendar ca = QCalendar()); QDate selectedDate() { return verifyCalendarInstance()->selectedDate(); } - void setDate(const QDate &date); - void setDateRange(const QDate &min, const QDate &max); + void setDate(QDate date); + void setDateRange(QDate min, QDate max); void setFirstDayOfWeek(Qt::DayOfWeek dow) { verifyCalendarInstance()->setFirstDayOfWeek(dow); } QCalendarWidget *calendarWidget() const { return const_cast<QCalendarPopup*>(this)->verifyCalendarInstance(); } void setCalendarWidget(QCalendarWidget *cw); Q_SIGNALS: - void activated(const QDate &date); - void newDateSelected(const QDate &newDate); - void hidingCalendar(const QDate &oldDate); + void activated(QDate date); + void newDateSelected(QDate newDate); + void hidingCalendar(QDate oldDate); void resetButton(); private Q_SLOTS: - void dateSelected(const QDate &date); + void dateSelected(QDate date); void dateSelectionChanged(); protected: |