Commit Graph

47018 Commits

Author SHA1 Message Date
Laszlo Agocs
a99cee1c7b Remove old CBOR-based format from QShader
We only support version 4 and 5 in Qt 6.0. 1 and 2 are already gone
(due to being based on binary JSON), now we remove 3 as well.

Task-number: QTBUG-81346
Change-Id: I3627dcc0587f1e36f11e93edf7172889e911d64e
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2020-08-11 13:45:09 +02:00
Edward Welbourne
fed97b9264 Sort out the overflow cases in tst_QDateTime
Use the actual minimum value, rather than minus the maximum, and adapt
the overflow expectations so that they're correct west of Greenwich as
well as east.

Change-Id: I7a5f4510db0fdea3855b5b2bd4c4a86882030efd
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-11 11:21:46 +02:00
Edward Welbourne
72d14fe32f Fix handling of last second in 1969
Due to a limitation of mktime(), we would have declared it invalid.
Tidied up qt_mktime() slightly in the process.

Change-Id: I25469e314afee6e0394e564bc69a98883005d4ec
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-11 11:20:43 +02:00
Edward Welbourne
1f96709fdb Tidy up use of local variables and add an assertion
Petty tidy-up, narrowing the scopes and asserting that localtime_r()'s
return, when non-null, is the pointer we gave it.

Change-Id: I6c0959524260028ca9b234f6d33eae78f27c1412
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-11 11:19:44 +02:00
Morten Johan Sørvig
1b4a5af63f wasm: detect canvas resize using ResizeObserver API
The ResizeObserver API is now available on the major
desktop browsers (Safari, Chrome, Firefox), and can
be used to handle canvas resize.

(Previously, we got a callback on viewport resize
only)

Pick-to: 5.15
Change-Id: I8737285416bef70641f90da793c85efcb24f3623
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
2020-08-11 06:43:18 +00:00
Giuseppe D'Angelo
d7205a7cae Add degree<->radians conversions for long double and integral types
For long double: they're just missing, so add them for completeness.

For integral types: follow the advice of C11's trigonometric
functions; first convert the angle to double, then do the actual
conversion. This is offered only for the degree->radians conversions,
as someone may legitimately want to call e.g. qDegreesToRadians(90).

On the other hand, it seems extremely unlikely that someone may
want to do a radians->degree conversion starting from integral
datatypes, so I'm not adding it for the moment being (instead,
I'm leaving a note).

[ChangeLog][QtCore][QtMath] qDegreesToRadians now also accepts
long double and integral types. A value of integral type will be
casted to double before the conversion to radians.

[ChangeLog][QtCore][QtMath] qRadiansToDegrees now also accepts
long double.

Change-Id: Ib1576be5193ae09bb6cb4a70d7a31702955df2c5
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-11 04:24:12 +02:00
Lorn Potter
20db9a0d7f wasm: fix natural scrolling on mac
Pick-to: 5.15
Change-Id: Icc41b2c54a2e8d0da11ba5068bdde1a0c20686e0
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2020-08-11 10:26:30 +10:00
Andy Shaw
6379b697a6 Interbase: Don't call toUpper() on the names as they are escaped
Interbase is case sensitive when tables/fields are escaped so we should
ensure that we pass the value as is.

Pick-to: 5.15
Change-Id: Ia6c4edc9c1e675bd95913c85d47bf22c418d2113
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2020-08-10 18:51:11 +00:00
Giuseppe D'Angelo
7406a8b45a QMultiMap: add constructors from QMap
We can provide those. They don't lose information, do not have the
problem we face at offering ranged constructors (namely the order of
duplicate keys), and have a distinct advantage over ranged constructors:
a non-shared rvalue QMap can be "upgraded" to a QMultiMap without
allocating memory for the multimap.

Change-Id: Ic23c83927c05a210bc1f0050006c9f26365d3916
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-10 16:35:59 +02:00
Giuseppe D'Angelo
046ad5a442 Improve QMultiMap docs a bit
Change-Id: I170dc5de15dac61620aaed94f32226c158092dce
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-08-10 16:35:53 +02:00
Volker Hilsheimer
3657405fe7 QFileInfo: make stat method public
Forcing the reading of all file system attributes is generally useful in
multi-threaded applications, and has at least one more use case in Qt.

Using it in QFileSystemWatcher on Windows avoids several file system
accesses.

Task-number: QTBUG-41373
Change-Id: Ib3c3243fd083142393ad46d62f49cb4f7bfda17c
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2020-08-10 13:17:01 +02:00
Fabian Kosmale
7b3a2f5e3d cmake support for tst_moc
We use qt_wrap_cpp instead of AUTOMOC so that we can easily find the
json files.
Getting autorcc to run only after json file has been generated was
deemed too tricky.  Therefore the test is slightly modified to check for
the json files in its directory instead of the resource, if the qrc file
does not exist.

Change-Id: Id1aabb117c8bab3ff81156da1f66d64e796bf18b
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2020-08-10 12:59:46 +02:00
Michael Weghorn
3e09c28101 Filechooser portal: Implement "current_filter"
This adds supports for setting and retrieving the selected
MIME and name filter for 'QXdgDesktopPortalFileDialog'.

For preselecting a filter [1]:

> current_filter (sa(us))
>
>     Request that this filter be set by default at dialog creation. If
>     the filters list is nonempty, it should match a filter in the list
>     to set the default filter from the list. Alternatively, it may be
>     specified when the list is empty to apply the filter
>     unconditionally.

The "current_filter" return value was added in xdg-desktop-portal
commit [2].

[1] https://flatpak.github.io/xdg-desktop-portal/portal-docs.html#gdbus-org.freedesktop.portal.FileChooser
[2] 35fca7fae8

Fixes: QTBUG-85658
Pick-to: 5.15
Change-Id: I8651c1a8942dfd358895b7826730729c4d22e680
Reviewed-by: Jan Grulich <jgrulich@redhat.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-10 12:33:10 +02:00
Alexandru Croitor
ecc72bc63d CMake: pro2cmake: Specify library versions for 3rd party libs part 2
Embed package versions into the qt_find_package calls for various
Linux specific packages.

Task-number: QTBUG-82917
Change-Id: I5d1cb623f81932dfae4658b8a3a89eedb71ea3af
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2020-08-10 11:56:54 +02:00
Alexandru Croitor
3c52f8af9d CMake: pro2cmake: Specify library versions for 3rd party libraries
If certain 3rd party libraries have a version that's not suitable for
Qt, the configure summary should say so, rather than use them and fail
at build time.

With the current situation, we have to duplicate the version
information from the configure.json files in helper.py, by assigning
the version number as an extra find_package variable.

Rerunning configurejson2cmake then embeds this version info into the
qt_find_package calls in configure.cmake.

Some of the Find modules are rewritten to take the  specified version
into account when looking for the libraries.
This involves moving around the code for creating a target, after
calling find_package_handle_standard_args() so we know if a good
enough version was found.

Task-number: QTBUG-82917
Change-Id: I139748d8090e0630cda413362760034dc3483e11
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2020-08-10 11:56:54 +02:00
Giuseppe D'Angelo
7e7796fb00 QLayout: minor tidy in the docs
Change-Id: Ifc2aa62a9c9480c85cc36f60941411e920066db8
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
2020-08-10 11:56:54 +02:00
Kai Koehne
177f040c6c Fix build with mingw gcc 9 and -Wsuggest-override
Change-Id: I780b0761a7f6b19022116b738efa7aca1378b715
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2020-08-10 11:56:54 +02:00
Allan Sandfeld Jensen
7c861a36f9 Fix compilation in C++20 mode
The comparisons with pointer were ambiguous as the comparisons could
be done between iterators or pointers.

Change-Id: I0484946931502d04bd63519fcd6e886c732758d3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-08 19:09:09 +02:00
Allan Sandfeld Jensen
cabc248667 Avoid UB in 64bit compositions
Multiplying 65535 by 65535 would exceed the precision of an int, so
use 65535U instead.

Change-Id: I066e552fb7db03ce867bcbfbd0b555ac98ca4bbf
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-08 19:08:07 +02:00
Robert Loehning
7fa5fdae5c QBezier: Don't try calculating a unit vector when length is null
It's undefined and causes a division by zero.

Fixes: oss-fuzz-24273
Pick-to: 5.12 5.15
Change-Id: I3d34d5c43cccff9255abaf87af265ddea3fe6d95
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
2020-08-07 16:21:16 +00:00
Edward Welbourne
315257eabe QSettings: purge deprecated API
Since 5.13: setSystemIniPath(), setUserIniPath()

Change-Id: Ie02fa96e652c10ac1a276016bd556474030fe0f5
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-08-07 17:45:31 +02:00
Edward Welbourne
563a8d628f QStandardPaths: purge deprecated API
Since 5.2: enableTestMode(bool)

Change-Id: Ibfd5958b6383491d9297d3f0e815ad4679fb57f5
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-08-07 17:45:18 +02:00
Edward Welbourne
8b7bde6c49 QFileInfo: inline the file-time methods
As instructed in a // ### Qt6 comment
Added missing #include for QDateTime.

Change-Id: Ic1f9e6ec42ecae07d037b84943444785847bdf98
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-08-07 17:45:03 +02:00
Edward Welbourne
fe6a1d34dc QFileInfo: purge deprecated API
Since 5.10: created()
Since 5.13: readLink()

Change-Id: I9722f81750dd92315a67a1c38df41a95ae63e0db
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-08-07 17:44:51 +02:00
Edward Welbourne
4ef723c82d QFile: purge deprecated API
Since 5.0: set{En,De}codingFunction()
Since 5.13: readLink()

Change-Id: I5386d0accf2724d84550c9bfdbbe914937194be2
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-08-07 17:44:40 +02:00
Edward Welbourne
f369be93a1 Purge deprecated API from QDir
Assignment from QString and addResourceSearchPath(), both deprecated
since 5.13.

Change-Id: I25f08ffadc7b9dfd7895a9199255ca5f1948bd47
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2020-08-07 17:44:26 +02:00
Edward Welbourne
5a682b04ce Purge QResource of some deprecated API
Removed isCompressed(), deprecated since 5.15, and (since 5.13)
addSearchPath() and searchPath().

Change-Id: I4b6fb8077c02bbe322334e474eaf0a2a7caf0004
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-08-07 17:44:13 +02:00
Edward Welbourne
7ce27430a7 tst_QStringConverter: fix some deprecation warnings
QString's fromUtf16() prefers char16_t data over ushort.

Change-Id: Ib20c5afa09ceabb4e91fe434b6a057edb4739a53
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-08-07 17:44:01 +02:00
Edward Welbourne
74a35a509c QQueue: clean up 5.14's deprecation
Follows up on commit 9dc1edb314, giving
the relevant advice on what to use instead and protecting with the
appropriate version-check deprecation macro.

Pick-to: 5.15
Change-Id: I4191493e6c43448c4390bf22be1571611b172950
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-08-07 17:43:48 +02:00
Edward Welbourne
a450f331fc QSharedData: remove #include relating to deprecation
The header pulled in qhash.h for no readily apparent reason.
It did so subject to deprecation #if-ery, so rip it out.

Change-Id: I00529dd2b2de11d9a997b6fa766901f5b2f4b254
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-08-07 17:37:20 +02:00
Giuseppe D'Angelo
3f6afac6b1 QPolygon: streamline constructors and special member functions
Employ RO0; inherit the constructors from the base class; and
do some code tidies as a drive by.

The inherited constructors bring in goodies like initializer_list
support.

Change-Id: Ia00a3f9b0ccbf182bf837bc65ba2305110c8dc60
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-08-07 15:01:26 +02:00
Lars Knoll
096e268764 Avoid UB in moc generated code
Introduce a Q_OFFSETOF() macro that uses the optional support of
offsetof() for non standard layout types and disables the
corresponding compiler warnings. All our supported compilers
support offsetof() on non standard layout types.

Use the macro to do the offset calculations required in moc
generated code to replace a manual offset calculation that
was dereferencing a null pointer.

Change-Id: I4aab3af3c8bbaa90372f2234aa1cf8399d023c22
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-07 13:35:45 +02:00
Paul Lemire
3f64d77003 rhi: QRhiGles2 fix leak BlitFromRenderbuffer
Leaked FBO otherwise lead to massive runtime memory consumption increases.

Change-Id: Ic8ffad4917c11294e6c83cdae0b36114d661b251
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2020-08-07 13:02:35 +02:00
Andy Shaw
ac17e62f65 Android: Add support for travesing directories and accessing files
This enables QDir and QFileInfo/QFile to work with entries found from
a entryList() as it will obtain the permission for these files correctly
when it is encountered.

Due to what seems to be a quirk in the Android API, we cache whenever we
come across a known directory to save time later on for checking if it
is a directory. All uris accessed where we get permissions for are
cached so we get the right URI for that given content url as some are
granted via the Intent.

Fixes: QTBUG-85538
Fixes: QTBUG-83041
Fixes: QTBUG-76886
Pick-to: 5.15
Change-Id: I685b3c60804812a0e4b85fbdbb4ec5efaa09420c
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2020-08-07 12:04:57 +02:00
Tor Arne Vestbø
b4f6fdf575 macOS: Handle platform window destroy and create in backingstore
We observe changes to the NSWindow to pick up color space changes,
so we need to track when the platform window is destroyed and created
to match our observer with the recreated NSWindow.

This does not handle the fact that we're internally recreating the
NSWindow if certain window flag changes requires so, without letting
clients know via surface events.

Task-number: QTBUG-85915
Pick-to: 5.15
Change-Id: I7a7d728c742def79adebaadc985cedd86ea0d581
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2020-08-07 12:01:22 +02:00
Tor Arne Vestbø
abb985a403 macOS: Fix crash when re-using backingstore for re-created QWindow
The observer we add for the NSWindow of the backingstore window
will not be valid once that window is destroyed, but we may get
last minute notifications for it still, in which case our platform
window is gone.

This patch fixes the immediate crash, but reveals a more fundamental
problem of assuming the platform window that's alive during construction
is the one that will always be used with the backingstore. This is not
the case when for example QtWidgets opens a combo box, and reuses the
backingstore for the widget each time the combobox popup is shown.

Fixes: QTBUG-85915
Pick-to: 5.15
Pick-to: 5.12
Change-Id: Ia66a45d003882602ac29476aabf2d58b0ac33c1e
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2020-08-07 12:01:22 +02:00
Assam Boudjelthia
5735a14c2b Android: fix NoSuchMethodException exception in QtActivity.java
This amends the parent change but intended only for dev and not
to be picked for 5.15.

Change-Id: If7a2d81045c0625f19554eaf6b5cf69e72d42384
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2020-08-07 10:01:21 +00:00
Giuseppe D'Angelo
9edfb7a1b5 QMap/QMultiMap: use =default for their default constructors
Change-Id: I48e5bd8367fc6040128a50cd08c803310d3a4507
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-07 02:05:46 +02:00
Robert Loehning
7d7e62967f configure: Explicitly enable float-divide-by-zero with ubsan
Before clang 9, it was enabled by default
when -fsanitize=undefined was set.

Pick-to: 5.15
Change-Id: I0faf3ae1901d4badc6d265fa8081185be4360636
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-07 01:21:07 +02:00
Thiago Macieira
ef8fe74324 Add x86 vector implementation of UTF-8 comparison to UTF-16
Change-Id: Ied637aece2a7427b8a2dfffd161181f75b738532
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-08-06 15:07:36 -07:00
Mårten Nordheim
ad1a5bf63f QDecompressHelper: Add brotli support
Task-number: QTBUG-83269
Change-Id: If23b098ee76a4892e4c2c6ce5c635688d8d9138d
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2020-08-06 20:56:42 +02:00
Lars Schmertmann
af1544bda2 Mark QSslError(SslError error) as explicit
Currently it is possible to compare a QSslError with a
QSslError::SslError because QSslError has an implicit
constructor. But the comparison often fails because
a QSslError received from the system contains a
certificate.

[ChangeLog][QtNetwork][QSslError] The constructor
QSslError(QSslError::SslError error) is now explicit.

Change-Id: I36cc5895245d3b43ab4b8d65a9635893d6b0e6a4
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2020-08-06 19:49:02 +02:00
Giuseppe D'Angelo
3938d93222 QCalendar: actually remember if the registry has been populated
The "populated" variable is otherwise never written into.

Change-Id: I979411a19927dc4e7e09c6c36edfb2308f519596
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-06 19:33:28 +02:00
Alexandru Croitor
f32a38b6c6 CMake: Don't use lld linker for Android with a Windows host
Most of the time lld just gets stuck (deadlock) waiting on some
mutex, thus failing integrations.

Amends 64c111e10f

Task-number: QTBUG-85911
Change-Id: Id73bf967a7aeb0e0cbccfaafe056b325c8711f82
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
2020-08-06 19:20:04 +02:00
Alexandru Croitor
d50a7d635c CMake: Fix prl files of static Qt builds
Static Qt plugins should not be included in the list of libraries of
a prl file. They end up being there due to our circular dependency
trick where the plugins depend on the module they belong
to.

This in turn causes the giant static plugin generator expressions to
be processed in qt_collect_libs(), and the generated prl file ends up
having target names like Qt6::QJpegPlugin which are obviously not
linker flags.

To eliminate the static plugins from prl files, add an additional
dummy boolean generator expression '$<BOOL:QT_IS_PLUGIN_GENEX>'
that always evaluates to true. We can string match on this expression
in qt_collect_libs, and thus remove the whole static plugin genex
entry.

This should fix linking of apps with qmake that use a CMake-built
static Qt.

Task-number: QTBUG-85865
Task-number: QTBUG-85240
Task-number: QTBUG-85801
Change-Id: I949dc5edb10d94c4ab84ed430af7c164d8efaaa6
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
2020-08-06 19:19:46 +02:00
Allan Sandfeld Jensen
9a900dfb07 Update qgrayraster.c
In particular switching the SUBPIXELS macro with FRACT makes the logic
valid for all 24dot8 fixed point values.

Change-Id: I4e58df94f8cf3c557f670c5d3088942e9b8efa6d
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
2020-08-06 19:15:39 +02:00
Alexandru Croitor
92ee9bd6b8 CMake: Properly handle CONFIG += thread aka Threads::Threads
mkspecs/features/qt.prf adds a dependency on the system threading
library if the Qt Core thread feature is enabled. Because qt.prf is
loaded by any public or internal Qt project, it's essentially a public
dependency for any Qt consumer.

To mimic that in CMake, we check if the thread feature is enabled, and
and set the Threads::Threads library as a dependency of Qt6::Platform,
which is a public target used by all Qt modules and plugins and Qt
consumers.

We also need to create a Qt6Dependencies.cmake file so we
find_package(Threads) every time find_package(Qt6) is called.

For the .prl files to be usable, we have to filter out some
CMake implementation specific directory separator tokens
'CMAKE_DIRECTORY_ID_SEP' aka '::@', which are added because we call
target_link_libraries() with a target created in a different scope
(I think).

As a result of this change, we shouldn't have to hardcode
Threads::Threads in other projects, because it's now a global public
dependency.

Task-number: QTBUG-85801
Task-number: QTBUG-85877
Change-Id: Ib5d662c43b28e63f7da49d3bd77d0ad751220b31
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
2020-08-06 19:15:39 +02:00
Giuseppe D'Angelo
bd2bcd4e1d QMultiMap: add range erase
Also remove duplication by centralizing the main code for
erase(), and implement erase(pos) in terms of erase(first, last).

Change-Id: Ie0272ebac92fd7da48c31f9d68e69a2faa583bbc
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-06 19:15:39 +02:00
Giuseppe D'Angelo
4fc539bd84 QMap: fix insert() rvalue overloads
Receiving an rvalue still requires to check whether the parameter
is detached, otherwise we can't steal its backing std::map.

Change-Id: Ie88dbf39fd777112ad7bb20a46d5c2d65be8eb3d
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2020-08-06 19:15:39 +02:00
Giuseppe D'Angelo
14090760a8 Long Live QMap as a refcounted std::map!
... and QMultiMap as std::multimap.

Just use the implementation from the STL; we can't really claim that
our code is much better than STL's, or does things any differently
(de facto they're both red-black trees).

Decouple QMultiMap from QMap, by making it NOT inherit from
QMap any longer. This completes the deprecation started in 5.15:
QMap now does not store duplicated keys any more.

Something to establish is where to put the
QExplictlySharedDataPointer replcement that is in there as an
ad-hoc solution. There's a number of patches in-flight by Marc
that try to introduce the same (or very similar) functionality.

Miscellanea changes to the Q(Multi)Map code itself:

* consistently use size_type instead of int;
* pass iterators by value;
* drop QT_STRICT_ITERATORS;
* iterators implictly convert to const_iterators, and APIs
  take const_iterators;
* iterators are just bidirectional and not random access;
* added noexcept where it makes sense;
* "inline" dropped (churn);
* qMapLessThanKey dropped (undocumented, 0 hits in Qt, 1 hit in KDE);
* operator== on Q(Multi)Map requires operator== on the key type
  (we're checking for equality, not equivalence!).

Very few breakages occur in qtbase.

[ChangeLog][Potentially Source-Incompatible Changes] QMap does not
support multiple equivalent keys any more. Any related functionality
has been removed from QMap, following the deprecation that happened
in Qt 5.15. Use QMultiMap for this use case.

[ChangeLog][Potentially Source-Incompatible Changes] QMap and
QMultiMap iterators random-access API have been removed. Note that
the iterators have always been just bidirectional; moving
an iterator by N positions can still be achieved using std::next
or std::advance, at the same cost as before (O(N)).

[ChangeLog][Potentially Source-Incompatible Changes] QMultiMap does
not inherit from QMap any more. Amongst other things, this means
that iterators on a QMultiMap now belong to the QMultiMap class
(and not to the QMap class); new Java iterators have been added.

Change-Id: I5a0fe9b020f92c21b37065a1defff783b5d2b7a9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2020-08-06 19:15:39 +02:00