Commit Graph

36382 Commits (27dbb3ee5477dbfed5fa96a688683744e13cc9cb)

Author SHA1 Message Date
Assam Boudjelthia 27dbb3ee54 Android: avoid reflection with ClipData addItem
Task-number: QTBUG-81687
Pick-to: 6.0 5.15
Change-Id: If07fff6f371d2c05cb61a1a7695c96219d0260d2
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2020-12-01 13:13:10 +00:00
Assam Boudjelthia 8499718351 CMake: don't add empty QT_ANDROID_APPLICATION_ARGUMENTS to Json
Pick-to: 6.0
Change-Id: I471da3f733046aeaa8381bbdeeba3ee2775b97eb
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2020-12-01 15:13:09 +02:00
Andreas Buhr 20e341d495 Fix qdoc warning about unknown commands
Qdoc generated warnings like the following:
qt6-changes.qdoc:771: (qdoc) warning: Unknown command '\w'
This patch correctly escapes backslashes to fix these warnings.

Task-number: QTBUG-88533
Pick-to: 6.0
Change-Id: I7849f49fd0e950c3c366cfa88b299f827b39c05a
Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
2020-12-01 14:13:09 +01:00
Ole-Morten Duesund 3c3737f88b Discourage the foreach keyword
Stop endorsing the foreach keyword, suggest C++11 range-based loops
instead.

Task-number: QTBUG-86584
Pick-to: 6.0
Change-Id: Icaf537aded6557b7864d731217e967ac56a84928
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-12-01 08:12:09 +00:00
Sona Kurazyan bc46c7b8ea Fix perfect forwarding of callables in QFuture's continuations
Use universal references instead of rvalue references for passing
callables in the implementations of QFuture's continuations.

Change-Id: I1288c78f78f84f30c6607e505e7f9807a9272071
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
(cherry picked from commit b002722dabef794da0e80010b115b2c6cd6dc6b8)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2020-12-01 08:12:09 +00:00
Fabian Kosmale a9ba5fe7aa QMetaProperty: Enable constructing only Data
Constructing a QMetaProperty can be unnecessarily expensive due to the
QMetaEnum resolution. Add a private method to construct only
QMetaProperty::Data. Make us of it in indexOfProperty.

Task-number: QTBUG-82931
Change-Id: If954538106bcfaa7d088db26591f6bd6eeaf3731
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-12-01 09:12:09 +01:00
Lars Knoll 1f1a322373 Simplify the safeguarding logic in notify()
The logic in notify() was doing quite a bit more work than
it needed to. By inserting a dummy node after the current one instead of
replacing it, we can avoid half of the data shuffling that has been
happening and also don't need a back pointer when executing the
notification.

Also avoid calling a semi expensive destructor of QPropertyObserver.

Reduces the overhead of notify() by ~30%.

Change-Id: I7ce16bcf9cd9c4368c18bf875fc959223452fd4f
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
(cherry picked from commit e8ef871e3522f340b4efe32382af7e35ef908665)
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2020-11-30 23:02:31 +00:00
Lars Knoll d555425ff8 Inline the fast path for removeBinding()
Save a function call in the common case where we don't have a binding
This makes a rather large performance difference for setters that do
not have a binding.

Change-Id: I140f29790f6fe868721a33b9fad37205e547b8e9
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
(cherry picked from commit c63901c5f3195596eb81e5f5ae5483ca5a0b6d35)
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2020-11-30 23:02:30 +00:00
Lars Knoll e095bebaf5 Smaller cleanup in QBindingStorage
Unify code paths and avoid excessive code generation.

Change-Id: I4a54234dd322bba380cc45d4f9c97d97a0c93303
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
(cherry picked from commit 65759c9867321d978c1f98f5cf66bef11c8f5c15)
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2020-11-30 23:02:30 +00:00
Lars Knoll ba0e012902 Inline the fast path of a few methods
No need to do function calls for the case where we return immediately
after checking a boolean.

Change-Id: I3e449850a10fcf82acb843cce6da6dfd98de32ad
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
(cherry picked from commit e165f416a752398079590161a18255f9a0058a3e)
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2020-11-30 23:02:29 +00:00
Lars Knoll 76743374e7 Remove ExtraBit and FlagMask from QPropertyBindingData
They are not needed and removing it can simplify the code in some places
and avoid a couple of masking operations.

Change-Id: I0e4241a2784026aa89deed35f408b094e89a11a0
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
(cherry picked from commit b1be6e6e6f355bfcb0c3814516f6009c91d2de89)
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2020-11-30 23:02:29 +00:00
Lars Knoll f538ce920e Inline the QPropertyBindingPrivatePtr destructor
In many cases, it only derefs and does nothing else. Inline the fast
code path.

Change-Id: Ib605c385c1683f7833f7189c84d6cf4eb5b0e59e
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
(cherry picked from commit eda4c29eb26dab32e22040bdda0b9b9109b1408b)
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2020-11-30 23:02:28 +00:00
Lars Knoll 1181286d43 Optimize code in QTaggedPointer
Don't execute instructions that will never do anything.

Directly add the tag to the pointer in the constructor to avoid
additional masking operations, and avoid a masking op that is in
practice a no-op in setTag().

Do the same optimization in QTagPreservingPointerToPointer.

Change-Id: Ia364f89cbe6ccc876ec9bda0c239fc4f57c10501
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
(cherry picked from commit 2721728c9056b442c0281f20792f19eb6a491aa0)
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2020-11-30 23:02:28 +00:00
Lars Knoll de4a73ebd6 Inline access to the QBindingStorage
And inline the fast checks inside the methods in QBindingStorage.
This allows QObjectBindableProperty and friends to inline all the
fast checks and almost completely eliminates the overhead for property
accesses when no bindings are being used.

Read and write times of QObject based properties when no bindings
are being used:
                                              Read       Write
Old style property:                           3.8ns       7.3ns
QObjectBindableProperty (no notification):    4.5ns       4.3ns
QObjectBindableProperty (with signal):        4.5ns       7.6ns
QObjectBindableProperty (inline accessors):   3.2ns       3.4ns

Numbers without this patch:

Old style property:                           3.8ns       7.9ns
QObjectBindableProperty (no notification):    7.2ns       7.7ns
QObjectBindableProperty (with signal):        7.2ns      16.0ns
QObjectBindableProperty (inline accessors):   6.3ns       6.7ns

Change-Id: Ifd1fa3a489c3be8b1468c0b88af547aac397f412
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
(cherry picked from commit 98c82fb445acf45cc4c4bc86a5adda43358127bf)
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2020-11-30 23:02:27 +00:00
Joerg Bornemann 5592204b19 CMake: Fix QMAKE_LIB of WrapOpenSSLHeaders library
The correct entry for this lib is 'openssl/nolink', not
'openssl_headers'.

In configurejson2cmake's helper.py we already have
this information encoded such that the no_link_so_name field of
'openssl' points to 'openssl_headers'. Extend configurejson2cmake to
take this into account, and re-generate src/network/configure.cmake.

Pick-to: 6.0
Change-Id: I9817ea7722503a373d309b7e6fa201448d403e8d
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2020-11-30 23:17:50 +01:00
Joerg Bornemann d4e9f0e633 CMake: Re-generate project files in src
Pick-to: 6.0
Change-Id: I1f5f822d68129490f1a7c495f718aead0b520ca9
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2020-11-30 23:17:47 +01:00
Timur Pocheptsov abee4cdd59 QMacStyle - remove vertical adjustment for inactive tab
While it worked as expected with beta, with final release this thing
looks wrong again, especially in the dark mode.

Pick-to: 5.15
Pick-to: 5.12
Change-Id: I6857344de897e0f39d9d8e66431635dbe2f4d077
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2020-11-30 23:11:05 +01:00
Timur Pocheptsov 1158ff67b4 QSslSocket::verify: do not alter the default configuration
QSslCertificate::verify() has an undocumented and not very desirable property -
on some platorms it updates the default configuration, which can be surprising.
For example, we deprecated QSslSocket::setDefaultCaCertificates() and recommend
using QSslConfiguration::defaultConfiguration(), QSslConfiguration::setDefaultConfiguration(),
and QSslConfiguration::setCaCertificates(). If an application does this to select
CA roots it trusts explicitly, and then for some reason is calling verify, the
application can have its QSslSockets successfully connecting to a host, whose
root was not trusted by the application. Also, on Windows, defaultCaCertificates()
include system roots already, no need to have them twice.

[ChangeLog][QtCore][QtNetwork] QSslSocket::verify - do not change the default configuration

Pick-to: 5.15
Pick-to: 6.0
Pick-to: 6.0.0
Fixes: QTBUG-88639
Change-Id: I1cd40b259d0a6dcd15c78d1e7c027ff10859595c
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-11-30 23:11:05 +01:00
Sheng Mao dbd1c8b047 Let QXcbConnection::getTimestamp properly exit when X server quits
QXcbConnection::getTimestamp uses dummy events to get timestamp from
X server. However, in some cases, X server shuts down while client tries
to get timestamp. In this case, QXcbConnection::getTimestamp keeps
getting null event and thus falls into indefinite loop.

This fix checks if xcb connection is still valid and use a special
xcb_timestamp_t value, CurrentTime (0L), as returned value.
CurrentTime should not be generated by X server and if getTimestamp
returns this value, it means an "exception" case is triggered.

This fix is introduced because in kwin_x11 (KDE project), X server can
exit on logout. kwin_x11 should handle disconnection from X server.
But the indefinite loop prevents kwin_x11 to process disconnection
event and therefore kwin_x11 cannot quit properly.

Fixes: QTBUG-88435
Pick-to: 5.12 5.15 6.0
Change-Id: Iaf7ef3f8a35fa8389d22a608e3c49041bf90e1b9
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Liang Qi <liang.qi@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2020-11-30 23:11:04 +01:00
Liang Qi 92a57e0b01 Revert "xcb: add xcb-util dependency for xcb-image"
This reverts commit 39b1dea2ec.

39b1dea2 is wrong, the bug is for static build of qt with static
xcb. It adds the explicit dependency of xcb-util 0.3.9, which is
not available on Debian yet.

Task-number: QTBUG-86287
Fixes: QTBUG-88688
Pick-to: 5.15 6.0
Change-Id: Iffc821f49bdfcad3f2556951d3677c35a7682266
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2020-11-30 22:11:04 +00:00
Andreas Buhr d545fbb61b Extend container overview documentation, mention Q_DECLARE_TYPEINFO
The container overview documentation did not mention
Q_DECLARE_TYPEINFO and the related optimizations. This patch
adds a short paragraph about it.

Task-number: QTBUG-86584
Pick-to: 6.0
Change-Id: I5b0b8ce92a47da5f0398cc413fbf3e07b0921e59
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
2020-11-30 23:11:04 +01:00
Topi Reinio 99abdd180b Doc: Fix various documentation warnings
- QList iterators are now nested classes inside QList.
- Drop reference to Qt OpenGL Widgets landing page, there is no such
  page.
- Fix typos and linking issues.

Fixes: QTBUG-86295
Pick-to: 6.0
Change-Id: I964843deb81aa55ff8ddb9a1c2b004cb72e68de9
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-11-30 16:16:22 +00:00
Topi Reinio 3789ca6c99 Doc: Fix QVector[2|3|4]D documentation
The \fn commands for friend functions need to include the class
scope for QDoc to find the declarations.

Pick-to: 6.0 6.0.0
Fixes: QTBUG-88932
Change-Id: Icbb45c12d7d657d95243231148483c00baf07c36
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-11-30 17:16:22 +01:00
Topi Reinio af7f7732cb Doc: Document BINDABLE attribute for Q_PROPERTY macro
Pick-to: 6.0
Fixes: QTBUG-87036
Change-Id: Ia6067d887b9b697dbcb8e02bce5a560a8ac5eaf3
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-11-30 17:16:22 +01:00
Fabian Kosmale 5082b84b38 QMetaObjectPrivate: Add firstMethod
QMetaObject::indexfOfMethod returns the method corresponding to a
specific signature. In QML, we however only want any of the methods with
a given name (and do overload resolution at a later point).
For this usecase this patch introduces the internal
QMetaObject::firstMethod function.

Change-Id: Ie3820354edffb273c4cbe1399201a955ebe79344
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-11-30 17:16:22 +01:00
Giuseppe D'Angelo 405244fe30 Fix QVariant/QMetaType::compare APIs
std::optional<int> is the wrong datatype to use for compare.

First and foremost, it can't be used in the idiomatic form of

  auto r = a.compare(b);
  if (r < 0) ~~~ // a is less than b
  if (r > 0) ~~~ // a is greater than b

which we *already* feature in Qt (QString, QByteArray).

Also, std::optional<int> (explicitly) converts to bool, which is
a trap, because the result of the comparison can be accidentally
tested as a bool:

  if (a.compare(b)) ~~~ // oops! does NOT mean a<b

Not to mention extending this to algorithms:

  auto lessThan = [](QVariant a, QVariant b) { return a.compare(b); }; // oops!
  std::ranges::sort(vectorOfVariants, lessThan);

which thankfully doesn't compile as is -- std::optional has
an *explicit* operator bool, and the Compare concept requires an
implicit conversion. However, the error the user is going to face
will be "cannot convert to bool because the operator is explicit",
which is deceiving because the fix is NOT supposed to be:

  auto lessThan = [](QVariant a, QVariant b) { return (bool)a.compare(b); }; // big oops!

Instead: backport to Qt the required subset of C++20's <compare>
API, and use that. This commits just adds the necessary parts
for compare() (i.e. partial ordering), the rest of <compare>
(classes, functions, conversions) can be added to 6.1.

Change-Id: I2b5522da47854da39f79993e1207fad033786f00
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit 3e59c97c3453926fc66479d9ceca03901df55f90)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2020-11-30 17:16:22 +01:00
Giuseppe D'Angelo 81e893fb2d QHash: support std::hash as hashing function
In addition (and as a fallback) from requiring qHash, add support
for std::hash specializations. This catches two birds with one stone:

1) users of Qt can simply specialize std::hash for their datatypes,
and use them in both QHash and stdlib unordered associative containers;

2) we get QHash support for any (stdlib) datatype that is hashable
without having to overload qHash for them.

[ChangeLog][QtCore][QHash] QHash, QMultiHash and QSet now support
for key types anything that can be hashed via std::hash, instead of
always requiring a qHash() overload.

Change-Id: Ib5ecba86e4b376d318389500bd24883ac6534c5f
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
2020-11-30 17:16:22 +01:00
Giuseppe D'Angelo 5dab710b90 Seedless qHash catch-all: make it SFINAE-friendly
To support qHash overloads without a seed we have a qHash(T, size_t)
catch-all that calls qHash(T) and XORs the seed. The problem is
that this catch-all is not SFINAE friendly. For a type Foo which
does not have any qHash overload, we can't ask if qHash(Foo, size_t)
is callable because it would instantiate the catch-all and fail
to compile.

Add a suitable trait and enable_if.

Pick-to: 6.0
Change-Id: Idffd48a537eebaf77cee7030b8d91a302643ffde
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
2020-11-30 17:16:21 +01:00
Giuseppe D'Angelo d982fdfca4 QHeaderView: allow un-sorting of models
If one clicks on a QHeaderView's section, the header view will
sort the view by the respective column/row. By clicking multiple
times, one is able to toggle the sorting between ascending
and descending. Something that is NOT possible to do however is to
un-sort the view -- that is, to restore the model's original
sorting. This must be done via code, by asking the header or the
view to sort by section -1.

This commit adds new property to QHeaderView to make it possible
to unsort models. Basically, the sort indicator becomes a tri-state:
sort ascending, sort descending, unsort (sort by column -1).

[ChangeLog][QtWidgets][QHeaderView] Added the sortIndicatorClearable
property. Setting this property allows the user to clear the sort
indicator on a section, resetting the model to its default ordering.

Change-Id: Ibf4e280b2086b75ccd64d619ea4d70816dc3529f
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Reviewed-by: David Faure <david.faure@kdab.com>
2020-11-30 18:16:21 +02:00
Andreas Buhr 0440614af0 Replace discouraged Q_MOVABLE_TYPE by Q_RELOCATABLE_TYPE
Q_MOVABLE_TYPE was conceived before C++ had move semantics. Now, with
move semantics, its name is misleading. Q_RELOCATABLE_TYPE was
introduced as a synonym to Q_MOVABLE_TYPE. Usage of Q_MOVABLE_TYPE
is discouraged now. This patch replaces all usages of Q_MOVABLE_TYPE
by Q_RELOCATABLE_TYPE in QtBase. As the two are synonymous, this
patch should have no impact on users.

Pick-to: 6.0
Change-Id: Ie653984363198c1aeb1f70f8e0fa189aae38eb5c
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
2020-11-30 17:16:21 +01:00
Alexandru Croitor 908ee750ed CMake: Fix resource object file paths in prl files for prefix builds
Before this change, the prl files always assumed that resource object
files are installed into $qt_prefix/lib when doing a prefix build.
That was true for qt_internal_add_resource calls, but not for
qt6_add_qml_module and qt6_target_qml_files.

Change qt_internal_record_rcc_object_files to take a new required
INSTALL_LOCATION argument. The argument takes a path relative
to CMAKE_INSTALL_PREFIX.

Modify __qt_propagate_generated_resource to save the relative path of
the generated resource source file, which will be used in the
computation of the final resource object file location.
This is needed because the Qml resource functions place the source
files in a different directory layout, e.g. .rcc vs .qmlcache

Modify qt_generate_prl_file to prepend $$[QT_INSTALL_PREFIX]/
instead of $$[QT_INSTALL_LIBS]/ for the resource install paths.

A follow up patch is done in qtdeclarative to pass the new
INSTALL_LOCATION argument from the Qml CMake functions.

Amends f9dcade5e7

Task-number: QTBUG-87702
Task-number: QTBUG-88425
Change-Id: Id17bb517b4cb5d00911bfd10a728ba4e0d44871b
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
(cherry picked from commit 54d0ca93bca78f8fd31b6761f078e7a96283f183)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2020-11-30 16:16:21 +00:00
Alexander Volkov 68de00e0d4 QStandardPaths: Don't change permissions of XDG_RUNTIME_DIR
Conform to the XDG Base Directory Specification:
"If, when attempting to write a file, the destination directory
is non-existent an attempt should be made to create it with
permission 0700. If the destination directory exists already
the permissions should not be changed."

At the same time the spec states about XDG_RUNTIME_DIR that
"its Unix access mode MUST be 0700", so don't consider the
directory with wrong permissions correct and use a fallback.

Task-number: QTBUG-68338
Pick-to: 5.15 5.12
Change-Id: I03c6b35b3f7d5ceb8e6326695bfc8207da92ea67
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: David Faure <david.faure@kdab.com>
2020-11-30 19:16:21 +03:00
Fabian Kosmale d27d2b5d72 QMetaProperty::typeName: use name from metatype
Except for types marked as unresolved, we're doing it anyway - the only
difference is that now we skip looking up the metatype by typeid.

[ChangeLog][QMetaProperty][Important Behavior Change]
QMetaProperty::typeName returns now always the same name as name() of the
corresponding metatype. This can cause a change for enum properties
which were not fully-qualified.

Change-Id: I1f57743948b7262ac06095d3bbc838d620f6e481
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2020-11-30 17:16:21 +01:00
Fabian Kosmale 26e1a0997e QMetaObjectBuilder: remove relocatable data support
Change-Id: I6f1dc9e81723e9a8af8988a8cb45c63c05214296
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2020-11-30 17:16:21 +01:00
Fabian Kosmale 465701bb98 QMetaPropertyBuilder: carry metatype
Properties of non-dynamic classes always have the metatype stored, so we
can make use of it. Moreover, when the builder is converted into a
metaobject, we need to resolve the metatype anyway.
As a driveby, add a dedicated metatype test to tst_qmetaobjectbuilder.

Change-Id: I7eea0cd8fc2da5d92c7fc803f05cd81e3a9d4cf4
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-11-30 17:16:20 +01:00
Kai Koehne 130b209014 Doc: Use explicit linkage with target_link_libraries
The Professional CMake book suggests always using explicit linkage with
target_link_libraries, so let's use that.

Whether to use PUBLIC or PRIVATE depends on the context. But let's
be conservative and advise on using PRIVATE by default.

Task-number: QTBUG-88935
Pick-to: 6.0
Change-Id: I12b80ee85be9f6916f1e4dea6b1c9cb29e03c20f
Reviewed-by: Craig Scott <craig.scott@qt.io>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2020-11-30 05:39:21 +01:00
Wang ChunLin 66acca3316 Fix invalid QSortFilterProxyModel::dataChanged parameters
QSortFilterModel shouldn't forward dataChanged() when the source model changes data in columns that the filter model refuses

Fixes: QTBUG-86850
Pick-to: 5.15
Change-Id: I26565d119d2aa36ea07b3de0c15f1b137bc002f8
Reviewed-by: David Faure <david.faure@kdab.com>
2020-11-30 12:39:21 +08:00
Laszlo Agocs 5b3cc25492 Restore QOpenGLVersionFunctionsFactory entry in changes docs
This used to be present in source-breaks.qdoc in qtdoc, but seems this
one note went missing when merging the content to other places.

Pick-to: 6.0
Change-Id: Idfd165eb1c7616c595f7a6515cc98d8477671e09
Reviewed-by: Jerome Pasion <jerome.pasion@qt.io>
2020-11-30 05:39:21 +01:00
Antti Määttä aa5839bdce Fix typo in rhi
Pick-to: 6.0
Change-Id: I2e920e8e68b7010b565c422bb26708d172d345e8
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2020-11-27 12:26:54 +00:00
Tor Arne Vestbø 39cd65589d Fix warning about copy during range iteration
Pick-to: 6.0
Change-Id: I6c916d79a5e86502a1fdfd5f2b851f4a4396149a
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2020-11-27 12:26:54 +00:00
Edward Welbourne bb53b35b54 Make QCollatorSortKey's operator<() a hidden friend
Documentation change to follow, as part of a QCollator doc overhaul.

Change-Id: Ie8d3df15a6c0f86b611a8866adf12f3355cc9710
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-11-27 13:26:53 +01:00
Edward Welbourne e1def46f37 Clean up QCollator's documentation and tell fewer lies
Its collation strategy can't be passed to the constructor, so
describing it as initialized with a strategy was misleading.

The "Linux without ICU" disclaimer was poorly phrased and only
mentioned on one of the options; it actually applies to all.

The operator() was marked internal, but the class doc's claim that
QCollator can be used with std::sort() relies on it being callable.

Moved option descriptions to the getters and filled in the missing
ones. Mention the default in all cases.

Added a minimal illustration of how to use a QCollator.

Fixes: QTBUG-72233
Change-Id: Ifa846eca05e8e42aaa08c4947a59a82d8a8a79bc
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-11-27 13:26:53 +01:00
Edward Welbourne a590ea5792 Fix spacing in QCollator documentation
Many doc-comments had their end-comment marker indented.
Keep separate from real doc changes, to appease the inanity 'bot.

Task-number: QTBUG-72233
Change-Id: Id6b8244aeccd81ba7be461ec2b344910c106c17d
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2020-11-27 13:26:53 +01:00
Edward Welbourne 3a4115d123 Return a more useful date-time on parser failure in spring-forward gap
Up to 5.15.0, QDateTime::fromString(), when parsing a string that
matched the format but represented a date-time in a spring-forward's
gap, would return an invalid date-time object that represented a "best
shot" date-time, correcting the error in the string as best it could.

In 5.15, in order to handle time-spec information correctly, we
adapted the date-time parser to have a fromString() variant that
parsed a date-time as a whole, rather than as a date and a time; as a
result, QDTP::fromString() now returns false and QDT::fromString()
returned a default-constructed instance instead of the invalid
date-time that QDTP had produced.

Amend 7605451604 to restore the prior
behavior of returning the invalid date-time object from QDTP instead
of a default-constructed invalid date-time. Also document what this
implies for the caller's ability to recover from the situation, if a
best shot result is better than nothing.

[ChangeLog][QtCore][QDateTime] Restored pre-5.15.0 behavior when
parsing a date-time from a string (and document what it implies): if
the string has the right form but represents a date-time that was
skipped by a time-zone transition (e.g. a DST spring-forward), the
invalid date-time object returned can, none the less, be used to
recover a near-by date-time that may be more useful in some cases.
From 5.15.0 to 5.15.2 and in 6.0.0, a default-constructed QDateTime
was returned in place of this more informative invalid date-time.

Task-number: QTBUG-88633
Pick-to: 6.0 5.15
Change-Id: If0b439038d5fe48eefb951c62f3aae2933bb5651
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-11-27 13:26:53 +01:00
Edward Welbourne cdcfb7c4f9 QDateTimeParser: fix handling of AM/PM texts
An AM/PM field is only fixed-width if the locale's AM and PM texts
have the same length, which we shouldn't take for granted.
(They're not in Albanian, Bosnian or Cherokee.)

In sectionMaxSize(), count tells us the case, so we shouldn't be
taking both case variants into account, only the one we need.

Change-Id: I03b985cc5bf74c34742480558cef08af6343ed93
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-11-27 13:26:53 +01:00
Edward Welbourne 380d97e1bd Bounds-check time-zone offsets when parsing
Parsing of time-zone offsets should check the offset string conforms
to the expected format and has valid values in its fields. The
QDateTime parser, fromOffsetString(), neglected the bounds check on
hours; the QTzTimeZonePrivate parser, parsePosixTime(), neglected all
upper bounds checks, only checking against negative valus.

Drive-by - refined phrasing of a comment.

Pick-to: 6.0 5.15
Fixes: QTBUG-88656
Change-Id: If04cdbe65064108eaa87c42310527783ad21b4c0
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-11-27 13:26:52 +01:00
Edward Welbourne 085678a75e Mark two impossible code-paths with Q_UNREACHABLE
Change-Id: I8c04f512b078d4c13d759854b65f4d39b7b80e75
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
2020-11-27 13:26:52 +01:00
Edward Welbourne 4785e39156 QCalendar: increase coverage by tests
Added tests for aliases and various calendar properties, ensured
dateToJulianDay()'s invalid date branch is exercised. Corrected
assertion when constructing from system and asserted calendarSystem()
is as expected.

Pick-to: 5.15
Task-number: QTBUG-88183
Change-Id: I510afcb5d9d115f68148d1f679f3224d712f92f4
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-11-27 13:26:52 +01:00
Tor Arne Vestbø 58afadc624 Update setHighDpiScaleFactorRoundingPolicy docs
The default is now passthrough. And let's not mention the
environment variable overrides, as they are meant for internal
testing.

Pick-to: 6.0
Pick-to: 6.0.0
Change-Id: Ie2409e5411d4bdcdf041834cb5ca9e1215aa173a
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2020-11-27 12:26:51 +00:00
Allan Sandfeld Jensen 05bb9b1016 Also remove 0 initialization from QUrlTwoFlags
Was overlooked when removed from QFlags

Pick-to: 6.0 6.0.0
Change-Id: If65ff4a07e2f72589d2c32c2d24366ff9dc2405f
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-11-27 12:26:51 +00:00