Commit Graph

41057 Commits (e4186b2b28ebe0fefc3f2eaecb7e8345d79ee63f)

Author SHA1 Message Date
Marc Mutz 2fb0135efa QSize/QPoint: add toSizeF/toPointF()
For symmetry with QSizeF::toSize().

[ChangeLog][QtCore][QSize] Added toSizeF().

[ChangeLog][QtCore][QPoint] Added toPointF().

Task-number: QTBUG-73160
Change-Id: I65b088b4f7365ab671ef2f0c75821b707f5ac26d
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2022-03-19 12:02:24 +01:00
Marc Mutz 98cbdae527 QMargins: fix a missing "full stop" in the docs
Pick-to: 6.3 6.2 5.15
Change-Id: Ic8012ce12ef8d2fee2dc785e373e9c9d8f658ff5
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-19 12:02:24 +01:00
Marc Mutz f97daab7a6 QObject: restore flags printing in dumpObjectTree()
This was lost when QtCore, QtGui and QtWidgets were split up. Restored
now via a virtual function on QObjectPrivate.

Chose to return std::string instead of QString or QByteArray because
its SSO is usually sufficient to hold these flag strings.

[ChangeLog][QtCore][QObject] Restored printing of Qt3-style
information from dumpObjectTree().

[ChangeLog][QtWidgets][QWidget] Restored printing of Qt3-style
information from QWidget::dumpObjectTree().

Fixes: QTBUG-101732
Change-Id: I39ff5728ea5f5abbdbf81b5d7e13b8d16b6ee8b7
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2022-03-19 12:02:24 +01:00
Marc Mutz 6ec1dc904d QSettings: port key processing to QAnyStringView
... in preparation for replacing the QString keys in the public API
with QAnyStringView ones.

This removes the "important optimization" that avoids a detach in the
common case where the input is the same as the output of
normalization. But that optimization is beside the point, because it
trades a memory allocation avoided in the library for O(N) allocations
inserted into user code for each call to QSettings::value(), the vast
majority of which are calls with string literals.

With the public interface ported to QAnyStringView in the follow-up
patch, we can then internally optimize memory allocations _in a central
place_ (e.g. by returning std::u16string or QVarLengthArray<QChar> from
normalizeKey() instead of QString). But first we need to get rid of all
the unwarranted allocations in user code.

Change-Id: I45fc83d972c552a220c9c29508001d3f172e1162
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
2022-03-19 07:09:55 +00:00
Thiago Macieira 03de9ff7ee QJsonValueConstRef: fix null pointer dereferences
Introduced in commit 705ea62f9e, but
apparently these constructors aren't used anywhere yet.

Change-Id: Ic30914a4448d4bc28974fffd16dc521ab49d3be4
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2022-03-18 15:14:27 -07:00
Volker Hilsheimer 6492a9c877 Refactor: use lambdas for visitor pattern in QGraphicsSceneBspTree
This way, the visitor implementations are directly where they are used,
without the need for a virtual function call. The allocation of the
visitors on the heap was anyway overkill (they could just have been
allocated on the stack where they were used).

Change-Id: Ic41fd285e3a45daaf2e17aa5aeee07e754127a00
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
2022-03-18 21:56:19 +01:00
Volker Hilsheimer 5e566ab373 When clearing selected items, iterate over a copy of the QSet
Selection change handlers of the items might call a method that
implicitly recreates the selectedItems QSet, which then invalidates
the iterators of the ranged for loop, resulting in crashes.

Iterate over a copy of the set instead.

Add a test case that crashen without the fix.

Fixes: QTBUG-101651
Pick-to: 6.3 6.2
Change-Id: I6da6f4043fe1906b0186931a37283f635cb5a404
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
2022-03-18 21:56:19 +01:00
Luca Di Sera 33d62de7c8 Enable move semantics for QTemporaryDir
Add move constructor and move assignment operator.

To allow for the the change to be implemented QTemporaryDir, the
internal d_ptr was modified from a QScopedPointer, which is not movable,
to a raw pointer.

Add member + free swap implementations.

Add tests.

[ChangeLog][QtCore][QTemporaryDir] Enabled move semantics.

Change-Id: I9f196a77c70b4ca0b7f0c06505d00fdd87a9785c
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2022-03-18 20:56:19 +00:00
Tor Arne Vestbø e14466aa66 Fix -Wunused-but-set-variable in QTcpSocket documentation snippet
Pick-to: 6.2 6.3 5.15
Task-number: QTBUG-101883
Change-Id: I54dc7229565cef199f306a0ac837a932aeb00ec6
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2022-03-18 19:47:59 +01:00
Tor Arne Vestbø bdb9a254c2 macOS: Remove dead code for focus ring handling in Mac style
It was added in 375dd7ad34
but never used.

Pick-to: 6.2 6.3 5.15
Task-number: QTBUG-101883
Change-Id: Ibad7e0b1c371bdee63bcdbea0c5280091107408a
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2022-03-18 19:47:59 +01:00
Mårten Nordheim 82296d3193 Add missing includes for some of our _win.cpp files
Change-Id: I74067f5d50bea6fbc16576c26bf84f91e449e497
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
2022-03-18 17:35:03 +00:00
Ivan Solovev 30830e0cba Android: use empty Intent to clear clipboard data on API < 28
ClipboardManager didn't have any APIs to clear clipboard data before
API level 28.
As a workaround an empty Intent with MIMETYPE_UNKNOWN is created and
inserted into the clipboard for lower API levels.
This makes the QApplication::clipboard()->clear() method work more or
less as expected.
This allows to unblacklist tst_QPlainTextEdit::copyAvailable().

Task-number: QTBUG-87423
Task-number: QTBUG-89402
Pick-to: 6.3 6.2
Change-Id: I454376199cf3b8eed0fa2ecf2f85b87f40892280
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-03-18 18:35:03 +01:00
Marc Mutz 9985cc330a uic: use C string literals for setObjectName()
Because setObjectName() now takes a QAnyStringView, passing C string
literals is much more efficient than using QString::fromUtf8().

This patch only deals with setObjectName() as a known property,
probably from a name attribute. If the objectName property is set by a
<property> element (or so I assume), we still emit a
QString::fromUtf8(). Detecting objectName there would be too much
magic.

Besides, I haven't been able to find why sometimes there's a second
setObjectName call right after the first, when in the XML it seems all
kosher (name attribute and objectName <property> agreeing on the
content).

Change-Id: Icf07bad841ac735a9c744bbd955428ba15758089
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-03-18 18:35:03 +01:00
Giuseppe D'Angelo fb7e9bef8d QMutexLocker: code tidies
Improve the docs for the recently added move operations.

Change-Id: Iae17f5289d30faab4aaaec14a27036f7a03129ab
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-18 12:32:28 +01:00
Marc Mutz 7ed5b52e80 QMetaType: remove an unused static pointer variable
Unlike the Gui and Widgets pointers, the Core one wasn't needed,
because the only user can inline the variables contents.

Saves one relocation.

Pick-to: 6.3
Change-Id: Ib7535e1a29c5125eea55c66dad6d2d1de72f6bc1
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2022-03-18 06:57:10 +01:00
Giuseppe D'Angelo 1b14569753 QMutexLocker: strenghten the locking operations
There is no reason to allow relock() on a locked locker, or unlock()
or an unlocked one, just like we don't allow that on a plain mutex
to begin with. The docs already said that e.g. relock() locks an
_unlocked_ locker.

[ChangeLog][QtCore][QMutexLocker] QMutexLocker allowed relock() and
unlock() on an already closed (resp. open) locker object. These
semantics have always been undocumented and are now unsupported
(in both cases they yield undefined behavior.)

Change-Id: Id5f67beb5dc30d6435dae88a3085fba93ec7d96e
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-18 05:18:28 +01:00
Albert Astals Cid 6e23fc8580 QImage::operator==: Also compare the image colorspace
Pick-to: 6.3 6.2
Change-Id: I4cb86d32492876791fe852f8c3123b7d4a69a5bd
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
2022-03-18 01:32:57 +01:00
Edward Welbourne e10d613509 Add QByteArray::percentDecoded() as an instance method
Percent-decoding was previously only present as a static method taking
a QBA parameter; it might as well be an instance method of that
parameter. Change most QBA tests to use it rather the static method.

[ChangeLog][QtCore][QByteArray] percentDecoded() is now available as
an instance method of the byte array to be decoded, equivalent to the
static QByteArray::fromPercentEncoding().

Change-Id: I982101c44bdac5cc4041e85598d52ac101d38fa1
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-18 01:22:54 +01:00
Edward Welbourne e0206fe9d4 Get rid of QByteArray::nulTerminated()
It is private and was not called by anything inline, even in 5.15, so
can safely be removed without causing binary incompatibilities, now
that it is no longer used even out-of-line.

Task-number: QTBUG-74286
Change-Id: Iaec3877079746bd9ba7d1a39efbfb2711e7c00a5
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-03-18 01:22:54 +01:00
Edward Welbourne 0cee66048d Tidy up QByteArray::toPercentEncoding()
After inlining the local static void to which it used to delegate most
of the work, the main loop can access *this and we have no need for
yet another copy of it or the variables to iterate it. We can also
access the result array directly, rather than via a (poorly-named)
pointer.

It turns out that wrapping QBA in QBAV each time we call a lambda on
it costs enough to cause a 50% slowdown, so change the lambda to now
take the const refs we have. (Constructing the views only once is as
good, for reference.)

Change-Id: I81c5996d91415d8a933de714177a89462555ff03
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-18 01:22:54 +01:00
Sona Kurazyan 73e7fc2d8e Fix a few more {QString, QByteArray}::count() deprecation warnings
Change-Id: I0be2d5e7a8f6af3bc1077ae6d1f20cc5da8f2266
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-03-17 21:03:08 +01:00
Alexey Edelev aec6b00758 Disable init prioritization in QNX
This fixes issue with non working QHash when loading QML plugins in QNX.

Change-Id: I55c9edc58aa27cff694603e6281c980e1fedbeba
Taks-number: QTBUG-101341
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-17 19:43:29 +01:00
Tor Arne Vestbø 69d525a6fa Avoid populating font family aliases if family matched
When trying to match a font request to fonts in the database we might
end up with a mismatch due to the style not being available, but the
font family itself was.

If that's the case there's no point in trying to populate font aliases,
so we explicitly propagate this fact back to QFontDatabasePrivate::findFont
so that it can choose to not populate family aliases.

Fixes: QTBUG-98369
Fixes: QTBUG-99216
Pick-to: 6.3 6.2 5.15
Change-Id: I14470554c73eace836f57cb65e63ada594ccf62e
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2022-03-17 18:43:29 +00:00
Giuseppe D'Angelo 20d0ff1a39 QMutexLocker: add move semantics
The class is similar to unique_lock in that it allows for unlocking
and relocking. Since the locked state is tracked by QMutexLocker itself,
it's trivial to make it movable.

[ChangeLog][QtCore][QMutexLocker] The class is now movable.

Change-Id: I534044f8024575e996c12efb2236761d493798a3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2022-03-17 18:57:47 +01:00
Mårten Nordheim 4b8c20a297 Fix deprecated use of QColor::setNamedColor
'Use fromString() instead.'

Change-Id: I4efef147a8b0486f2664fd7fe6c35a9c82479b90
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2022-03-17 17:14:38 +01:00
Fabian Kosmale fb0c7a9956 QVariant: reduce transitive includes
Forward declare more types in qvariant.h, and do the same for qdebug.h
(which will be removed from qvariant in a separate patch).

As we now only forward declare containers (e.g. QMap, QList, ...), code
which includes <QVariantMap>, <QVariantList>... breaks without further
adjustment: So far, those headers simply included qvariant.h. However,
by introducing new actual headers for those types and adjusting
sync.profile, we can avoid this issue.

To avoid breaking leaf modules and user code, we make the change opt-in:
Unless QT_LEAN_HEADERS is defined to a value of >= 1, we still
include the superfluous headers. We also set this macro in qtbase via
QT_EXTRA_INTERNAL_TARGET_DEFINES.

[ChangeLog][Potentially Source-Incompatible Changes] qvariant.h no
longer includes <QList>, <QMap>, <QHash>, <QVarLengthArray>, <QSet> and
<QObject>. Code that relied on transitive includes might need to
explicitly include those headers now. Notably, including <QVariant> (or
qvariant.h) is no longer sufficient when using QVariant(List|Map|Hash).
Using them now requires including respectively <QVariantList>,
<QVariantMap>, or <QVariantHash>. Alternatively, including <QVariant>
and the <QList>, <QMap> or <QHash> header also works.

[ChangeLog][Potentially Source-Incompatible Changes] qdebug.h no longer
includes <QSet>, <QHash>, <QVarLengthArray> and <QMap>. Code that relied
on transitive includes might need to explicitly include those headers
now.

Task-number: QTBUG-97601
Change-Id: I142e5de709ed0b305716369a3266389ab7fbbb71
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2022-03-17 16:14:38 +00:00
Fabian Kosmale 468e9c13a9 Misc: Do not depend on transitive includes
As a drive-by, remove superfluous includes from qnetworkmanagerservice.h
and obey the coding conventions for includes in a few more places.

Change-Id: I65b68c0cef7598d06a125e97637040392d4be9ff
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-17 17:14:37 +01:00
Fabian Kosmale 49b25ab07b XCB: Do not depend on transitive includes
As a drive-by, follow the coding convention when including qobject.h

Change-Id: I73066646d7f03ee0138e70567738e296b2183f63
Reviewed-by: Liang Qi <liang.qi@qt.io>
2022-03-17 17:14:37 +01:00
Fabian Kosmale e4ab3e39e1 Sql: Do not depend on transitive includes
Change-Id: I9407c34c9fb6add655649dd7058bce7a25be5f5d
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-17 17:14:37 +01:00
Fabian Kosmale b73ce88998 Network: Do not depend on transitive includes
Change-Id: Ie37a4d332ff808e2524b1742fa70dc07992fa8c7
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-17 17:14:37 +01:00
Fabian Kosmale b5b4d0ec06 Widgets: Do not depend on transitive includes
Change-Id: Idfd7af066264dd38375d45771693a536a1985607
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
2022-03-17 17:14:37 +01:00
Fabian Kosmale caed0c3ac3 Gui: Do not depend on transitive includes
Change-Id: I27321235d9c8428de0cff1e22a618299b9e5a97f
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2022-03-17 17:14:37 +01:00
Fabian Kosmale ffa5820fa3 Core: Do not depend on transitive includes
Change-Id: I2c71188a4d27692a2d6ef1aa447b329627214b17
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2022-03-17 17:14:36 +01:00
Ulf Hermann 03b281a0f2 QColor: Explicitly return std::nullopt
gcc 10.2 struggles with returning just {} when compiling in release mode
with debug symbols. std::nullopt is also more readable.

Change-Id: Ib050d47e8741ee87bef865dd55ecba622faf25b4
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2022-03-17 17:14:36 +01:00
Ulf Hermann 98b8818ad7 QMetaObject: Allow custom meta calls
Add a new entry to the Call enum that can be used by dynamic meta
objects to encode their own metaCall variations.

Change-Id: I7890d11924ab99311b6f016ce97d2ab483c26d27
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2022-03-17 17:14:36 +01:00
Giuseppe D'Angelo 5089db0303 QFuture: fix QtFuture::connect corner-cases
Connecting to nullptr, or connecting to a non-signal PMF, would result
in a QFuture which would never finish. Catch these cases and handle
them.

Windows+MSVC for some reason fails the test. I can't entirely understand
why, so I've marked it as XFAIL, with QTBUG-101761 to track it.

Change-Id: I314980e7e9b7156d8cddd3b33d5cbf1d0bcd6116
Pick-to: 6.2 6.3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
2022-03-17 17:14:36 +01:00
Alexey Edelev 8adacba3e6 Add VERBATIM option to add_custom_command calls
Use VERBATIM option to prepare the correct command line for the
add_custom_command. This especially sensitive when using build
directories with names containing special symbols, that cannot be
handled by shell correctly.

Change-Id: I51d7041cb806411135fd59bf6273c04a3c695443
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2022-03-17 15:15:06 +01:00
Mårten Nordheim 74bef86da8 QVulkanWindow: fix QByteArray::count deprecation warning
By using QBA::size

Change-Id: I716c0e27230cd46e92ca5521d9a19cb296e221bd
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
2022-03-17 14:15:06 +00:00
Sona Kurazyan 893dd5d7be Add QStringView::localeAwareCompare()
QString already has a localeAwareCompare(QStringView, QStringView)
static method. Use it in QStringView::localeAwareCompare(QStringView).

[ChangeLog][QtCore][QStringView] Added
QStringView::localeAwareCompare().

Task-number: QTBUG-98431
Change-Id: Iec3865a5439d9fb653cc1150da21042186bdee98
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2022-03-17 14:27:45 +01:00
Liang Qi f08e57540d GUI: add ScreenWindowGrabbing capability
On Wayland, there is no protocol to do it yet.

Task-number: QTBUG-100792
Task-number: QTBUG-101145
Change-Id: Id72625a8161359111a2d0f43f3215e787778ba6b
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-03-17 14:27:44 +01:00
Marc Mutz 60592f72d6 Rest of QtBase: compile-optimize inline swap functions
Instead of using the overly-generic qSwap() monster, use

- qt_ptr_swap() for swapping raw pointers
- member-swap for swapping smart pointers and owning containers

In QtCore, this has proven to give a nice reduction in compile time
for Qt users, cf. b1b0c2970e.

Pick-to: 6.3 6.2
Task-number: QTBUG-97601
Change-Id: I53e031a021031d53a74a712cd0f5e6bb8bf800bd
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2022-03-17 07:15:06 +01:00
Marc Mutz f438d29b6f QtNetwork: compile-optimize inline swap functions
Instead of using the overly-generic qSwap() monster, use

- qt_ptr_swap() for swapping raw pointers
- member-swap for swapping smart pointers
- std::swap() for swapping scalars

In QtCore, this has proven to give a nice reduction in compile time
for Qt users, cf. b1b0c2970e.

Pick-to: 6.3 6.2
Task-number: QTBUG-97601
Change-Id: I26586da1f158fe6b18314abd8cf9bb040bc9cad1
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-03-17 07:15:04 +01:00
Marc Mutz 870bb22c17 QtDBus: compile-optimize inline swap functions
Instead of using the overly-generic qSwap() monster, use

- qt_ptr_swap() for swapping raw pointers
- member-swap for swapping smart pointers and owning containers
- std::swap() for swapping scalars

In QtCore, this has proven to give a nice reduction in compile time
for Qt users, cf. b1b0c2970e.

Pick-to: 6.3 6.2
Task-number: QTBUG-97601
Change-Id: I2cb0dd3cef3a2923e7d08bb9d93c692308797e5b
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2022-03-17 07:15:01 +01:00
Marc Mutz 9f8da21239 QDateTime: future-proof swap()
In Qt 7 32-bit builds, the ShortData will be larger than the
d-pointer.

So don't swap() the d-pointer, but a) delegate to Data to swap itself
and b) swap the ShortData there, adding a static_assert in the .cpp
file that triggers when the assumption that ShortData is always at
least as large as a pointer is violated.

Found while porting away from overly-generic qSwap(), so done that,
too.

Task-number: QTBUG-97601
Pick-to: 6.3 6.2
Change-Id: I5139da58d99e9491a582ff2cb2f817cd96952044
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-17 06:14:58 +00:00
Marc Mutz 73d0174f50 QLibrary: restore translated string
We want to pick this change to LTS branches, so we cannot change the
translated string.

Instead of fixing the order of placeholders, use multi-arg, which
performs only a single pass over the input and doesn't suffer from
placeholder injection by interpolation the way .arg() chaining does.

Requires to use QString::number(), though.

Amends 3636325946.

Pick-to: 6.3 6.2 5.15
Change-Id: I6484a052115096c609edfea27dfd36b196efc1b6
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-17 07:14:55 +01:00
Marc Mutz 021134195e QHash: fix -Werror=maybe-uninitialized (GCC 11.2)
The compiler doesn't understand understand that the only way ok can be
true is for qstrntoll() to have been executed.

  qhash.cpp:158:9: error: ‘seed’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
    158 |         if (seed) {
        |         ^~

Help poor GCC by initializing the variable unconditionally.

Amends cc5cc3225d.

Change-Id: Ic8387e0add2291d994f7f4d96c4bc614b2a8aa99
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-17 06:14:20 +00:00
Lorn Potter d10b910e39 wasm: remove compiler and linker warnings
INITIAL_MEMORY and PTHREAD_POOL_SIZE are linker flags only
USE_PTHREADS is both linker and compiler arguments.

Also increase default INITIAL_MEMORY

Pick-to: 6.3
Change-Id: Id1998efbf1d6de901f404db7e988f6cafd547a39
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-03-17 15:56:19 +10:00
Giuseppe D'Angelo d0cae531e6 QResultStore: remove unused include
Change-Id: I829e98af4f46156926a1ee68bddf4399bc557439
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
2022-03-17 06:34:55 +01:00
Giuseppe D'Angelo 9d685a870d QLoggingCategory: code tidies
Sprinkle explicit and remove an unnecessary operator in favor
of a named function.

Change-Id: I7e11b3910014827018341fde7d5aba36f9487fc4
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-17 05:34:55 +00:00
Giuseppe D'Angelo e0a7364b50 QThread: avoid lock/relock an empty QMutexLocker
These semantics are deprecated and about to be changed.
Drive by, use nullptr instead of 0.

Change-Id: I213bf7d528d2fa312549f9fa49a5533198eddf88
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-17 02:02:15 +01:00
Michal Klocek 2f894293ae Add missing install of pnglibconf.h for static builds
Installing only pngconf.h is not enough.

This commit amends be2745e478

Pick-to: 6.3
Change-Id: I8de1565434c315c7197d4602a8460ead794176d7
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2022-03-16 20:19:22 +01:00
Tatiana Borisova 715420095a Fix has_signaling_NaN usage for INTEGRITY
- The newest GHS compiler versions set the value of has_signaling_NaN to False.
  Add compilation and autotest fix for GHS-compiler 2021/2022 releases.

Task-number: QTBUG-99123
Pick-to: 6.2 6.3
Change-Id: I45e5da6759a15c60c17f896e565002cbba8524ed
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-16 20:09:37 +02:00
Marc Mutz 1977c922e9 QFlatMap: make insertion STL-compatible
That is, insert() doesn't overwrite an existing entry, and range
insert inserts the first of equivalent keys' values, not the last.

This allowed this author to optimize the implementation of
makeUnique() to a O(N) algorithm (was: O(N²)). Said optimization would
have been possible with the old semantics, too, but I wrote the
algorithm first and only then noticed the broken insert() behavior is
present on QFlatMap, too, so I decided not to let good code go to
waste and to fix both problems at the same time.

In order to give users a hint of the changed semantics, make the new
API opt-in until Qt 6.5, so Qt 6.4 ships with the both the old and the
new semantics disabled, where they contradict.

Fixes: QTBUG-100092
Change-Id: Ic96d8bfe6bed9068dbe8c0d7171bd8921050fd95
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
2022-03-16 18:28:27 +01:00
Kai Uwe Broulik e516a7bcf8 QAction: Add NOTIFY changed declaration to priority property
It already emits the signal and was merely missing the declaration.

This fixes warnings about depending on non-NOTIFYable properties
when binding to the priority property from QML.

Pick-to: 6.3 6.2
Change-Id: Ia91ae5d00d722bdb2fc1f89671c3e7faab4b129f
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-03-16 17:28:27 +00:00
Volker Hilsheimer 58a14d9433 Enable tests to turn off Windows Vista animations
Animations in that style depend on the current time, which makes it
impossible to run baseline tests. Introduce a dynamic property that
allows us to set the time that animations use.

This way, tests can turn the animation off, or control which time should
be used.

To keep performance overhead low, check only once whether the dynamic
property is set at all.

Pick-to: 6.3
Change-Id: I9bc57b9867fb0d852e101570eca4c7609e7fe1a8
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
2022-03-16 15:56:17 +01:00
Kai Köhne 9f5f64e9db Use QDebugStateSaver in example operator<<()
This makes sure that changes in the debug stream - like nospace() -
do not "leak". Also use the example snippet in QDebugStateSaver
documentation.

Pick-to: 6.2 6.3
Change-Id: I934976d2c7c2335abfec68c763526a5cbb0e6f1e
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
2022-03-16 15:56:17 +01:00
Eike Ziller 9943cf7371 QMainWindow: Fix unused separator widgets blocking mouse events
We need to hide separator widgets that are unused, otherwise they block
mouse events from the underlying widgets.

Pick-to: 6.2 6.3
Fixes: QTCREATORBUG-24600
Change-Id: I98c6d4860f683a861b89c4cad042bb734f590000
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-03-16 09:50:52 +01:00
Robert Löhning d865129d9e Painting: Fix value check in isUnclipped()
left() == INT_MIN or top() == INT_MIN will still underflow
in QRect's ctor, so the check must be more strict

Pick-to: 6.2 6.3
Change-Id: I12ab148934c8c90865ca9247bd8badeedd4a9f45
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
2022-03-16 02:31:10 +00:00
Robert Löhning 286a63898f Doc: Fix typos
Pick to: 6.3

Change-Id: Iaea3c0e567ddd6a72db0b2ba1731c416cf85ef47
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2022-03-16 02:26:56 +00:00
Marc Mutz e74e27e67e QObject: give some TLC to dumpRecursive()
In no particular order:

- use the variable field width feature of QString::asprintf() to
  generate the indentation implicitly, instead of fill()ing a
  QByteArray with the desired number of spaces

- just default-construct 'flags', don't assign an empty string

- use qUtf16Printable() to avoid funneling UTF-16 data through 8-bit
  encodings

- use a C++11 ranged for instead of a counted loop

- remove a pointless isEmpty() guard (the loop won't execute when the
  children().isEmpty())

- avoid copying object->children() (returns by cref, so it's also ok
  to stuff it directly into the ranged for loop).

Add a test.

Pick-to: 6.3
Change-Id: Ie7314713cb48de7e890cdee0760c0361dd24fd18
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-16 02:26:56 +00:00
Marc Mutz 78891e5390 QString/QByteArray: = default the move ctors
Instead of relying on implicit construction of the d-pointer and then
swapping that with other.d (using overly-generic qSwap(), no less),
simply let the compiler do The Right Thing™ via QArrayDataPointer's
move constructor.

Pick-to: 6.3 6.2
Task-number: QTBUG-97601
Change-Id: I3be30f99f6fb0e17d3550edbe64cbe80880e604a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-03-16 03:26:56 +01:00
Mårten Nordheim 156afbc9b8 Fix qt version tagging on windows with namespaces
The libraries linking to QtCore were looking for
__imp_qt_version_tag_6_4 but the exported symbol was
__imp_qt_version_tag_NAMESPACE_6_4 (with the mangled namespace)

Change-Id: Ida7b18bea4b5e7dab9c0efb63279779d1af898cb
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-16 01:10:23 +00:00
Kai Köhne 7d5604c194 Deprecate QElapsedTimer::TickCounter
Also remove left-over code paths related to it.

[ChangeLog][QtCore] QElapsedTimer::TickCounter enum is now
deprecated. Qt does not use the Windows API behind this
enum already since Qt 5.9, so it's fair to assume that
any code path relying on the enum is dead code.

Change-Id: I308fe23658835034774e2015a8ee64659102de56
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-16 00:30:34 +01:00
Kai Köhne aaa3184f8d Doc: Update documentation for QElapsedTimer's in Windows
We only support Windows versions that feature the PerformanceCounter
API (see also 48fd845c61).

Pick-to: 6.3 6.2 5.15
Task-number: QTBUG-84433
Change-Id: I477f9015ee8c87d31f859f529631f3a6b0215ae6
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-16 00:30:34 +01:00
Thiago Macieira cc5cc3225d QHash: Initialize the hash seed as soon as QtCore loads
Instead of lazily initializing (with some platform exceptions, see the
equivalent qsimd.cpp commit). The rationale is the same as for
qCpuFeatures(): this the qHashBits() function is hot and the current
code generation needs to save a lot of state because of the possible
call to the C++ runtime functions to enable the thread-safe
initialization of the hash seed.

[ChangeLog][Important Behavior Changes] QtCore now initializes the QHash
global seed before the main() function is run, so it is no longer
possible to use qputenv() to affect the seed value for the current
process. Disabling the random global seed for the current process should
be done programmatically with by calling either the 6.2 function
QHashSeed::setDeterministicGlobalSeed() or, if compatibility with Qt 5
is required, by calling qSetGlobalQHashSeed() with value 0.

Change-Id: I54f205f6b7314351b078fffd16cf7eae93f9e27e
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2022-03-15 15:05:44 -08:00
Thiago Macieira 41b2c4204b Q_DECL_INIT_PRIORITY: make the initializers actually run
The runtime runs the function pointers located between subsections $XCA
and $XCZ only, so using $QT meant it would never get run.

Change-Id: Ibf4acec0f166495998f7fffd16d8ecb19019ce10
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
2022-03-15 15:05:44 -08:00
Thiago Macieira 9eae3e9b60 QString: reorganize the {starts,ends}With implementations
Same as the previous commit, one of the reasons it was done like this
was because of git blame. The qt_{starts,ends}_with functions that are
shared between QtPrivate:: and QString:: are getting inlined so there's
no code benefit.

Pick-to: 6.3
Change-Id: Ib42b3adc93bf4d43bd55fffd16c19a8ed3c94483
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
2022-03-15 15:05:44 -08:00
Kai Köhne 54e4e42083 Doc: Remove mentioning of Windows 7, Vista from QFont documentation
We only support Windows 10 in Qt 6.

Task-number: QTBUG-84433
Pick-to: 6.2 6.3
Change-Id: I0c5bacac570dbb97a71f5af04b645d69040a5fe6
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2022-03-15 23:05:43 +00:00
David Faure fd4672d020 QShader: fix memory leak in detach()
qAtomicDetach() does   d = new T(*d);  which calls the copy constructor.
Since there was no copy constructor declared for QShaderPrivate,
the compiler generated one which copied the refcount over, instead of
setting it to 1 in the detached instance. As a result, the destructor
didn't delete the QShaderPrivate.

Nothing was calling this constructor that takes a pointer, so clearly
this was a typo for a copy constructor.

Detected in an ASAN build, the qsb tool exited in error.

Pick-to: 6.3 6.2 5.15
Change-Id: Idbe659b52d2600ac7c11b09142a6aa5b25310df9
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2022-03-15 21:08:21 +01:00
Mårten Nordheim d8d202a3ba Fix remaining uses of deprecated QScopedPointer::take
Change-Id: I804aef0aabc1c1bccdf92ff8da7b6c2f5377252a
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2022-03-15 21:08:21 +01:00
Marc Mutz bbae5c891b QFileSystemEngine: fix potential formatting error
It's not immediately clear that trashedName doesn't contain %1 or %2,
in which case the subsequent .arg() would replace that instead of the
intended %2.

Fix by using QString::asprintf(), which doesn't perform multiple
interpolation passes.

Pick-to: 6.3 6.2 5.15
Change-Id: Ib6c24bfea01db4cdc80f7547c8269cce3f815158
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
2022-03-15 20:05:31 +00:00
Marc Mutz f3c340c276 QStringTokenizer::toContainer(): allow more types of target containers
The previous constraint called for the value_type of the container to
exactly match the value_type of the tokenizer, which means
toContainer() could only ever work on containers of views. But there
is value in allowing QStringList, even though it works only on QL1S
needles (QStringView -> QString isn't implicit). But users may have
other types that for better or worse implicitly convert from views, so
we shouldn't over-constrain the function.

[ChangeLog][QtCore][QStringTokenizer] toContainer() now works on
containers whose value_type can be constructed from the tokenizer's
value_type. It no longer requires an exact match.

Fixes: QTBUG-101702
Change-Id: Ie384cd1c4b51eaa57675f2a014141ceec8651c81
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2022-03-15 21:05:31 +01:00
Mårten Nordheim 6eda249402 Fix deprecated use of QBA/Q*String::count
'Use size() or length() instead'

Change-Id: I284fce29727c4c1ec9ea38a4e8ea13a9e0af5390
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
2022-03-15 20:18:56 +01:00
Alexander Volkov e494b39b33 Unix: Correctly update options pane for PDF printer
Update printer and m_currentPrintDevice before calling
QPrintDialogPrivate::selectPrinter() to show values for
PDF printer instead of the previously selected printer.

Pick-to: 6.3 6.2 5.15
Change-Id: Iacc34ca4460ec4de0b4b373cd875628733df01bd
Reviewed-by: Albert Astals Cid <albert.astals.cid@kdab.com>
2022-03-15 19:18:55 +00:00
Andreas Eliasson 7c12eb1706 Doc: Revise Qt Core module landing page
Use new global include snippets for the 'Using the Module' section and
reorganize the sections structure. The sections should follow this
order:

- Using the Module
- Articles and Guides
- Examples
- (API) Reference
- Module Evolution
- Licenses and Attributions

Task-number: QTBUG-100369
Pick-to: 6.3
Change-Id: I239bcf53719f0036867ac1d513dc74e1bfa7bc8b
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
2022-03-15 18:00:10 +01:00
Andreas Eliasson dc5a9eacf5 Doc: Revise Qt GUI module landing page
Move some of the sections into an overview page and reorganize the
contents structure. In addition, provide links to the different sections
that are covered in the overview.

Task-number: QTBUG-100369
Pick-to: 6.3
Change-Id: I46eb3df4a09e57f5778002ce694decf134b65e83
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
2022-03-15 17:00:10 +00:00
Andreas Eliasson 31e78d51ef Doc: Use new global include snippets in Qt Network landing page
Task-number: QTBUG-100369
Pick-to: 6.3
Change-Id: I985d49640dbd63d48e4614063309a8130225ff57
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
2022-03-15 18:00:10 +01:00
Assam Boudjelthia 6696134644 Android: guard against potential null pointer access
androidPlatformIntegration might be called before
setAndroidPlatformIntegration() is called, and also all other
uses of androidPlatformIntegration is already guarded in our
code.

Pick-to: 6.2 6.3
Task-number: QTBUG-100470
Change-Id: Ifd7d36ba7f2f3b55652466825d7fd84c87ec5e19
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2022-03-15 16:09:04 +02:00
Eirik Aavitsland f46db29d8c Painting: fix overriding and combining different clip types
In a recent improvement (6de36918c0) the
last set clip region or path was stored in separate variables, in
order to be set again if the aliasing mode changed. That solution was
too simplistic, as it would break down as soon as more than one clip
area was set, with the latter either replacing or intersecting the
first. It was also unnecessary to introduce new storing of clip areas
and transforms, as those are already recorded in the clipInfo stack in
the painter state. This patch hence reverts much of that implementation.

However the basic idea of setting the clip area again after AA change
is good, so that part is kept, implementated instead by calling a
pre-existing function to replay the clipInfo stack.

One of the baseline test cases is extended to excercise the
combination of clip areas. As a driveby, support for setClipRectF is
added to the painting baseline test scripts, and the build of the
manual lance tool is fixed.

Fixes: QTBUG-101474
Pick-to: 6.3 6.2
Change-Id: Ide8b70d8cbf138deb06cbb84f69e62f7405886e6
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
2022-03-15 12:45:46 +01:00
Volker Hilsheimer 1822550529 QFormLayout: Fix assert when showing with hidden rows
Amends a74cdf778c, after which the
initialization of items in invisible rows is skipped. Since data members
in QFormLayoutItem were lazily initialized, this resulted in out-of-bounds
access of QList entries.

Use member initialization for all QFormLayoutItem fields, and check that
vLayoutIndex is valid before using it to access the list entry. Skip
labels and fields for which it is not initialized.

Add test case. As a drive-by, silence the test's provoked warning
messages via ignoreMessage.

Change-Id: I374b414a51df20b9af3087a2676061fc6b7f23e2
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-15 12:45:46 +01:00
Joerg Bornemann 7d00e72677 cmake_automoc_parser: Fix issue found by CodeChecker
Fix exp63-cpp by assigning fresh values to mocEntries and mocIncludes to
get them out of the moved-from state.

Change-Id: I9ad36c0ebd922bc6a0c9e61c15be02cb987c1edb
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2022-03-15 12:45:46 +01:00
Marc Mutz 0d064328b2 De-pessimize Windows version of QSystemLocalePrivate::measurementSystem()
Don't create a QString from a wchar_t array to check that the array
contains "1\0". Just do character-by-character comparison.

Change-Id: I7e5c2348c24af6a9b046c91423a52f756ceb9eb9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-15 10:36:09 +00:00
Marc Mutz 9da4c6bfb7 QObject: port setObjectName() to QAnyStringView
... while keeping the QString overload for users that pass actual
QStrings (e.g. QStringLiteral).

However, QString and QAnyStringView cannot be overloaded (they're
ambiguous for most arguments), so we need to make one of them a
Q_WEAK_OVERLOAD.

Normally, we'd make the new function weak and keep the old function
as-is, but, here, that would be beside the point, because all callers
would continue to resolve to the QString overload, and nothing would
call the QAnyStringView one.

So we really want the old function to be the Q_WEAK_OVERLOAD, so that
the QString overload is only selected when actual QStrings are
passed. That means we need to leave the old function in a compat build
(compiled in, but not visible in the public header). Since
Q_WEAK_OVERLOADs cannot be (easily) exported (they're templates), make
it call a private function (which can be, and is, exported).

Reviewers may questions whether one can overload

   setObjectName() and
   template <typename = void> setObjectName()

The answer is that we can, because templates mangle differently from
normal functions. We can even call the template function (with
explicit template arguments), as seen in removed_api.cpp.

This adapts the interface of the function to how most users use it:
They pass QLatin1String or just const char[]. Only very few passed
QStringLiteral, which, ignoring that fact that it produces a ton of
code for the temporary QString's destructor that's never executed,
would have been, and continues to be, the optimal way of passing data,
modulo plugin bugs (QTBUG-51602, QTBUG-49061).

[ChangeLog][QtCore][QObject] Added setObjectName() overload taking
QAnyStringView.

Fixes: QTBUG-101393
Change-Id: I1243545614754b4978d4c8641460980b6b293c1a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2022-03-15 11:36:09 +01:00
Marc Mutz 6313a1adf5 Extract Method QObjectPrivate::ensureExtraData()
... to centralize the creation of QObjectPrivate::extraData.

Change-Id: I04e97779ceb0168fa7660e77e0dab2ed3e1ad03e
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
2022-03-15 11:36:09 +01:00
Marc Mutz de699decb4 QFSFileEngine: don't call QFileSystemEntry::filePath() twice
Cache the result. Clean up the return statement as a drive-by.

Change-Id: Ic1bebd4ad4dd970202701be60fbcd286b9924df5
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-15 11:36:09 +01:00
Marc Mutz 78073f8ab6 Restore C++20-deprecated mixed-enum bitwise operators
C++20 deprecated arithmetic on enum types. For enums used on QFlags<>,
these operators have always been user-defined, but when the two enums
are of different type, such as QFrame::Shape and QFrame::Shadow, the
deprecation warning pops up.

We have in the past fixed these in our headers by manual casts, but
that doesn't help our users when our API requires them to OR together
enums of different type.

Until we can rework these APIs to use a variadic QFlags type, we need
to fix it in an SC and BC way, which is what this patch sets out to
do.

The idea is simply to mark pairs of enums that are designed to be ORed
together and replace the deprecated built-in bitwise operators with
user-defined ones in C++20. To ensure SC and BC, we pass an explicit
result type and use that to check, in C++17 builds, that it matches
the decltype of the result of the built-in operator.

This patch is the first in a series of similar patches. It introduces
said markup macro and applies it to all enum pairs that create
warnings on (my) Linux GCC 11.3 and Clang 10.0.0 builds. It is
expected that more such markups are needed, for other modules, and for
symmetry.

Even with this patch, there is one mixed-enum warning left, in
qxcbwindow.cpp. This appears to be a genuine bug (cf. QTBUG-101306),
so this patch doesn't mark the enums involved in it as designed to be
used together.

This patch also unearthed that QT_TYPESAFE_FLAGS, possibly
unsurprisingly so, breaks several mixed bitwise flags-enum operations
(QTBUG-101344).

Pick-to: 6.3 6.2 5.15
Task-number: QTBUG-99948
Change-Id: I86ec11c1e4d31dfa81e2c3aad031b2aa113503eb
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
2022-03-15 11:36:09 +01:00
Marc Mutz 3636325946 QLibrary: fix possible arg() format clobbering
The fileName could potentially contain the string "%n", n ≤ 5, in
which case the following .arg() calls would interpolate their
arguments at the wrong position.

Fix by interpolating fileName last.

Pick-to: 6.3 6.2 5.15
Change-Id: I1a75a7671cbfe85ba3b2df240c3ef74482fc848d
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-15 11:36:09 +01:00
Marc Mutz ce83a03cfd QColor: deprecate isValidColor, setNamedColor, string-ish ctors
[ChangeLog][QtGui][QColor] The constructors from string-ish type, as
well as the setNamedColor() and isValidColor() functions, have been
deprecated effective Qt 6.6 in favor of fromString() and
isValidColorName(), resp.

Fixes: QTBUG-101389
Change-Id: I002646bd48c1e4340dc6842fd136fc9f35bb9b61
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-15 10:36:09 +00:00
Christian Heimlich 7f3c68316e QVersionNumber: Make documentation period display style consistent
In the current documentation for this class there are two ways that the
period character is referred to.

Code Style: https://doc.qt.io/qt-6/qversionnumber.html#fromString
Quote Style: https://doc.qt.io/qt-6/qversionnumber.html#fromString-1

The code-style version is significantly clearer and clean looking, while
the quote-style version is easy to misinterpret, especially when
followed by an additional period at the end of a sentence.

This change updates the documentation so that the nicer style is used in
all locations to improve clarity and consistency.

Change-Id: I11a6d82accb923e24c00b93728ea084d27efd06d
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-15 02:48:44 -04:00
Giuseppe D'Angelo 9b8015ed8d QMutexLocker: add isLocked()
It's basically for free.

[ChangeLog][QtCore][QMutexLocker] Added the isLocked() function.

Change-Id: Idad5fa249ba8f135dcf81c7b7596caa3a888e99c
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-15 03:32:14 +01:00
Thiago Macieira 07b176ce70 qversiontagging: merge the qt_version_tag symbols
The symbols all still exist, but they all have the same address. For
example, in my Linux debug build:

 $ eu-readelf --dyn-syms lib/libQt6Core.t.so | grep qt_version_tag
 4352: 00000000005e3e74      1 OBJECT  GLOBAL DEFAULT       18 qt_version_tag_6_0@@Qt_6
 4356: 00000000005e3e74      1 OBJECT  GLOBAL DEFAULT       18 qt_version_tag_6_1@@Qt_6
 4358: 00000000005e3e74      1 OBJECT  GLOBAL DEFAULT       18 qt_version_tag_6_2@@Qt_6
 4362: 00000000005e3e74      1 OBJECT  GLOBAL DEFAULT       18 qt_version_tag_6_3@@Qt_6
 4364: 00000000005e3e74      1 OBJECT  GLOBAL DEFAULT       18 qt_version_tag_6_4@@Qt_6
 6458: 00000000005e3e74      1 OBJECT  GLOBAL DEFAULT       18 qt_version_tag@@Qt_6.4
 6460: 00000000005e3e74      1 OBJECT  GLOBAL DEFAULT       18 qt_version_tag@Qt_6.0
 6462: 00000000005e3e74      1 OBJECT  GLOBAL DEFAULT       18 qt_version_tag@Qt_6.2
 6463: 00000000005e3e74      1 OBJECT  GLOBAL DEFAULT       18 qt_version_tag@Qt_6.3
 6466: 00000000005e3e74      1 OBJECT  GLOBAL DEFAULT       18 qt_version_tag@Qt_6.1

(The part after the @ is the ELF version; two @ indicates the default
version)

Saves N bytes where N is the Qt minor version number. The exclusion of
Darwin (macOS) is because clang says that it has the "alias" attribute,
but then fails when you use it.

Change-Id: I74249c52dc02478ba93cfffd16d249d77d6f7565
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-14 18:26:13 -08:00
Thiago Macieira dda4186842 qversiontagging: remove the old inline assembly content
No longer used, since GCC and Clang always have __attribute__((used)).

Change-Id: I74249c52dc02478ba93cfffd16d2494fa632ea10
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-14 18:26:12 -08:00
Thiago Macieira 40c8bc4202 qversiontagging: Use C++17 inline variables also on Unix
C++17 inline variables allow us to declare a variable that shall be
merged before linking, which replaces the need for the "comdat" part of
the inline assembly. The GCC attribute "used" tells the compiler not to
discard this variable, like the MinGW case. Additionally, the "retain"
attribute (where supported) tells both the compiler and linker not to
discard, allowing an intermediary, static library to keep this
definition.

This enables support for OSes besides FreeBSD and Linux, where it was
previously available. For example, on macOS:

 $ nm libexec/rcc | grep qt_version_tag
                 U _qt_version_tag_6_4
 00000001000ec608 s _qt_version_tag_6_4_use

On Linux, the assembly output before this change (Clang 13) was:
        .section        .qtversion,"aG",@progbits,qt_version_tag,comdat
        .p2align        3
        .quad   qt_version_tag@GOT
        .long   394240
        .p2align        3

After this change:
        .hidden qt_version_tag_use              # @qt_version_tag_use
        .type   qt_version_tag_use,@object
        .section        .qtversion,"aGwR",@progbits,qt_version_tag_use,comdat
        .weak   qt_version_tag_use
        .p2align        3
qt_version_tag_use:
        .quad   qt_version_tag
        .quad   394240                          # 0x60400
        .size   qt_version_tag_use, 16

The notable changes here are that there is a symbol and that the section
is writable. The latter is required because we store the pointer to the
qt_version_tag variable instead of just an offset in the GOT. The total
number of relocations in the resulting binary remains the same. We've
actually shrunk the binary by one pointer size.

Change-Id: I74249c52dc02478ba93cfffd16d23951a6bcd784
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-14 18:26:10 -08:00
Thiago Macieira 13ad42c679 qversiontagging: Add Windows support
Details in the comment in the header. I haven't recently tested with
MSVC, but I designed this originally in 2015 when I did have access to
Visual Studio so I know it works (I've confirmed with Godbolt).

With MinGW, this produces assembly:

        .globl  qt_version_tag_used
        .section        .qtversion,"dr"
        .linkonce same_size
        .align 16
qt_version_tag_used:
        .quad   __imp_qt_version_tag_6_4
        .quad   394240

394240 is 0x060400. The DLL import table contains:

 0015f03c       0015f294 00000000 00000000 00165478 0016012c

        DLL Name: Qt6Core.t.dll
        vma:  Hint/Ord Member-Name Bound-To
        161318      7  _Z11qt_assert_xPKcS0_S0_i
...
        164cf8   6073  qt_version_tag_6_4

Change-Id: I42e7ef1a481840699a8dffff1404f45b13f60ba6
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
2022-03-14 18:26:09 -08:00
Edward Welbourne b15e01ff4e Use LogElementType rather than int as test-element type
All callers do in fact pass members of the enum, so just making the
defualt value be LET_Undefined rather than -1 eliminates any need for
it to be an int.

Change-Id: Ic1c9ae1522363666d1208aba60d4b4df5eff6ce0
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-03-14 20:16:35 +01:00
Edward Welbourne d854534789 Correct character semantics documentation in QByteArray(View)
QByteArray's list of case-implicating functions included three that
don't implicate case and omitted one that does. QByteArrayView lacked
any mention of the liminal nature of these and other methods that
presume any particular semantics to character data.

Pick-to: 6.2 6.3
Change-Id: I928ef2274704584f8a137c0a4a7aa3c3da57718e
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-14 20:16:35 +01:00
Edward Welbourne 479c95729a Support global data tags in blacklisting identification of test-cases
Previously the blacklisting file format only worked with slot:data or
plain slot names for the items to blacklist. However, tests with
global data report themselves with the global data-row tag in the same
way as function-specific ones do; and tests which have both join the
two as slot(global:data) in the test output name, so the reader is apt
to mistake global:data for a data tag. In any case, it is potentially
desirable to be able to blacklist a function with either or both of
global and local data-row tags specified. Add support for that and
remove a blacklisting that was only needed due to the lack of this
support.

For now, make the new parameter to checkBlackLists() optional, so
that qtdeclarative's qmltest framework can adapt to this change.

Fixes: QTBUG-100870
Change-Id: I9125811ebdab75d3fb462ba8b60561f003426502
Reviewed-by: Pasi Petäjäjärvi <pasi.petajajarvi@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-03-14 20:16:35 +01:00
Edward Welbourne f081b2cb37 Inline q_toPercentEncoding() in QByteArray::toPercentEncoding()
The latter didn't do much aside from call the former, which was
private with no other callers. This prepares the way for som tidy-up.

Change-Id: Iff741662365553e719a9c8b1253aff11de96455f
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-14 20:16:35 +01:00
Edward Welbourne 5a349a9c1b Eliminate the last place that QBA::nulTerminated() is needed
By simply forwarding two QByteArray values (as views, since that
suffices) we can retain knowledge of their sizes and thus avoid the
need to null-terminate in order to forward to a hand-rolled strchr()
that depended on that. Using QBAV::contains() turns out to be quite
expensive, so use memchr() to implement a more efficient check.
In the process, turn a pointlessly repeated check into an assertion.

Change-Id: I316623206e1cf315a59d54cf574649d6acbb5c43
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-14 20:16:35 +01:00
Edward Welbourne 5291dc7dcf Avoid possible allocation by amending a condition
QBA::toPercentEncoding() duplicated a condition to decide whether it
should include a percent-replacement character in its always-encode
list (which might allocate memory), where simply pretesting each
character against the percent achieves the same effect more cheaply.

Change-Id: Ic87a977713207d74b07ee6b811b0ead3b6945ef6
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-03-14 20:16:35 +01:00
Edward Welbourne 08d6bc2477 Prevent exclusion of percent character from percent-encoding
When a percent-replacement present in the exclude list would,
normally, not have been encoded, it was encoded regardless, as
otherwise round-tripping fails. However, when percent or its
replacement would normally have been encoded, its presence in the
exclude list lead to it not being encoded, which duly breaks
round-tripping.  It also violates
https://datatracker.ietf.org/doc/html/rfc3986#section-2.4

[ChangeLog][Incompatible behavior change][QByteArray] When
converting to percent-encoding, it was possible to exclude the percent
character (or its replacement, unless this is one of the characters
not normally encoded) from conversion.  Doing so would violate RFC
3986 Section 2.4 and break round-tripping of any string that contains
the percent character. The percent character, or its replacement, is
now always encoded, even if mentioned in the exclude list, as the
documentation has always claimed.

Change-Id: I885ce33e05dc6877f1b3700fb0870fa30556a5aa
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-14 20:16:35 +01:00
Laszlo Agocs 1ea73bc29b Fix losing QOpenGLWidget paints when a child widget is invisible
Pick-to: 6.3 6.2
Change-Id: I136b486d30e31acadd6b1b837dc7e834ee3e23fb
Fixes: QTBUG-101620
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
2022-03-14 17:48:52 +01:00
Morten Johan Sørvig 4676418842 wasm: prevent WebGL vertex attribute errors
WebGL is stricter than OpenGL ES and require that unused
vertex attribute arrays are disabled. This prevents
errors such as:

  WebGL: INVALID_OPERATION: drawElements: no buffer
  is bound to enabled attribute

Pick-to: 6.3
Change-Id: I68384a9f6954b6a1960ba6e8afd1fdbdfefe2335
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
2022-03-14 15:13:06 +00:00
Marc Mutz 67385c04ce QDataStream: make qfloat16 streaming a non-member
Remove the member function from the API and re-add it as a hidden
friend on qfloat16, where it will be a complete type.

[ChangeLog][QtCore][Potentially Souce-Incompatible Changes] The
qfloat16 QDataStream operators are now hidden friends and only found
by argument-dependent lookup. Previously, these were member functions
on QDataStream.

Fixes: QTBUG-93499
Pick-to: 6.3
Change-Id: Ib3d4df7a3fe3a9d0938f3be8b70b50fef0416262
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2022-03-14 15:55:12 +01:00
Oliver Eftevaag 06c2ffdae7 Fix typo
Change-Id: I4cc6c6867490c1e10ca6c4bf5620325826a687a3
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-03-14 10:15:12 +01:00
ChunLin Wang 3017f59345 Remove disappeared QIconEngine::IconNameHook from QIcon
QIconEngine::IconNameHook disappeared,see commit
fce84f76f0

Fixes: QTBUG-98755
Pick-to: 6.2 6.3
Change-Id: Id0600b5682de4bfeaae9ca4e975d454d7ee158ff
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-03-14 02:53:53 +00:00
Aleksandr Reviakin 367f96aedf wasm: Use % instead of vh for canvas dimensions
Pick-to: 6.3
Fixes: QTBUG-95067
Change-Id: I19e439eb81200728c2b773ab6799bb205caa1231
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-03-13 23:24:59 +00:00
Liang Qi 9c6b986d96 gui: return first default device when seatName isNull
for QInputDevice::primaryKeyboard() and
QPointingDevice::primaryPointingDevice().

This also reverts ae9fefe3c8.

Fixes: QTBUG-100790
Pick-to: 6.3
Change-Id: Id02f277db25f823eb29e939e25801325df8e4076
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
2022-03-13 22:08:16 +01:00
David Faure 7382e5735e QCompleter: fix crash when setting the same model twice
Found when retesting the testcase completer.zip from QTBUG-54642

Pick-to: 6.3 6.2 5.15
Change-Id: Id84eefeb3a33dc6d790cfa23755352381cc097a9
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-03-13 16:13:29 +00:00
Axel Spoerl 2140edaaab Add setCurrentId in QWizard
setCurrentId(int id) implemented incl. forward skip warning
respective test added in tst_qwizard

Fixes: QTBUG-99488
Change-Id: Ieaf31698baf1e8ec97484b4a221c8587385c9fb3
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-03-12 13:24:29 +01:00
Volker Hilsheimer 63a3fd12fe QFile::moveToTrash: Remove support for old MinGW SDKs
SDK headers that shipped with older versions of MinGW didn't declare
the IFileOperation COM interface, so the original implementation of
moveToTrash included an inferior fallback that used the Shell APIs.

That fallback was already removed in 6a51ff3f0d,
now remove the #ifdef'ery as well.

Change-Id: Iba44df8267f5c1e3e883368d848eb9be1bd02ac3
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Ievgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>
2022-03-12 03:40:24 +01:00
Sona Kurazyan 6585963583 Deprecate {QString, QByteArray}::count()
And remove their uses.

[ChangeLog][QtCore][Deprecation Notice] Deprecated QString::count()
and QByteArray::count() that take no parameters, to avoid confusion
with the algorithm overloads of the same name. They can be replaced
by size() or length() methods.

Change-Id: I6541e3235ab58cf750d89568d66d3b1d9bbd4a04
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-12 01:05:45 +01:00
Sona Kurazyan 28d2514428 Use qstringfwd.h when forward declaring string classes
Task-number: QTBUG-98434
Change-Id: I37b70a1b7bc164fa7dc9cb702827297ca66a6fdc
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-12 01:05:45 +01:00
Niklas Wenzel b83fc8aafa GDI: Fix style name detection if font has no typographic subfamily name
This fixes the detection of font style names for the fonts "Bahnschrift"
and "Alef Bold" as described in Microsoft's documentation:
https://docs.microsoft.com/en-us/typography/opentype/spec/name

Fixes: QTBUG-101609
Fixes: QTBUG-101610
Pick-to: 6.3
Change-Id: I5bd2b72817c07195f1e98d1d924c6f673d9e24e0
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2022-03-11 21:25:01 +01:00
Niklas Wenzel cb65e4182f Add styleName to debug output
This makes it easier to debug the font matching behavior.

Task-number: QTBUG-101436
Pick-to: 6.3
Change-Id: Id682384e7d9d669b9e736e00ef22cadfd0b4bfec
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2022-03-11 21:25:01 +01:00
Laszlo Agocs 68a4c5da9a Compose render-to-texture widgets through QRhi
QPlatformTextureList holds a QRhiTexture instead of GLuint. A
QPlatformBackingStore now optionally can own a QRhi and a
QRhiSwapChain for the associated window.  Non-GL rendering must use
this QRhi everywhere, whereas GL (QOpenGLWidget) can choose to still
rely on resource sharing between contexts. A widget tells that it
wants QRhi and the desired configuration in a new virtual function in
QWidgetPrivate returning a QPlatformBackingStoreRhiConfig. This is
evaluated (among a top-level's all children) upon create() before
creating the repaint manager and the QWidgetWindow.

In QOpenGLWidget what do request is obvious: it will request an
OpenGL-based QRhi. QQuickWidget (or a potential future QRhiWidget)
will be more interesting: it needs to honor the standard Qt Quick
env.vars. and QQuickWindow APIs (or, in whatever way the user
configured the QRhiWidget), and so will set up the config struct
accordingly.

In addition, the rhiconfig and surface type is (re)evaluated when
(re)parenting a widget to a new tlw. If needed, this will now trigger
a destroy - create on the tlw. This should be be safe to do in
setParent. When multiple child widgets report an enabled rhiconfig,
the first one (the first child encountered) wins. So e.g. attempting
to have a QOpenGLWidget and a Vulkan-based QQuickWidget in the same
top-level window will fail one of the widgets (it likely won't
render).

RasterGLSurface is no longer used by widgets. Rather, the appropriate
surface type is chosen.

The rhi support in the backingstore is usable without widgets as well.
To make rhiFlush() functional, one needs to call setRhiConfig() after
creating the QBackingStore. (like QWidget does to top-level windows)

Most of the QT_NO_OPENGL ifdefs are eliminated all over the place.
Everything with QRhi is unconditional code at compile time, except the
actual initialization.

Having to plumb the widget tlw's shareContext (or, now, the QRhi)
through QWindowPrivate is no longer needed.  The old approach does not
scale: to implement composeAndFlush (now rhiFlush) we need more than
just a QRhi object, and this way we no longer pollute everything
starting from the widget level (QWidget's topextra -> QWidgetWindow ->
QWindowPrivate) just to send data around.

The BackingStoreOpenGLSupport interface and the QtGui - QtOpenGL split
is all gone. Instead, there is a QBackingStoreDefaultCompositor in
QtGui which is what the default implementations of composeAndFlush and
toTexture call. (overriding composeAndFlush and co. f.ex. in eglfs
should continue working mostly as-is, apart from adapting to the
texture list changes and getting the native OpenGL texture id out of
the QRhiTexture)

As QQuickWidget is way too complicated to just port as-is, an rhi
manual test (rhiwidget) is introduced as a first step, in ordewr to
exercise a simple, custom render-to-texture widget that does something
using a (not necessarily OpenGL-backed) QRhi and acts as fully
functional QWidget (modeled after QOpenGLWidget). This can also form
the foundation of a potential future QRhiWidget.

It is also possible to force the QRhi-based flushing always,
regardless of the presence of render-to-texture widgets. To exercise
this, set the env.var. QT_WIDGETS_RHI=1. This picks a
platform-specific default, and can be overridden with
QT_WIDGETS_RHI_BACKEND. (in sync with Qt Quick) This can eventually be
extended to query the platform plugin as well to check if the platform
plugin prefers to always do flushes with a 3D API.

QOpenGLWidget should work like before from the user's perspective, while
internally it has to do some things differently to play nice and prevent
regressions with the new rendering architecture. To exercise this
better, the qopenglwidget example gets a new tab-based view (that could
perhaps replace the example's main window later on?). The openglwidget
manual test is made compatible with Qt 6, and gets a counterpart in form
of the dockedopenglwidget manual test, which is a modified version of
the cube example that features dock widgets. This is relevant in
particular because render-to-texture widgets within a QDockWidget has
its own specific quirks, with logic taking this into account, hence
testing is essential.

For existing applications there are two important consequences with
this patch in place:

- Once the rhi-based composition is enabled, it stays active for the
lifetime of the top-level window.

- Dynamically creating and parenting the first render-to-texture
widget to an already created tlw will destroy and recreate the tlw
(and the underlying window). The visible effects of this depend on the
platform.  (e.g. the window may disappear and reappear on some,
whereas with other windowing systems it is not noticeable at all -
this is not really different from similar situtions with reparenting
or when moving windows between screens, so should be acceptable in
practice)

- On iOS raster windows are flushed with Metal (and rhi) from now on
(previously this was through OpenGL by making flush() call
composeAndFlush().

Change-Id: Id05bd0f7a26fa845f8b7ad8eedda3b0e78ab7a4e
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-03-11 21:25:00 +01:00
Morten Johan Sørvig 851dc581cf Revert "QScreen_win: retrieve user friendly monitor name"
This made the screen names be non-unique (in my case
“28E850”), which causes the code in handleScreenChanges()
to think they are the same screen.

This reverts commit e9fd1c6aab.

Pick-to: 6.3 6.2
Change-Id: I97fb76aeb66857b4bf9b3c5b4bd6db6024446798
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Yuhang Zhao <2546789017@qq.com>
2022-03-11 19:32:08 +00:00
Marc Mutz d743fd0d0a qDecodeDataUrl(): treat ";base64" marker as case-insensitive
RFC2397 doesn't explicitly mention it, but references RFC2045, which,
in Section 2, states:

> All media type values, subtype values, and parameter names as
> defined are case-insensitive.

and goes on, in 6.1:

>   mechanism := "7bit" / "8bit" / "binary" /
>                  "quoted-printable" / "base64" /
>                  ietf-token / x-token
>
>   These values are not case sensitive

So regardless of whether "base64" is a parameter name, or a mechanism,
we need to treat it case-insensitively.

Use QLatin1String::endsWith() instead of QByteArray::endsWith(),
because the former takes Qt::CaseInsensitive while the latter would
need a toLower().

Add a test.

As a drive-by, use the same trick for the existing case-insensitive
comparison with "charset".

As a further drive-by, fix inappropriate uses of QLatin1String (=
where they don't prevent allocations).

[ChangeLog][QtCore][QUrl] Now recognizes the ";base64" marker in
"data:" URLs case-insensitively.

Pick-to: 6.3 6.2
Change-Id: Ife6ba771553aaad3b7c119c1fa631f41ffa8f590
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-11 19:15:49 +00:00
Marc Mutz cfa4879b41 De-inline dtors of QTextureFileHandler hierarchy
Destructors of polymorphic classes should be out-of-line to pin vtable
and type_info objects to a single TU.

Pick-to: 6.3
Task-number: QTBUG-45582
Change-Id: I541437a3ff53852527f6278355f7b549e62e17f7
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-11 19:15:49 +00:00
Marc Mutz abe3b4c9b9 Extract Header qstringfwd.h
... from qstringalgorithms.h and qutf8stringview.h, in order to
centralize the declaration of the string classes, much like
qcontainerfwd.h does for Qt containers.

[ChangeLog][QtCore] Added header qstringfwd.h containing
forward-declarations of all Qt string classes.

Task-number: QTBUG-98434
Change-Id: I4cf1ede9fe6c286230f4c7e7abe379da28ce5d15
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Anton Kudryavtsev <antkudr@mail.ru>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-11 20:15:49 +01:00
Marc Mutz d15222fbaf QFlatMap: fix warning -Wunused-but-set-variable (GCC) in remove_if()
Amends 6f5c78fe3d.

Change-Id: I01a474f8ccb9de7d7b76a33a950542e38edc78e4
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-03-11 20:15:49 +01:00
Marc Mutz 91fbe3fe78 HTTP2: port to QByteArrayView where it's trivial
Nothing serious, just was curious and played around a bit, so might as
well merge it.

There's much more here that could be done, but I lack the time to do
it.

Change-Id: Idd4ea09a7a413ed5911ffe16841f3d5c944ec1a5
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-03-11 20:15:48 +01:00
Marc Mutz 5295043908 HPack: make padding_is_valid static constexpr
... because we can.

Change-Id: I3a813fa9c33e47d20a00e6a331cbbcf6f85e63e7
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-03-11 19:15:48 +00:00
Marc Mutz fa0764bbd2 QItemSelectionModel: avoid 24 relocations
Use qOffsetStringArray() instead of an array of pairs of pointers.

This unearthed a problem with SIGNAL and SLOT calling qFlagLocation()
(meaning in debug mode, the array was runtime-initialized, not just
relocated), which we work around by using the new QT_STRINGIFY_
{SIGNAL,SLOT} macros now.

Saves 24 relocations, but, interestingly, saves only 4b in text size
on GCC 11.2 Linux AMD64 -O2 C++20 builds (TEXT and DATA combined)
while saving 760b on the equivalent Clang 10 libc++ build (expected,
in both cases: 24 * (sizeof(void*) - sizeof(quint16))):

Clang:

  $ size qtbase/lib/libQt6Core.so.6.4.0
     text    data     bss     dec     hex filename
  5476156   90520   16185 5582861  55300d qtbase/lib/libQt6Core.so.6.4.0
  $ ~/bin/relinfo.pl qtbase/lib/libQt6Core.so.6.4.0
  qtbase/lib/libQt6Core.so.6.4.0: 6528 relocations, 3598 relative (55%), 2540 PLT entries, 2227 for local syms (87%), 0 users
  $ ninja libQt6Core.so
  [6/6] Creating library symlink qtbase/lib/libQt6Core.so.6 qtbase/lib/libQt6Core.so
  $ size qtbase/lib/libQt6Core.so.6.4.0
     text    data     bss     dec     hex filename
  5475604   90312   16185 5582101  552d15 qtbase/lib/libQt6Core.so.6.4.0
  $ ~/bin/relinfo.pl qtbase/lib/libQt6Core.so.6.4.0
  qtbase/lib/libQt6Core.so.6.4.0: 6504 relocations, 3574 relative (54%), 2540 PLT entries, 2227 for local syms (87%), 0 users

GCC:

  $ ~/bin/relinfo.pl qtbase/lib/libQt6Core.so.6.4.0
  qtbase/lib/libQt6Core.so.6.4.0: 6300 relocations, 5343 relative (84%), 318 PLT entries, 1 for local syms (0%), 0 users
  $ size qtbase/lib/libQt6Core.so.6.4.0
     text    data     bss     dec     hex filename
  6019871   75896   16952 6112719  5d45cf qtbase/lib/libQt6Core.so.6.4.0
  $ ninja libQt6Core.so
  [6/6] Creating library symlink qtbase/lib/libQt6Core.so.6 qtbase/lib/libQt6Core.so
  $ ~/bin/relinfo.pl qtbase/lib/libQt6Core.so.6.4.0
  qtbase/lib/libQt6Core.so.6.4.0: 6276 relocations, 5319 relative (84%), 318 PLT entries, 1 for local syms (0%), 0 users
  $ size qtbase/lib/libQt6Core.so.6.4.0
     text    data     bss     dec     hex filename
  6020091   75672   16952 6112715  5d45cb qtbase/lib/libQt6Core.so.6.4.0

Pick-to: 6.3
Change-Id: I60749953f1a63d23d696a5a547cd924ec259ead3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-11 20:15:48 +01:00
Marc Mutz efe411b8b7 qobjectdefs.h: DRY the SIGNAL/SLOT macros
Factor common code into a separate macro to DRY.

The immediate paractical consequence is that we now have a way to
reliably get a const char[] from the SIGNAL or SLOT macros, e.g. for
storing in a QOffsetStringArray, without causing compile errors in
debug mode or running the danger of causing runtime initialization via
qFlagLocation, which is of limited value in this circumstance, anyway,
because qFlagLocation only stores the last two strings.

Pick-to: 6.3
Change-Id: I67401858e94eedc1200fdd08e695fd56d10f8560
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-11 20:15:48 +01:00
Topi Reinio b0d106267c Doc: Fix erraneous auto-link on Qt D-Bus landing page
QDoc interprets a sequence of special characters as something to auto-
link to; Escape the underscore character to prevent this.

Fixes: QTBUG-100562
Pick-to: 6.3
Change-Id: I61a10d7ea6878ef93197b0d329e16b8867d8ad30
Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
2022-03-11 20:15:48 +01:00
Laszlo Agocs 888b75aa12 vulkan: Try loading libvulkan.so.1 first
Change-Id: I876899fbfc126136f2842e9361e21ac10af8f14b
Pick-to: 6.3
Fixes: QTBUG-101592
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2022-03-11 11:14:35 +01:00
Axel Spoerl dfe5f99120 Fix QDockWidget's dock area permissions after hovering
When a QDockWidget's dock areas are restricted by setAllowedAreas(...)
and a second QDockWidget is hovered over it, the first QDockWidget can
be docked to any dock area of the main window. Area restrictions will
be ignored.
That is due to the first QDockWidget being implicitely mutated into a
QDockWidgetGroupWindow upon hovering. By definition, the latter has no
docking restricitons.
This fix adds a check if a QDockWidgetGroupWindow has a single QDockWidget child.
In that case, the single child's area permissions will restrict docking.

Fixes: QTBUG-100670
Pick-to: 6.3 6.2 5.15
Change-Id: I903b074739953791634f482c9cf4b9a95a1d93d3
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-03-11 09:57:07 +00:00
Assam Boudjelthia 7d77deb281 Android: rephrase default value statement use in manifest doc page
Use "The default value is \c xxx" instead of "Default \c xxx".

Pick-to: 6.2 6.3
Change-Id: Id75b45499c7fc0e9d42e66fa2b8b3515c863c61c
Reviewed-by: Nicholas Bennett <nicholas.bennett@qt.io>
2022-03-11 05:25:46 +02:00
Assam Boudjelthia c099502622 CMake: add space between ABI name and "(default)" string
Pick-to: 6.3
Change-Id: Ie47d48fd2da4edc1377211e9b8b425f11b44314a
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2022-03-11 05:25:46 +02:00
Thiago Macieira 30e90841bc QProcess/Doc: update the information on how the program is found
Pick-to: 5.15 6.2 6.3
Change-Id: I54f205f6b7314351b078fffd16d05b1eecb24544
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
2022-03-10 18:20:13 -08:00
Thiago Macieira 19b7f854a2 Enable -mno-direct-extern-access and ELF protected visibility
The -mno-direct-extern-access tells the compiler and linker that
references to symbols outside this ELF module mustn't be direct and must
instead always go through the GOT or PLT (the PLT can additionally be
disabled with -fno-plt). The ELF protected visibility tells the compiler
and linker that this symbol is present in the dynamic symbol table as an
export, but it cannot be interposed by another ELF module.

This option is required for user code to link properly to Qt, otherwise
they will get linker errors (assuming GNU binutils >= 2.39) or runtime
failures (glibc >= 2.35). Both versions of glibc and binutils are older
than GCC 12, so it's a safe assumption they are in use and downgrading
the toolchain or libc is not supported. Adding this option to the
compilation is assured for CMake and qmake-based projects.

For example, all accessess to QCoreApplication::self in QtCore, after
this change and with GCC 12 are relocation-free and direct:

000000000013ebf0 <QCoreApplicationPrivate::checkInstance(char const*)>:
  13ebf0:       cmpq   $0x0,0x4f73d0(%rip)        # 635fc8 <QCoreApplication::self>
  13ebf8:       setne  %al
  13ebfb:       je     a90fe <QCoreApplicationPrivate::checkInstance(char const*) [clone .cold]>
  13ec01:       ret

Meanwhile, accesses to the same variable in other modules are indirect
via the GOT:

   66650:       mov    0x876e1(%rip),%rax        # edd38 <QCoreApplication::self@Qt_6>
   66657:       cmpq   $0x0,(%rax)

This replaces the -Bsymbolic and -Bsymbolic-functions (broken)
functionality that Qt has been using or attempting to use since ~2006.

See https://gitlab.com/x86-psABIs/x86-64-ABI/-/issues/8#note_606975128

Change-Id: Iad4b0a3e5c06570b9f5f571b26ed564aa0811e47
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2022-03-10 17:10:57 -08:00
Kai Köhne 1818d6682d Doc: List third-party attributions on Qt Network landing page
Change-Id: I167ef5088f522aad33518cabe5a9287168294f3e
Reviewed-by: Nicholas Bennett <nicholas.bennett@qt.io>
Reviewed-by: Ievgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-03-10 22:05:04 +01:00
Robert Löhning 0031c5cb79 QStyle: Fix cases when logicalValue is outside range
Change-Id: I410c40425d6677612dbe3a40cbaa1debba998064
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2022-03-10 12:39:11 +01:00
Lorn Potter 279b0ba6c4 wasm: fix issue with passing username/password to network request
The data scope was wrong, it needs to live beyond the attribute strut

Change-Id: If1ceb4967fc1755d4968a69bcd9d82b234bd871d
Done-with:  Vincent Rouillé
Fixes: QTBUG-101551
Pick-to: 6.3 6.2 5.15
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Reviewed-by: David Skoland <david.skoland@qt.io>
2022-03-10 17:57:19 +10:00
Fabian Kosmale e441985534 QMetaProperty: use early return
This improves readability.

Change-Id: I6552463b5f14d79b99efd3c0633695401bdb7f78
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-10 07:21:11 +01:00
Fabian Kosmale ba6c1d2785 QProperty: fix threading issues
QObject's cache the binding status pointer to avoid TLS lookups.
However, when an object is moved to a different thread, we need to
update the cached pointer (as the original thread might stop and thus no
longer exist, and to correctly allow setting up bindings in the object's
thread).
Fix this by also storing the binding status in QThreadPrivate and
updating the object's binding status when moved. This does only work
when the thread is already running, though. If it is not running, we
instead treat the QThreadPrivate's status pointer as a pointer to a
vector of pending objects. Once the QThread has been started, we check
if there are pending objects, and update them at this point.

Pick-to: 6.2 6.3
Fixes: QTBUG-101177
Change-Id: I0490bbbdc1a17cb5f85044ad6eb2e1a8c759d4b7
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
2022-03-10 07:21:11 +01:00
Noah Davis 64ffe0aacb Widgets: use QPlatformTheme::ButtonPressKeys for pressing buttons
QComboBox is included because it works like a button when it is not
editable. QGroupBox is included because it has a checkbox and QCheckBox
is a subclass of QAbstractButton.

Change-Id: Iad89259314e77f78c915dce83ec601df94c88941
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
2022-03-09 19:13:41 -05:00
Michal Klocek 2de667a6ff Install also config headers for 3rdparty libjpeg
Amends be2745e478

Pick-to: 6.3
Change-Id: I9dd1a6858e9e9c9c3749dd33eeda3b1c509b69b3
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2022-03-10 01:06:21 +01:00
Edward Welbourne 9ff44989ec Remove two unused functions from qbytearray.cpp
The q_toPercentEncoding() overload without percent parameter and the
q_normalizePercentEncoding() function are nowhere used. Although they
were extern symbols, they were not declared in a header. Thei names
mark them as Qt-internal. So removal should be safe.

Change-Id: If6cece20796a80d98a9af4e764443f3ab8c555c9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-09 23:29:25 +01:00
Robert Löhning 4b49c2006f QStyle: Fix overflows and crash when converting slider positions
Qt Creator crashes when max is INT_MAX and min is -1, see bugreport.

Change-Id: I441e76c0ff87052083ed3d77e6085b186402e5d8
Fixes: QTBUG-101581
Pick-to: 6.2 6.3
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-03-09 20:38:16 +00:00
Sona Kurazyan e77dfcf843 Fix the ambiguity when calling QLatin1String(0)
This amends 736213bf66

Change-Id: I2fc16eba31898eb621866f8612bb7d26c95b5435
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-09 20:37:10 +00:00
Giuseppe D'Angelo f875ff5180 QMutexLocker: code tidies
Rename isLocked in preparation for a future commit. Rename m
as well for consistency.

Change-Id: I1c8d040bca6825a698ec804ea142d208abacd5cc
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-09 21:37:10 +01:00
Thiago Macieira 77e4177d16 QGlobalStatic: fix Clang warning about expression in unevaluated context
From Clang 13:

qlocale.cpp:854:161: error: expression with side effects has no effect in an unevaluated context [-Werror,-Wunevaluated-expression]

Pick-to: 6.3
Change-Id: Ibf4acec0f166495998f7fffd16d6c75ef1e04262
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2022-03-09 12:37:10 -08:00
Marc Mutz e3cc3900cd qutf8stringview.h: don't rely on transitive include of qbytearrayview.h
Amends fe46cd59ce.

Pick-to: 6.3
Change-Id: I9cc07367e1674c93610b8376a03f749c844159ec
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
Reviewed-by: Ievgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-03-09 18:46:17 +01:00
Sona Kurazyan 82e12c79b2 Add an overload of QStringView::count() for QLatin1String
Required for the API symmetry between QStringView and QLatin1String.

[ChangeLog][QtCore][QStringView] Added an overload of
QStringView::count() for QLatin1String.

Change-Id: Ic49a4b31e8f6f0969eff0f792654d23a60e06c49
Task-numer: QTBUG-98431
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2022-03-09 15:58:47 +01:00
Sona Kurazyan 30d28810ee Add QLatin1String::count(needle)
[ChangeLog][QtCore][QLatin1String] Added QLatin1String::count(needle).

Task-number: QTBUG-98433
Change-Id: I31c9fdf14fd81500722ff9f5998eadf0e6cedc5c
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2022-03-09 15:58:47 +01:00
Mårten Nordheim 567c31e8ee QHostInfo/Unix: Fix resolv never unloading
Due to some unfortunate shadowing

Pick-to: 6.3 6.2 5.15
Change-Id: Ib2660516f9ba9974c84a043bd2677b7890fc76f9
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-03-09 14:31:17 +01:00
Pasi Petäjäjärvi f5f6487e80 QNX: Fix compiler warning by adding default return value
In static member function 'static QQnxAbstractVirtualKeyboard::EnterKeyType
QQnxAbstractVirtualKeyboard::qtEnterKeyTypeToQnx(Qt::EnterKeyType)':
warning: control reaches end of non-void function [-Wreturn-type]

Pick-to: 6.2 6.3
Task-number: QTBUG-101382
Change-Id: If3b0eda5d36257b0fbed54fb0a032c3b9d7ff989
Reviewed-by: James McDonnell <jmcdonnell@blackberry.com>
2022-03-09 14:03:21 +02:00
Pasi Petäjäjärvi b680ae3442 QNX: Fix compiler warnings by using correct format specifiers
Also change qt_safe_read to use correct return value.

warning: format '%d' expects argument of type 'int',
but argument 3 has type 'size_t' {aka 'long unsigned int'} [-Wformat=]

warning: format '%u' expects argument of type 'unsigned int',
but argument 3 has type 'ssize_t' {aka 'long int'} [-Wformat=]

Pick-to: 6.2 6.3
Task-number: QTBUG-101382
Change-Id: I1ee42b84a477451a98838c8cea3cca7c73f7cbaa
Reviewed-by: James McDonnell <jmcdonnell@blackberry.com>
2022-03-09 14:03:21 +02:00
Samuel Mira 2edc0025fa Fix quick file dialog on android
Patch 13399bd54d084ed837ec061ca9315dbd173f3b48 removed the accept
handler on QQuickFileDialog, which was triggering setSelectFiles on
android.
So changed qandroidplatformfiledialoghelper to also emit currentChanged
which will trigger the QQuickFileDialog to setSelectFiles since there
is a connect to that signal. Emitting currentChanged signal is also the
signal used in others QPlatformFileDialogHelpers.

Fixes: QTBUG-101013
Pick-to: 6.3
Change-Id: I22f2d583f4be26a83e1c19190458fb5011e40095
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
2022-03-09 13:17:28 +02:00
Eirik Aavitsland 31d401dec6 Fix compilation for wasm
libjpeg's internal putenv() function uses system setenv(), but that is
not found when building for webassembly. Just disable the entire
putenv function, since it is not used anyway.

Pick-to: 6.3 6.2 5.15
Change-Id: I1eb60f31562ef4e33c656ff3b3752bef6f88fcb8
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
2022-03-09 08:51:14 +01:00
Thiago Macieira c4d78703e0 forkfd: don't attempt to guess EWOULDBLOCK when WNOHANG is active
Reading the kernel sources, I was sure we'd get an ECHILD if the child
hadn't exited yet, but that's not the case. We only get ECHILD if the
current process has no child processes. But if we do have one and the
one we're waiting for hasn't exited, waitid() returns 0.

So let's not attempt to correct it with forkfd_wait() or forkfd_wait4().
Those have "wait" in the name, so they should behave exactly the same
way. The man pages say:

 waitpid(): if WNOHANG was specified and one or more child(ren)
       specified by pid exist, but have not yet changed state, then 0 is
       returned.
 waitid(): returns 0 on success or if WNOHANG was specified and no
       child(ren) specified by id has yet changed state

This was found while studying QTBUG-100174.

QProcess does not use this code path (blocking mode forkfd only).
Matching OpenDCDiag PR:
https://github.com/opendcdiag/opendcdiag/pull/62

Pick-to: 6.2 6.3
Change-Id: Ibf4acec0f166495998f7fffd16d6de6853a6e5a8
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-08 09:18:40 -08:00
Thiago Macieira 15ac809c99 forkfd: sync with OpenDCDiag
Matches 0cd579d973/framework/forkfd/forkfd.c

Change-Id: Ibf4acec0f166495998f7fffd16d6deb90aa05668
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-08 09:18:35 -08:00
Mårten Nordheim e83c9e4e8e QAbstractSocket: update setSocketOption documentation
Specify that it should not be called until the internal
socket engine has been created.

Given that most usages of this function will be on QUdpSockets
and that people will likely want to call bind() on those
anyway, we just document this rather than implement some
caching mechanism.

Pick-to: 6.3 6.2
Fixes: QTBUG-67576
Change-Id: Ia5d3ade95460b7c5685681ee098f1c00bff43a90
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-08 15:44:17 +01:00
Mårten Nordheim 034d8898f8 Fix deprecated uses of QScopedPointer
By changing it to unique_ptr.

Pick-to: 6.2 6.3
Change-Id: I91abb69445b537d4c95983ae735341882352b29d
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-08 15:44:17 +01:00
William Jones 87725ee759 QCocoaFileDialogHelper: Always enable symlinks and aliases to directories
We always enable directories, so that the user can navigate into them,
so we should do the same for symlinks and aliases to directories.

This is the same behavior the native dialog has when not implementing
shouldEnableURL and relying purely on allowedFileTypes.

Fixes: QTBUG-28379
Pick-to: 5.15 6.2 6.3
Change-Id: I7ae4eb8120aa87cb685f3561d5e1c7257b0c9349
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-03-08 13:31:43 +01:00
Thiago Macieira 0335755e52 QText*Format: future-proof by adding own QDataStream stream operators
These five classes add no members to QTextFormat, so their streaming
must, by all means, be identical to QTextFormat. But should that change
in the future, we don't want to accidentally slice the objects by
calling the parent operators.

Required by "Cause compilation errors if you forget to declare
QDataStream operators"

Pick-to: 6.3
Change-Id: Ic15405335d804bdea761fffd16d4a4193db28bc4
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
2022-03-08 00:31:30 -08:00
Thiago Macieira 38e6b637b7 CMake: add detection of x86 VAES and AVX512VBMI2 features
We have VAES code in qhash.cpp that isn't getting compiled right now.

Change-Id: Ibf4acec0f166495998f7fffd16d6961261dec361
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
2022-03-08 00:31:30 -08:00
Marc Mutz ed5978effe QColor: port string-parsing from out parameters to optional<>
Makes for easier reading of code, and allows qt_get_hex_rgb(), which is
called from different TUs, to be marked as PURE.

Change-Id: Ie7d4e5a164ca1daf521e18ff47f17885bc1443c1
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2022-03-08 05:51:11 +00:00
Marc Mutz a992f4b4c0 QColor: remove setColorFromString()
This private method doubled as the implementation of both fromString()
and isValidColorName(). By reformulating isValidColorName() as
fromString().isValid(), we can then turn setColorFromString() into
fromString(), by returning the data, instead of setting it on *this
through use of exported functions.

Since we need to touch the if's anyway, to remove braces, use C++17
if-with-initializer to turn the second if into an else-of, saving one
return {}.

Change-Id: If3f8182a40c0c6d6ad514431b5870e69d0e95769
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-03-08 06:51:11 +01:00
Marc Mutz 78b6876974 Long live QColor::fromString()!
It is customary for Qt types that can be constructed from string-ish
to provide a fromString() named constructor. QColor didn't, relying
instead on a set of overloaded implicit and explicit constructors.

Add the named constructor, with the intent to deprecate the string-ish
QColor constructors after a grace period.

To prevent new users from using known-to-become-deprecated API, mark
the old functions as \obsolete.

Also rename isValidColor() to isValidColorName(). The only reason why
these are lumped together in single commit is so that their docs can
refer to each other instead of having to temporarily refer to obsolete
API.

[ChangeLog][QtGui][QColor] Added fromString() and isValidColorName(),
both taking QAnyStringView.

Task-number: QTBUG-101389
Change-Id: I2857c728257ad2f14c7c968b45547bdf07c44b63
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2022-03-08 06:51:10 +01:00
Marc Mutz 4b768b9f34 QPublicSuffixDatabase: don't go thru QString for debug output
The data is guaranteed to be in US-ASCII (result of toHex()), so
there's no need to jump through ASCII → UTF-16 → UTF-8 hoops.

Found by Clang and QT_ASCII_CAST_WARN.

Amends 16b614f2e1.

Change-Id: Ib6789af9fb90952ecbe805e182b0639e1d0704b1
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Ievgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>
2022-03-07 20:58:06 +01:00
Pasi Petäjäjärvi fc1487878b eglfs: QNX uses own QPA plugin and not eglfs
Remove compilation workarounds to get rid of warnings as those QPA
plugins are not supported by QNX.

warning: cast from 'void*' to 'EGLNativeDisplayType' {aka 'int'}
loses precision [-fpermissive]
warning: invalid conversion from 'EGLNativeDisplayType' {aka 'int'}
to 'void*' [-fpermissive]

Pick-to: 6.2 6.3
Task-number: QTBUG-101382
Change-Id: I515708a8869498eb91df4fcba85a7b751d13a25c
Reviewed-by: Rafael Roquetto <rafael.roquetto@qt.io>
Reviewed-by: James McDonnell <jmcdonnell@blackberry.com>
2022-03-07 21:58:06 +02:00
Marc Mutz 53890b5d3c qtestmouse.h: compile with QT_TYPESAFE_FLAGS
Also include the comprehensive tests for bool cast compilation which I
originally wrote to confirm that the QTEST_ASSERT() change should be™
correct.

Pick-to: 6.3
Task-number: QTBUG-101406
Change-Id: I9a2871bfd4be9999b7a720bec775bba7aeffbe24
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
2022-03-07 18:25:35 +01:00
Mårten Nordheim 944b5a8e3e Win: Fix use of deprecated isTopLevel()
By using the suggested isWindow()

Change-Id: Ic9eb8f3e422a966f1ecbc0ba3d852bdf95928778
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-03-07 18:25:35 +01:00
Kai Köhne 71af0d7059 Re-add missing 'we mean it' header
This got lost in commit b852584556 .
Also augment util/x86simdgen/header so that the header is
automatically included when qsimd_x86_p.h is re-generated.

Change-Id: I3e59b983f78b8c1aced3757e1aa5dceb6d653d97
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-07 14:04:25 +01:00
Giuseppe D'Angelo 5e91f142aa Miscellanea fixes for QT_TYPESAFE_FLAGS in our headers
In preparation for adding it to headersclean.

Some remarks:

* QStandardItemModel builds just fine (QFlags has comparison operators
against literal zero); the warning we however get is about 0 converted
to a null pointer constant. There's nothing we can do about that one
(even <compare> gives such a warning).

* Several code was depending on flags->int conversions. Add toInt(),
but also cast again to the expected type to avoid warnings in case
toInt() returns unsigned int.

* Ported to explicit casts to bool rather than test(Any)Flag to minimize
confusion for people unfamiliar with the test*Flag methods.

Change-Id: I5be280ac33a0b38e2680096f0e79129fd55ba241
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2022-03-07 02:13:14 +01:00
Tor Arne Vestbø 9e01827193 Add QFileInfo::isAlias() to reflect whether the file is a macOS alias
Change-Id: I772066d0d8e69893f7c4aee1cd2305d46d5834c4
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-06 18:46:54 +01:00
Tor Arne Vestbø 34b5e38f20 Distinguish macOS aliases from normal symbolic links
The deprecated Carbon function FSIsAliasFile() returned isAlias only for
actual aliases, whereas the replacement CFURLCopyResourcePropertyForKey
with kCFURLIsAliasFileKey returns true for both aliases and symbolic
links.

Since we didn't explicitly check for AliasType in any of our internal
code, or or any of the public API, the distinction did not cause any
issues, but if we want to expose QFileInfo::isAlias() we need to fix
this.

Pick-to: 6.2 6.3 5.15
Change-Id: I29f795d55fe40898de319aa1cb0a4a1b5646bbd6
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-06 18:46:48 +01:00
Pasi Petäjäjärvi 55136998b3 Workaround QCC not handling error suppression macro correctly
Fixes also similar warnings from other Qt modules:
warning: offsetof within non-standard-layout type
is conditionally-supported [-Winvalid-offsetof]

Pick-to: 6.2 6.3
Fixes: QTBUG-101411
Fixes: QTBUG-101381
Fixes: QTBUG-101415
Task-number: QTBUG-101384
Task-number: QTBUG-101382
Change-Id: I23158c6ef90c7b4aeeaeeced32214a31acf8f6b1
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-05 22:02:22 +02:00
Assam Boudjelthia 1956ca7d70 Document use of android:allowNativeHeapPointerTagging in the manifest
Document the tag for more clarity on why it's needed, and for what
platforms.

Pick-to: 6.2 6.3
Task-number: QTBUG-97009
Task-number: QTBUG-91150
Change-Id: Ie4522fb582583be07270d3cdbf83992897b51669
Reviewed-by: Nicholas Bennett <nicholas.bennett@qt.io>
2022-03-05 17:37:33 +02:00
Lorn Potter 42aa0028b7 wasm: fix network reply error finished() signaling
The network reply needs to send the finished() signal after
any error.

Change-Id: Iafc42d26f91241293042b72201eef2e88613e468
Fixes: QTBUG-101286
Pick-to: 6.3 6.2
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-03-05 15:59:51 +10:00
Lorn Potter f3150368c3 wasm: fix native keyboard on iOS
Apple added iPhonePlatform to navigator properties and so use that

Fixes: QTBUG-101441
Change-Id: I5a0f27fc18dfa224b6373c5d809cf884d51c880a
Pick-to: 6.3
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-03-05 15:59:47 +10:00
Thiago Macieira 49722de995 QWeakPointer: befriend other QWeakPointers
Commit c677b3b8af added move constructors,
which introduced the issue.

Pick-to: 6.2 6.3
Fixes: QTBUG-100795
Change-Id: I74249c52dc02478ba93cfffd16d2c879b923e352
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
2022-03-04 19:00:45 -08:00
Mårten Nordheim e09dd6b124 QAbstractSocket: remove note about WinRT
It's no longer supported

Pick-to: 6.3 6.2
Change-Id: I751ed0904f17e11c65bd60b55e11db9066d01ab2
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-05 03:31:58 +01:00
Sona Kurazyan f39f539858 Add numeric conversion methods to QLatin1String
[ChangeLog][QtCore][QLatin1String] Added numeric conversion
methods.

Task-number: QTBUG-98433
Change-Id: I414577ae715debe3d5ba9c6a160859aca790e017
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
2022-03-05 02:03:17 +01:00
Timur Pocheptsov bb30beb726 QIOSFileDialog/QIOSDocumentPickerController - handle dismissed view controller
When we use a native view controller for selecting documents, we have
two methods to implement from UIDocumentPickerDelegate (a file was selected
or the selection was cancelled). Unfortunately, swiping a view away
was not handled, so neither 'accept' nor 'reject' was called. Depending
on the classes using QIOSFileDialog, this may leave them in some incorrect
state, not knowing that they are 'closed' anyway.
As suggested by Tor Arne, the solution is to implement
UIAdaptivePresentationControllerDelegate's method, namely
-presentationControllerDidDismiss:, which never gets called if the
controller was dismissed programatically (the case of accept/reject).

Pick-to: 6.3 6.2 5.15
Fixes: QTBUG-93505
Change-Id: I28404aa280465ef8eb0f5c26c8c2e4e4a6c66641
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-03-05 01:01:34 +01:00
Mårten Nordheim bf6d313ec8 QErrorMessage: fix deprecated warning about standardIcon
Change-Id: Idf50c1b74fddfccded2003528181f81a7a0ca8ac
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-03-05 00:30:58 +01:00
Mårten Nordheim 148d52e04d QMessageBox: fix deprecated warning about using old ctor
Change-Id: Ib53962e3527e2703af5ff36ce2fd4bd5ea987d85
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-03-05 00:30:58 +01:00
Mårten Nordheim 76016d9948 QPrintDialog/win: Fix use of deprecated QMessageBox::warning
by using the new one

Pick-to: 6.3 6.2
Change-Id: I8779107079c4e3d4b1d48c05b6fbfef1b6e98b99
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-03-05 00:30:58 +01:00
Mårten Nordheim fd72c0d26c QSqlTableModel: suppress deprecation warning
It's just a proxy-setter so we cannot really avoid the call

Pick-to: 6.3 6.2
Change-Id: I4230075a906c100ddb9722160859e7a2c8e26ebc
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-03-05 00:30:58 +01:00
Sergio Martins 006aa6c2ee Fix QWindow::mapTo|FromGlobal() for the embedded case
The code didn't make much sense:
    - QHighDpi::fromNativeLocalPosition should not take global positions
    - QPlatformWindow::mapFromGlobal() should not take local positions

Tested with a basic MFC window that has a QMainWindow as child
(parented with QWinWidget from QtWinMigrate). Menus would be off
when on a secondary screen with dpi factor > 1

Change-Id: Ib5cbf5d29ed97c786f7f7ba4e868b70cb5435239
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-03-04 22:53:44 +00:00
Assam Boudjelthia daf7f07c1b Android: terminate argv passed to main() with nullptr
the char array of argv passed to the app's main() function
need to be null terminated [*] and argv to be **char.

[*] http://eel.is/c++draft/basic.start.main#2

Fixes: QTBUG-101028
Pick-to: 6.2 6.3 5.15
Change-Id: I6e3a685f092a92a94f60d166357b75d2538af74c
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2022-03-05 00:36:40 +02:00
Edward Welbourne 93526430a5 Correct handling of {next,previous}Transition before FIRST_DST_YEAR
A recent change introduced a cut-off in believing MS's claims that a
zone has always had a yearly cycle of DST, to stop believing it before
1900, as no actual zone adopted DST that early. However, this was only
applied to the data() method to get the data for a specified time;
failure to do the same for {next,previous}Transition lead to
inconsistent results and tripped up an assertion. The change to data()
also failed to consider the situation of a southern hemisphere zone,
for which the rule will claim the early part of the year was in DST;
and init() should also mark an initial DST-recurrence rule as starting
no earlier than 1900.

Add corresponding FIRST_DST_YEAR checks to {next,previous}Transition()
to be consistent with the one in data(), refine data()'s checking and
amend init().

This amends commit 9a83706046

Pick-to: 6.3
Fixes: QTBUG-100873
Change-Id: Ic9822b87caa01561bc0b7d0355963e4c80ef047c
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-03-04 23:26:12 +01:00
Edward Welbourne be79443b68 Fix inverted condition on year starting in DST
The first transition in a year with DST is *to* DST precisely if the
year *doesn't* start in DST, not if it does.

Also fix the startsInDst() check it's using there, which neglected the
possibility that the year's DST transition might be faked.

This amends commit d98b43005e

Pick-to: 6.3
Change-Id: I17422fa9972f826b5bf7e325f5e579f41300fd97
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-04 23:26:12 +01:00
Edward Welbourne fe4c93652c Improve handling of newYearOffset in qtimezoneprivate_win.cpp
In nextTransition() it wasn't being carried over from one rule to the
next, as intended. It needs to be defined at function level, set for
the first rule and updated for each new year tried. Also assert that
it does faithfully reflect the standard time in rules without
transitions.

In the process of fixing that, since it's computed from the
yearEndOffset() of a prior year, test whether that year is less than
the rule start rather than whether the present year is less than or
equal to it. As the prior year is immediately before the present year,
this makes no difference, but it clarifies the reasoning.  Apply this
clarification also in data() and previousTransition() for consistency.

Pick-to: 6.3
Change-Id: I29c41e67784eaae13b83f6ae1ad16509e636c187
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-04 23:26:12 +01:00
Edward Welbourne 8bf0fbca70 Consistently treat times before first rule as in its standard time
In QWinTimeZonePrivate::previousTransition(), an initial no-transition
first rule was interpreted as implying a transition to its standard
time at "the start of time". Do the same for times before the start of
the first rule even if it is a DST recurrence; and, in data(), treat
times before the first rule as being in its standard time.

In the process, restructure data() to do that early return first,
instead of in an else clause, so as to dedent the other branch of its
code and make clearer how it fits into its outer loop.

Pick-to: 6.3
Change-Id: I21482d904c33542bf04f6510b974c01817d7aa5f
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-04 23:26:12 +01:00
Edward Welbourne 8a52555d3f Fix handling of out-of-range years in QTZP_win
A transition outside the range of qint64 would be mapped to
invalidMSecs(), the same as the fake-detection sets a fake transition
to. This would have lead to a year at the boundary of qint64's range
being mistaken for a fake-DST year. So replace the fakesDst() method,
that compared transition times to invalidMSecs(), with an actual
boolean member that gets set when detecting fake DST, so that the
detection is correctly done.

Pick-to: 6.3
Change-Id: Iadc80973bc033915733c4a4f4ccfdd3863025fb4
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-04 23:26:12 +01:00
Edward Welbourne 0efebf168d Correct fake-DST detection and handling in QTZP_win
The end-of-year checks previously presumed they would accompany a zero
daylight-savings change there; however, this misunderstands what a
fake transition is doing. A fake at the end of the year means that the
transition during the year is out of the time the fake claims it goes
into, so the offset nominally in effect after the fake should match
the offset the year started in, the same as for a year-start fake.
However, implementing that exposed the fact that Bangladesh's brief
flirtation with DST in 2009 ended at the end of the year, and MS's
data has no other instance (aside from entirely bogusly claiming that
Bhutan did the same in 2009) of an end-of-year transition, in
particular no fake transitions. So the end-of-year case for faking
does not arise and I've eliminated it from the code here. This
greatly simplifies the code to detect fake DST rules.

At the same time, in the ruleToData() wrapper, use the transition
implied by isDst only if it isn't the fake one; the other is the only
real transition in the year anyway, however described. Also, extract
the detection of start-of-year transition times to a function and make
it more exact.

Pick-to: 6.3
Change-Id: Ide160d28e7cca37c224f40164ebe7f9a17f028e7
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-04 23:26:12 +01:00
Edward Welbourne 4959f8a34b Clip dataForLocalTime()'s bracketing window's start to minMSecs() + 1
The minMSecs() itself is one more than the type's min(), which is used
as invalidMSecs(). As (at least) the Windows back-end uses minMSecs()
as the time of a start-of-time transition (that we'd like to find as
our current transition), use one more than it as lower-bound for where
to search from for a previous transition, so that we do find that
first ever transition.

Pick-to: 6.3
Change-Id: Iae861e740e02bd38ffb2af77aff625d3b48182d2
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-03-04 23:26:12 +01:00
Edward Welbourne 8024498a36 Use QDateTimePrivate's methods in preference to std::numeric_limits
The methods give them more appropriate names. This revealed one place
where the min() that's actually invalidMSecs() was being used for a
time that should have been in the supported range, so amend that to
use minMSecs(). Replaced a use of invalidMSecs() + 1 with minMSecs(),
to which it is equal, as that was the meaning it was used for.

At the same time, make those methods constexpr (because they are) and
[[nodiscard]], since their values should be used, while dropping their
fatuous inline (the bodies are inline in the declarations).

Pick-to: 6.3
Change-Id: Idcd51c55850573372b44e6fcf08d5d2665b8a60e
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-04 23:26:12 +01:00
Pasi Petäjäjärvi e0023ae353 Revert "Workaround MinGW not handling error suppression macro correctly"
This reverts commit 293b7fab55.

Reason for revert: Since Qt 6.2 MinGW 8.1 is not anymore supported

Pick-to: 6.2 6.3
Change-Id: I9b2e5e08bee663d5289a69218493911544671e79
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
2022-03-04 20:16:06 +00:00
Tor Arne Vestbø b5144d2722 Update QFileInfo docs to mention macOS aliases
The LegacyLinkType reflected by isSymLink() includes
QFileSystemMetaData::AliasType.

Pick-to: 6.3 6.2 5.15
Change-Id: I98c84573f7f05d6d183b6ce1e22fc7424ed8e730
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-03-04 20:13:09 +01:00
Marc Mutz 1775029c9b Prepare for QByteArrayView number parsing modernization
Remove the unholy bool out parameter and make QtPrivate::to{Double,
Float,{Signed,Unsigned}Integer}() return a struct instead.

The struct contains what we'll most likely need for a full
QParsedNumber in the future: the value, an error code (always zero
atm), and a pointer to the first character that wasn't parsed (always
nullptr atm), so we don't need to change the ABI when QParsedNumber
eventually lands.

As an immediate positive contribution, even without the backend ported
away from bool out parameters, the functions can now be marked as PURE
and, in case of the FP versions, also noexcept (the int versions have
a narrow contract d/t the base argument, which, unlike the return
value, can be fixed later, by overloading).

Pick-to: 6.3
Change-Id: I67945af80a9b53d6f170502a6df3384895e82d3e
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-03-04 19:49:15 +01:00
Giuseppe D'Angelo 400867693b QCryptographicHash: code tidies
Rename the resize() function of its internal buffer into the possibly
better resizeForOverwrite(). The point is that unlike an ordinary resize
the data in the buffer is NOT initialized, and therefore must be
overwritten by the caller, "or else".

Change-Id: I7d82821e92f59f7eeab18c51d98003826ffe164b
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Øystein Heskestad <oystein.heskestad@qt.io>
2022-03-04 04:46:47 +01:00
Thiago Macieira 0c3ac95899 Logging: use GCC #pragma to suppress the frame pointer
We have a few lambdas now. However, GCC probably inlines everything
anyway in release mode, so this is likely moot.

Change-Id: Ic15405335d804bdea761fffd16d50573621446ab
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-03-03 19:05:12 -08:00
Thiago Macieira bd728d1149 Logging: cache the last library file name in a backtrace
They usually come in groups, so this avoids extra work.

Change-Id: Ic15405335d804bdea761fffd16d4fb5c41e122f0
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-03-03 19:05:11 -08:00
Thiago Macieira ff2535de5c Logging: add support for decoding backtraces using dladdr()
I'm pretty sure that's what backtrace_symbols() uses internally anyway,
so skip the middle-man.

Change-Id: Ic15405335d804bdea761fffd16d4fb2a1b0c2171
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-03-03 19:05:11 -08:00
Thiago Macieira 1cad4ed6a1 Logging: reorganize the backtrace code for simplicity and readability
Also removed the Qt::CaseInsensitive searching, which was slow.

Change-Id: Ic15405335d804bdea761fffd16d4f863847c360b
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-03-03 19:05:11 -08:00