Commit Graph

55141 Commits

Author SHA1 Message Date
Thiago Macieira
c1780165ee QJsonValueConstRef: optimize to{Int,Integer,Bool,Double,String}()
The CBOR-based implementation from Qt 5.15 simply created a QJsonValue and
then called the equivalent function on that result. For integrals and
double where the QJsonValue matched the asked type, the cost was minimal
anyway. For the other types and when the type didn't match, this
resulted in up/down the reference counter in QCborContainerPrivate and
an out-of-line call to the destructor.

This improves the performance for code like:

  for (QJsonValue v : array) {
      if (v.toString() == x) {
          doSomething();
      }
  }

This change propagates the inadviseable behavior of allowing a
dereference of the end() reference in concrete() to concreteType() (and
unit-tests it) but does not do the same for the toXxx() functions. Doing
that causes a dereference of QList's end() iterator, which is UB
(asserts false in debug mode).

Change-Id: I89446ea06b5742efb194fffd16bb3beccd1098e4
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2022-02-15 17:00:04 -08:00
Thiago Macieira
dccd1e87f5 QJsonValueConcreteRef: optimize concrete()
Inline the content to avoid a round-trip through qjsonarray.cpp and
qjsonobject.cpp.

This change revealed an inadviseable unit test check that dereferences
the end() iterator to get its type. I haven't changed it, but have
marked with ###. I also fixed a likely copy&paste mistake in that test.

Change-Id: I89446ea06b5742efb194fffd16bb774f3bfbe5f5
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2022-02-15 17:00:04 -08:00
Thiago Macieira
e99417106f QJsonObject::erase: erase unnecessary and wrong code
Commit 35adb74ddd ("Reimplement JSON
support on top of Cbor") accidentally forgot to multiply by 2 the index
stored in the QJsonObject::iterator. The same mistake was propagated
when QJsonObject::iterator was converted to QJsonValueRef. This had no
ill effects because the o->elements container would always contain more
elements, but it meant the check was ineffective and meant nothing.

So instead of doing nothing when the iterator does not point to this
container, simply assume it does. Bad things will happen if you try to
erase an iterator that points to another container, but that's true for
almost all container/iterator mechanisms.

Drive-by modernization of some of the surrounding lines.

Change-Id: I89446ea06b5742efb194fffd16bb7c322c2fc4f2
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2022-02-15 17:00:04 -08:00
Thiago Macieira
f276f9ec6b QCborValue: use assignContainer() in few more places
Change-Id: I5e52dc5b093c43a3b678fffd16b6eb65ef37399d
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2022-02-15 17:00:04 -08:00
Thiago Macieira
ccea344640 QCborValue: optimize the array-to-map conversion
Yes, this is a cold function, but we can do it in-place if we want to.

Done in three separate passes so the autovectorizer can do its thing, if
it wants to.

Change-Id: I5e52dc5b093c43a3b678fffd16b6eb34d02fc40b
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2022-02-15 17:00:04 -08:00
Thiago Macieira
f4d49910be QCborValueConstRef: optimize to{Integer,Bool,Double,String,ByteArray}()
The initial implementation from Qt 5.13 simply created a QCborValue and
then called the equivalent function on that result. For integrals and
double where the QCborValue matched the asked type, the cost was minimal
anyway. For the other types and when the type didn't match, this
resulted in up/down the reference counter in QCborContainerPrivate and
an out-of-line call to the destructor.

This improves the performance for code like:

  for (QCborValue v : array) {
      if (v.toString() == x) {
          doSomething();
      }
  }

Change-Id: I5e52dc5b093c43a3b678fffd16b6022da4e2d446
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2022-02-15 17:00:04 -08:00
Thiago Macieira
afe2f80c6a QCborValueRef: merge the operator[] into a template
Change-Id: I5e52dc5b093c43a3b678fffd16b6e94ad9d3f39b
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2022-02-15 17:00:04 -08:00
Thiago Macieira
832fcbf37f QCborValue: merge the const operator[] into a template
Change-Id: I5e52dc5b093c43a3b678fffd16b6ec4b7d841955
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2022-02-15 17:00:04 -08:00
Thiago Macieira
072f0d5717 QCborValue: merge the non-const operator[] into a template
Change-Id: I5e52dc5b093c43a3b678fffd16b6e7b32b3e2835
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2022-02-15 17:00:03 -08:00
Thiago Macieira
f1c305cbd2 QCborMap: merge the operator[] methods into a template
Change-Id: I5e52dc5b093c43a3b678fffd16b6e7a123338178
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2022-02-15 17:00:03 -08:00
Thiago Macieira
11ea172178 QCborMap: merge the constFind methods into a template
Change-Id: I5e52dc5b093c43a3b678fffd16b6e558c4e1f089
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2022-02-15 17:00:03 -08:00
Thiago Macieira
3531f578d3 QCborArray: allow large but in-range keys
The 0x10000 limit should not apply if the key is a valid index in the
array.

Change-Id: I5e52dc5b093c43a3b678fffd16b6a2a5a69acd61
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2022-02-15 17:00:03 -08:00
Thiago Macieira
800f60657d QJsonObject: use QJsonValueConstRef
Change-Id: I5e52dc5b093c43a3b678fffd16b608f32f8eb4b4
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
2022-02-15 17:00:03 -08:00
Thiago Macieira
f5762cd4b3 QJsonArray: use QJsonValueConstRef
Change-Id: I5e52dc5b093c43a3b678fffd16b6086dcd1d3268
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2022-02-15 17:00:03 -08:00
Thiago Macieira
51fc317041 QCborMap: use QCborValueConstRef
Change-Id: I5e52dc5b093c43a3b678fffd16b606e4249a205b
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
2022-02-15 17:00:03 -08:00
Thiago Macieira
64d568b550 QCborArray: use QCborValueConstRef
Change-Id: I5e52dc5b093c43a3b678fffd16b6077e5c4abd63
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
2022-02-15 17:00:03 -08:00
Thiago Macieira
04dc959d49 Introduce Q{Json,Cbor}ValueConstRef
I screwed up when I wrote QCborValueRef by not having the ConstRef
type. The code worked, but it wasn't const-correct, allowing you to
write:

  const QCborArray &arr = something();
  *arr.begin() = QCborArray();

This mistake was brought over to QJsonValue in Qt 6.0, so it has to be
fixed for QJsonValue too. The actual fixes are in the next couple of
commits.

This change is believed to be binary-compatible: the Q{Json,Cbor}ValueRef
classes continue to have the exact same size, except that they're now
empty and have a new base class. They weren't trivial before this commit
doesn't change that.

[ChangeLog][Potentially Source-Incompatible Changes] The iterator
classes for Qt's JSON and CBOR containers (array and map/object) had a
const correctness issue which allowed a const_iterator to mutate the
container being iterated on, even if that container was itself const. Qt
6.4 has a fix for this, but will cause compilation issues where
QCborValueRef and QJsonValueRef were used where the correctness could be
violated. To keep code compiling with both 6.3 and 6.4, either change to
non-const iteration or replace the QxxxValueRef with a const QxxxValue
reference. This change is binary-compatible.

Change-Id: I5e52dc5b093c43a3b678fffd16b6063333765ae0
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
2022-02-15 17:00:03 -08:00
Thiago Macieira
9b8f064cd3 QCborValueRef: fix using operator[] to convert an empty array to map
The flag IsContainer was not set, causing the QCborContainerPrivate to
become confused.

This commit also expands and subsumes the existing test for QCborValue
(non-Ref).

Change-Id: I5e52dc5b093c43a3b678fffd16b6a17c6f4a0676
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2022-02-15 17:00:03 -08:00
Thiago Macieira
3c7b507d1c QCborValueRef: add a test to confirm that its methods reflect QCborValue
This has found several missing const qualifications, a missing
QCborMap::Iterator method, and a missing one in QCborValue too.

The methods "### TEMPORARY" in this commit are actually removed in two
commits.

Change-Id: I5e52dc5b093c43a3b678fffd16b6939f62954dc4
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
2022-02-15 17:00:02 -08:00
Marc Mutz
e7706429bb QLibrary: add a #warning if the fall-back plugin-meta-data parser is used
Change-Id: I4b42f8dbc9fb03fc6e7243ed4914acfb1bdfe62a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-02-16 01:20:13 +01:00
Tatiana Borisova
773362fb68 Fix failures for tst_eventdispatcher on INTEGRITY
- New testcase tst_eventdispatcher added under commit d292f0143f.
  It shows that only glib implementation works correctly.

Task-number: QTBUG-99123
Pick-to: 6.2 6.3
Change-Id: I7b861a6207fcb319de362645fc8f00a8ab6cd4b9
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-02-15 18:20:40 +00:00
Ivan Solovev
60799fc141 Android A11Y: Fix value rounding
QAccessibleInterface stores values as QVariants. When dealing with
double values, as a result of some calculation (for example, Slider
value update), rounding errors can be introduced.
When converting double values to QString using QVariant::toString(),
these rounding errors result in strings like
0.30000000000000004 instead of 0.3 or
2.7755575615628914e-17 instead of 0.3 - 3 * 0.1 and similar zeroes.

To fix this issue, this patch introduces a custom conversion for
floating-point values. The idea is to convert QVariant to double,
and then convert double to QString using 'f' format and a suitable
precision, determined from the UI element's minimumStepSize(), if
it has one, otherwise falling back to QString::number()'s default
(which is 6).

Task-number: QTBUG-93396
Pick-to: 6.3 6.2 5.15
Change-Id: Ia5ca7345812e39629e9c191b6d8b896a8f51de80
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-02-15 17:51:33 +01:00
Ivan Solovev
a374d59abc Android A11Y: Announce value together with element name when focused
Before this patch when we focus a new element, only its description
was announced.
For elements like Slider that means that if it had no accessible name
or description, its value would be announced (all is fine here).
But if the slider is defined like that:
 Slider {
     Accessible.name: "int slider"
     value: 5
     from: 0
     to: 20
     stepSize: 1
 }

only the name ("int slider") will be announced, but not the actual
value.

This patch fixes the logic of content description generation. If the
element has value, then it is added to the description and announced
as well.

Task-number: QTBUG-93396
Pick-to: 6.3 6.2 5.15
Change-Id: Ia8667149ebd867945c5f57d951fd6ade0f382598
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-02-15 17:51:33 +01:00
Ivan Solovev
b238f83380 Android A11Y: handle valueChanged events
Before this patch Android A11Y implementation was missing
ValueChanged event handling. As a result, no update was given
when the element's value was changed.

Handling these events allows us to announce value changes on such
objects like Slider, SpinBox, etc...
This is a universal method of value-change announcement, so it
supports all sorts of A11Y gestures.

On the Java side a new function was introduced to announce the
values, because we need to use the actual element's *value*,
not its accessible name or description.

Task-number: QTBUG-93396
Pick-to: 6.3 6.2 5.15
Change-Id: Ic44abd5f01b9b6f5468962131466edaf6a49d498
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
2022-02-15 17:51:33 +01:00
Edward Welbourne
e5ba838045 tst_qsqlquery coding style: use braces correctly
Single-line bodies of single-line controls don't need braces.
If one block of an if/else chain needs braces, the rest get them too.
One long condition needed a split that forced its body to need braces.

Change-Id: Ic4116b1273e16a586fdec18e6d8228e48a9cb07c
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2022-02-15 17:32:47 +01:00
Edward Welbourne
1013cf49c7 Prefer QString(count, character) over QString::fill()ing
It lets the string be const, if nothing else.

Change-Id: Iffc1cfe71c5f6030b3f7434f964f2f2c102bf9c0
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2022-02-15 17:32:47 +01:00
Edward Welbourne
ed0657b5e1 Avoid repeated qTableName() calls by saving in local variables
This saves repetition of the call in the midst of query strings.
This incidentally makes it possible to give informative names.

In the process, build those query strings using QLatin1String::arg(),
instead of implicitly converting ASCII strings to QString in order to
then do arithmetic with them, at least when the arithmetic involves
more than one addition. In one instance, where two branches did the
same thing with different format strings, limit the branching to
selecting which string to use, then do the common thing once.

Change-Id: I60fd7457a727bcc3872d3052d8fd638ebaf36ac2
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2022-02-15 17:32:47 +01:00
Edward Welbourne
7bac62f8cd Use lists and arrays more gracefully in tst_qsqlquery
Use initializer lists rather than << entries.
Use arrays where we don't need the lists at all.
Make them const when they can be.
Replace foreach with ranged-for.
Use auto rather than naming iterator types and save end() at the start
of the iteration to save re-requesting it each time round the loop.

Reverse arguments to a QCOMPARE() as actual should come first and
expected after, not the other way round. Change some casts from
C-style to type-as-function-style, use QString literals rather than
C-string literals that would need conversion at compile time and
QLatin1String::arg in preference to arithmetic where the same format
is duplicated.

In the process, reworked one test to put its two iterations, one over
good query strings, one over bad ones, into separate blocks using
separate const arrays, instead of reusing a list with an uninformative
name.

Change-Id: I4a272be3eb58e9dca136238277b92379d6ca076d
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2022-02-15 17:32:47 +01:00
Laszlo Agocs
b48e6e783b Convert Vulkan instance setup from Qt Quick into a Gui helper
Make it possible to reuse what's in QSGRhiSupport from other modules as
well. Both Gui (texture-based widget/backingstore composition) and
Multimedia are potential users of this in the future.

Change-Id: I1b50cc5efd6811e9bc95f6287b9576931d4bcc44
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
2022-02-15 15:36:01 +00:00
Øystein Heskestad
6deded8bc4 Change third party SHA-3 implementation to use
Task-number: QTBUG-71327
Change-Id: I14fef2a6f66dfb26f635cc7b6bde2b7cbf733ea7
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2022-02-15 15:44:51 +01:00
Edward Welbourne
b55f10b2a0 Convert a table iteration to use ranged-for
The loop used an int counter that was initialized from a size_t,
provoking a warning from MSVC. Since the indexing is irrelevant in any
case, use a ranged-for loop. Since the loop was formerly in decreasing
index order, reverse the table being iterated so that entries remain
in their prior order.

Change-Id: I79b93c5a3f39a502b0cae83215b8e3665d0e17f5
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2022-02-15 15:44:51 +01:00
Marc Mutz
d34c3f9e94 QLibrary: use QStaticByteArrayMatcher
Because of code-after-return style, I don't actually know what the
code is used for, but since it's compiled, make sure to not leave a
dynamically-initialized static variable lying around, even if control
never reaches it.

Pick-to: 6.3
Change-Id: I6ce30d8c060f96a2d819ed85f79d18a7ef7e9b05
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-02-15 15:44:51 +01:00
Alexandru Croitor
1559cd8ff2 CMake: Document source file properties
Pick-to: 6.2 6.3
Task-number: QTBUG-100224
Change-Id: Id4d0e0d84762d9eee2beb10e850d1775ad4f3245
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
2022-02-15 15:44:51 +01:00
Joerg Bornemann
e044c94a61 CMake: Introduce QT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH
When installing conan packages we have one installation prefix per
package.  When cross-building a conan package, we need to make known
those multiple host prefixes to Qt, analogous to
QT_ADDITIONAL_PACKAGES_PREFIX_PATH.

Pick-to: 6.2 6.3
Fixes: QTBUG-94524
Change-Id: I68cbede350f95266a5fd3559e9b9c214c5858eed
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2022-02-15 14:48:20 +01:00
Thiago Macieira
d08f59d083 qsimd: simplify the code slightly
Only x86 requires more than 32 different bits in the CPU feature
variable, so enforce the need for 64-bit atomics only for it. Everyone
else can stick to 32-bit atomics, which are supported everywhere.

Change-Id: I54f205f6b7314351b078fffd16cf7c7d50a84102
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2022-02-15 04:20:35 -08:00
Thiago Macieira
d9f1d2c9df CMake: remove unused config.tests (atomicfptr, avx512 and stl)
Change-Id: Ib42b3adc93bf4d43bd55fffd16c10873018acb04
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
2022-02-15 09:20:34 -03:00
Marc Mutz
37a25fce94 QDesktopServices: deprecate destroying URL handlers w/o explicit unsetUrlHandler()
[ChangeLog][QtGui][QDesktopServices] URL handlers that have been passed
to setUrlHandler() must now be removed by calling unsetUrlHandler()
before they are destroyed. Relying on the handler's destructor to
implicitly unset it is now deprecated, because it may already be in use
by concurrent openUrl() calls. Support for implicit unsetting will be
removed in 6.6 and, until then, a qWarning() is raised if it is
exercised.

Fixes: QTBUG-100775
Fixes: QTBUG-100779
Pick-to: 6.3 6.2 5.15
Change-Id: I0c4f91b78f847b135fdeb38766babc892bdc1379
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
2022-02-15 12:20:16 +00:00
Fabian Kosmale
06e45cbd6a QFileSystemEngine::canonicalName (Unix): clean up control-flow
When passing a nullptr to realpath, it will allocate memory. That memory
has to be freed (with free) later to avoid a leak, which we so far
didn't.
This patch ensures that we always clean up the memory by using a
unique_ptr. As a drive-by, clean up the control-flow:
- Always pass either the stack buffer or nullptr to realpath.
- Rely on realpath returning nullptr in the error case.
Lastly, fix a few coding-style issues.

Change-Id: Ia906df77324020c267b087ec52a9a6c47aaa2a59
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-02-15 12:05:33 +01:00
Allan Sandfeld Jensen
e1b76e68d0 Fix clang-cl warning
Warns the include is non-standard, so replace it with standard
includes.

Pick-to: 6.3
Change-Id: I8db4b65a3f706cb31215332277a3378df88a0003
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2022-02-15 12:01:31 +01:00
Joerg Bornemann
85970834b5 CMake: Promote qt6_standard_project_setup from technical preview
The API couldn't be simpler (function without arguments), and we want to
use the function on our "Getting Started with CMake" documentation page.

Pick-to: 6.3
Task-number: QTBUG-100793
Change-Id: I83ba66c2970ac7441b425add4df1da2695e50ddb
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2022-02-15 10:23:03 +01:00
Tor Arne Vestbø
f71d54ee34 Update docs for QSurface::MetalSurface to include iOS
Pick-to: 6.3 6.2
Change-Id: I67fc47b3dc33960e7dfa78890d16d1e7450e30ab
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-02-15 09:11:00 +01:00
Andreas Buhr
21ce257b6c Repair tst_qcoreapplication to not segfault on Android
tst_qcoreapplication.cpp is used both in tst_qcoreapplication and
tst_qguiapplication. To distinguish these two compilations,
the define QT_GUI_LIB was used. This led to an error on Android,
where Qt::Gui is always linked, because the Qt Android Platform
Plugin needs it.
This patch introduces the preprocessor define QT_QGUIAPPLICATIONTEST
which is to be used only in the compilation of tst_qguiapplication.
This is then used instead of QT_GUI_LIB.

Change-Id: Ifa5bfacb197d68365288c1da85573106515fc6c2
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-02-15 09:10:59 +01:00
Joerg Bornemann
da27a95aab Compile QNetworkAccessDebugPipeBackend only in developer builds
This fixes a moc warning in non-developer builds.

Change-Id: I879a17715fd682382ce47ce4cfd7e162f8ceb2de
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-02-15 09:10:59 +01:00
Björn Schäpers
c6808d4296 configure: Fix -redo when configure line contained equal sign(s)
If the original configure arguments contained equal sign(s) like in
    configure ... -- -DQT_BUILD_SUBMODULES=qtbase;...

The following error message was printed:
    =qtbase was unexpected at this time.

The reason is that the conditional
    if "%rargs%" == ""
would expand to something like
    if ""-DQT_BUILD_SUBMODULES=qtsvg"" == ""
which is invalid, because the equal sign is used outside of a string
literal.

Use delayed expansion in the conditional to fix this.

Pick-to: 6.2 6.3
Change-Id: I8c40d799db2c5aae8cba190ed31804c71a605935
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
2022-02-15 08:08:48 +00:00
Marc Mutz
3ec76f82ba QBitmap: de-inline dtor
The destructor of this polymorphic class was incorrectly marked for
removal in Qt 6, and, unfortunately, that was carried out. Now it
delivers one of the most-duplicated vtables across all of Qt (at least
four duplicates), and we can never add anything to it until Qt 7
(because existing code de-virtualized it as a no-op).

Task-number: QTBUG-45582
Pick-to: 6.3
Change-Id: I85bd3b13dca9f1fc8cb62ca079a1168a33f71323
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
2022-02-15 09:08:16 +01:00
Marc Mutz
9b6c288281 De-duplicate vtables, 2022 edition
This de-inlines destuctors of classes whose vtables are proven to be
duplicated even within the set of Qt libraries.

Since these are all private API classes, we can pick all the way back
to 6.2, and we don't need the comment that the dtor must always stay
empty, like for public classes.

As a drive-by, also de-inline the QPaintDeviceWindowPrivate ctor.
That's just code hygiene, it doesn't partake in vtable duplicating.

Pick-to: 6.3 6.2
Task-number: QTBUG-45582
Change-Id: I3477063d6f42edc9a5d352c47900366fd50c3ef6
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
2022-02-15 09:08:16 +01:00
Yin Jie
60a67dc41e Position QCompleter popup based on the widget's screen geometry
If adding a QLineEdit to a QGraphicsScene as a QGraphicsProxyWidget, the popup
completion of that QLineEdit is drawn in the wrong location. When the completer
getting the rect of screen, it gets the rect of the QGraphicsScene where
QLineEdit is located rather than the rect of the screen, resulting in an error
in the following calculation.

Note that as long as the completer popup is a toplevel widget not parented
to the target widget, it will not be automatically embedded into the graphics
view via QGraphicsProxyWidget. So with multiple views for a scene, or in views
that use transformations, the geometry will still be off.

Pick-to: 6.3
Task-number: QTBUG-20531
Change-Id: If5d8a707ca35a9e4709117b077978145c6143e46
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-02-15 01:28:30 +00:00
Andreas Buhr
936771d901 Activate tst_QFutureWatcher for Android
tst_QFutureWatcher was deactivated for Android. This patch activates it.

Fixes: QTBUG-88136
Change-Id: Iead82e22d73eb15c9ecd2756eb33925910bbffc0
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
2022-02-15 00:42:29 +01:00
Tatiana Borisova
23fd249b85 Exclude denormal test cases if system doesn't support it
- current INTEGRITY development pack don't support denormals for float and double.
  All values are rounded to 0.

Task-number: QTBUG-99123
Pick-to: 6.2 6.3
Change-Id: Iaaacdc4210c7ac2ec3ec337c61164a1ade0efb01
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2022-02-15 00:48:23 +02:00
Viktor Arvidsson
7794421bea Windows QPA: Correct mistake when calculating minmaxinfo
Amends 46e9852a1d

The previous code would fail if the windows taskbars are placed
to the top or left on the screen. The mistake was missed because
Windows seems to adjust the window position automatically
in case the window handles WM_NCCALCSIZE and returns 0,
which was the case for me.

Task-number: QTBUG-51327
Pick-to: 5.15 6.2 6.3
Change-Id: I38ef974f7518be63a0bacf080f3359c219284078
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2022-02-14 23:48:23 +01:00