Since setScaledClipRect will actually render only the necessary parts,
there may be insignificant differences in rounding/anitaliasing
compared to rendering the whole image first and then clipping.
Hence this autotest case would always fail. But that would not happen
in CI, since it tests qtbase without the qtsvg module, and then the
SVG tests are skipped. (For some reason, one ran into this in wayland
testing and made an exception for that, but obviously this failure has
nothing to do with wayland).
Work around the issue by converting the rendered images to 4 bpc
format, so the differences in the least significant bits get truncated
away.
Fixes: QTBUG-100917
Task-number: QTBUG-81044
Pick-to: 6.4
Change-Id: I1c14e98af22d0ae22a751960b69e692c7a38399b
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
In latest Android versions some functions related with Display metrics
were deprecated. This patch changes some instances of that code to use
the Resources.getDisplayMetrics or WindowManager.getMaximumWindowMetrics
depending on the situation.
Fixes: QTBUG-99543
Pick-to: 6.4 6.3 6.2 5.15
Change-Id: Id9846efa877f704ef7f58c1b0820ad1527b53f09
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Without it, we do not have Q_DECL_DEPRECATED
Change-Id: I6b16176446027e0f7da923f16971e903aacc80d4
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit addresses on of the comments from the review of QTBUG-98434.
Use remove instead of replace to delete from the string.
Task-number: QTBUG-103100
Change-Id: Ifa00a9bae24767eb42d6fa5da0ffdbaa230d5d96
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
The full name should obviously indicates what the feature is, no need to specify LTO explicitly. And it also make the line a little longer than it should be. But we should keep LTCG (Link Time Code Generation) in case the user don't know LTCG also refers to this feature.
Change-Id: I95a2e5335d0b76c40c67f0484d77a4d50f5fd85f
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Scanning of the Qml imports should be run if either Qml root paths or
.qrc files are specified for androiddeployqt.
Task-number: QTBUG-106939
Pick-to: 6.2 6.4
Change-Id: I3229ec6d3f2ac17ef751b4a6ed74e8e98db7465e
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
This improves moc's support for nested inline namespaces, so that code
containing them will not break compilation.
For simplicity, we allow nested inline namespaces even in C++17 mode
(the actual C++ compiler will reject the code anyway, and probably with
a better error message than moc could output).
moc still has no real awareness how inline namespaces work, but that is
a preexisting issue.
Pick-to: 6.4 6.2
Fixes: QTBUG-106920
Change-Id: I7b415a99133575f101bc81d01d4670a5f752917f
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
When it was added, along with the type it describes, it wasn't added
to the QDoc-only fake version of Type's declaration, or to the \enum's
list of \value entries. There being no clear reason for those
omissions, I'm presuming to guess they were just an oversight.
This amends commit c7ce1bc05c which was
included in Qt 6.0.0.
Pick-to: 6.2 6.4
Change-Id: I1bf9fe0f0a31219a888666550a197e479d8eadc1
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The real Type has several "administrative" members beside LastCoreType
and LastGuiType, but only these two appear in the qdoc-only fake
version of Type, only to be \omitvalue'd out in the docs. Save the
perpetual "need" to keep updating them with each new addition (they
weren't even in sync with the real versions anyway) by removing them.
Change-Id: If7c5da87655a2da5c7f29f394c9dd9921ff0c1a7
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Use OpenSSL 3.0 as a provider of all hashing algorithms, except the
BLAKE2b and BLAKE2s. BLAKE2b and BLAKE2s algorithms support a variable
length digest, but OpenSSL's implementation outputs only a digest of a
fixed length (the maximum length supported). This is 512-bits for the
BLAKE2b and 256-bits for the BLAKE2s and for that reason we still use
the original implementation.
[ChangeLog][QtCore][QCryptographicHash] Uses the OpenSSL 3.0
implementation now, where available.
Change-Id: Ia4e4139b92ea9b40a18aa480aa5c06562178f916
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This appears to have been overlooked. It's just the copy-construction
of a QSharedDataPointer, which is declared noexcept, so transparently
safe.
Change-Id: I85e1f750be26dfa94d52dfc0b14efe9c1857d645
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Add latest versions that were missing in QOperatingSystemVersion and
the version names used with QSysInfo::prettyProductName().
Change-Id: I933158898f9ec39f1c224e15fd6456b7e0546a67
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Addressing a comment from the review of QTBUG-98434. QSettings has been
already ported to use QAnyStringView keys so use C literals to call
beginGroup, setValue and value.
Since the constructor of QSettings does not have an overload for
latin1 strings, change the calls to use u""_s instead of _L1.
Task-number: QTBUG-103100
Change-Id: I9407ac8cf9d4c6f045a774b2abe7541086401b07
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
This provides a better size hint than the pseudo-random mod 4GiB
number used before. In particular, it will make the Qt 5
implementation fail fast, because UINT_MAX will be recognized as a
non-representable size right away.
Pick-to: 6.4 6.3 6.2
Task-number: QTBUG-104972
Change-Id: I6010f558eb71bbf02fb0f71bee1b3b1a15ec6e3f
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
While this is a behavior change, we never documented that we'd return
an empty instead of a null QByteArray in this situation. Indeed,
returning bazip, with its fully-preserved capacity, is an expensive
way of signalling an error condition.
Conclude that this is not what the original author wanted and return a
default-constructed byte array instead, leaving bazip and its excess
capacity to be destroyed before the return from the function.
Pick-to: 6.4 6.3 6.2
Task-number: QTBUG-104972
Task-number: QTBUG-106542
Change-Id: I2ee1fc6fdbb9da28f1987b16915516b51bb348c3
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
(The old one was 404 page not found)
Pick-to: 6.4 6.3 6.2 5.15
Change-Id: I06818443a1f89709b749ea66c05b4023e33b15d0
Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
The Vulkan loader as of SDK 1.3.216 and MoltenVK decided that
all existing applications need to stop working with
non-conformant Vulkan implementations such as MoltenVK, unless
they start specifying the right soup of instance flags, extensions,
and device extensions.
Set VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR in
VkInstanceCreateInfo::flags.
Automatically request VK_KHR_portability_enumeration, if supported, on
the instance.
This handles the instance side. On the device side we can add support
in QRhi so Qt Quick continues to work with MoltenVK. This involves
requesting VK_KHR_portability_subset on the device whenever the
extension is reported as supported (not doing so would be an error)
However, applications creating their own VkDevice will need to take
care of this themselves.
This device extension requires VK_KHR_get_physical_device_properties2
on the instance (which QRhi does not control). This is no problem with
Qt Quick as that already does this automatically, but in the unlikely
case of wrapping an existing VkInstance in QVulkanInstance it will be
up to the creator of VkInstance to enable that as well.
Pick-to: 6.4 6.3 6.2
Fixes: QTBUG-106912
Change-Id: Idaf277549b3ec982e99bfc49e4ad6a67976c141a
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Addressing some findings from the review of QTBUG-98434, use strcmp
instead of the equality operator. This saves one strlen() per QL1SV
constructor and takes L1 out of the picture.
Task-number: QTBUG-103100
Change-Id: Iffe8ce4c4dd9a3ee590d4bb8a14b950241b835e2
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Addressing a comment from the review of QTBUG-98434. Instead of
creating a QL1SV from the concatenation, create the QL1SV first and
concatenate after, using QStringBuilder.
Task-number: QTBUG-103100
Change-Id: Ic082da410db15dd9e2c341711c24150d7a0dc0c2
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Guard private includes of private opengl headers and make public
opengl headers available even if feature is disabled, since they
can be used by user projects.
Task-number: QTBUG-103196
Change-Id: If492c97b5cfb21d8aac0d607bc7add38b6d0c73e
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Perhaps dating as far back as 829e421ddc (Qt 5.8), using
the arrow keys on a bluetooth keyboard to navigate the cursor
around in a TextArea/QTextEdit has been broken. Some work
was done to remedy this with 15576c9610 (Qt 6.1) it seems, but
still, using the arrow keys is broken in 5.15, 6.2 and dev.
This patch will ensure that we send control key events, such as
Qt::Key_Up and Qt::Key_Down, to Qt, also when the focus object
accepts Input Methods.
Fixes: QTBUG-101339
Pick-to: 6.4 6.2 5.15
Change-Id: I2d12438a822a607646080ab2edb17de8ea6d337c
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit addresses a comment from the review of QTBUG-98434.
Drop the extra QString(), .arg can be called on _L1 as well.
Task-number: QTBUG-103100
Change-Id: I4891d42536f6ea413464bea78de4b82aa6363a11
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
When a dock widget received a native title bar upon unplugging, the
position of the newly unplugged dock widget was calculated without
taking the title bar's height into consideration.
Furthermore, dock widgets grew by the separator size upon undocking.
That is fixed by 10a143ccd7 by relying
on the assumption that passing a QRect() to the unplugging method
leads to un unchanged dock widget geometry.
However, when more than one dock widgets are docked in the same
main window dock on macOS or Windows, the size is stil increased.
This patch corrects the position offset for native title bars.
It also corrects an unplugged dock widget's geometry by the sparator's
size.
Fixes: QTBUG-106530
Fixes: QTBUG-106531
Pick-to: 6.4 6.2 5.15
Change-Id: Ia4bcb556841e14146f19c1377f4010d5ae009bcf
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Noticed during the review of QTBUG-98434. The variable includeGuard is
a QString, that is converted into a Latin1 string and then converted
back to QString. Remove these unnecessary lines.
Task-number: QTBUG-103100
Change-Id: I335d49ef990cb6de24031be380b5c2c7e12e961e
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
The QHoverEvent ctor takes two points: scenePos and globalPos; the first
of those is passed to the QSinglePointEvent ctor as _both_ the local and
scene pos, which calls QMutableEventPoint::setScenePosition() on the
persistent QEventPoint instance, and then detaches before setting
ephemeral state.
Therefore, we must construct QHoverEvent with scene position, not local
position, so that the right value is persisted. To localize a
QHoverEvent during delivery, use QMutableEventPoint::setPosition().
This needs to be done repeatedly while visiting multiple widgets or
items; the detach() prevents it from being saved in the persistent
QEventPoint in QPointingDevicePrivate::EventPointMap.
Amends 0a64a044b6
Task-number: QTBUG-35409
Task-number: QTBUG-100324
Change-Id: Ic1084e1c3cd384683666ba52fe34f16b9d039877
Pick-to: 6.4
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
In qCompress, we've been calculating postive len values out of them,
only to fail at random points later, possibly running into UB. Fail
early instead.
In qUncompress, we've been catching negative values, and reported them
indiscriminately as "invalid data". Use a better warning message
instead.
By rights, nbytes ≥ 0 would be a precondition of both functions (which
we would Q_ASSERT() on), but seeing we're picking this back into LTS
branches, I found it prudent to use a non-fatal way to signal the
precondition violation.
If and when we keep these functions for Qt 7, it will be as an
overload that takes QByteArrayView, in which case nbytes ≥ 0 enters as
a hard precondition via the QByteArrayView constructor, so there
appears to be no need to pre-program a Q_ASSERT() for Qt 7.0.
Pick-to: 6.4 6.3 6.2
Task-number: QTBUG-104972
Task-number: QTBUG-106542
Change-Id: I6a1b25fe12d31e3d4c845033cad320832976f83c
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
... and use them consistently instead of naked qWarning()s.
As a drive-by, fix the warnings we generate on failures, which
all-too-often was "invalid data".
Code for minimal size by DRYing what the compiler can't, and using
Q_DECL_COLD_FUNCTION to avoid excessive inlining.
Left the one qWarning() in qCompress(), for now, because that would
have changed the return value from an empty to a null byte array.
Move invalidCompressedData() to where the others are defined, too,
because it's required by a follow-up commit.
Pick-to: 6.4 6.3 6.2
Task-number: QTBUG-104972
Change-Id: Ia43aa315960b06530e98c1d7525ccf0e7f71bb5c
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This reverts commit 013c346a8d. It was
determined to cause a regression in Qt Quick: QTBUG-106899.
In order to unblock integrations, we need to revert the change. It
can be re-committed later when the problem has been analyzed and
addressed.
Pick-to: 6.2 6.4
Fixes: QTBUG-106899
Task-number: QTBUG-89557
Task-number: QTBUG-104986
Change-Id: I04054587f68ab39fdb038b02fc69ebfa3dc7d197
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
The current implementation would assume that if we get a
UIKeyboardWillShowNotification, the keyboard is about to
show, and we should therefore enable the gesture.
This is problematic on an iPad with a hardware keyboard
connected, because we do actually get get a
UIKeyboardWillShowNotification on startup, even when the
standard input panel is not showing. From speculation, this
is probably because there is a little floating menu at the
bottom of the screen that lets you start dictation mode.
And in UIKit, this is probably implemented as a UIKeyboard.
This new input panel has a zero size, according to the
UIKeyboardFrameEndUserInfoKey key in the notification.
This means that we can still trust our own implementation
of QIOSInputContext::isInputPanelVisible() to be false
when a hardware keyboard is connected.
This patch will therefore only enable the gesture if we
understand the input panel to be visible, rather than
automatically assume that it is based on the
UIKeyboardWillShowNotification alone.
This will also stop the assert inside touchesBegan
from triggering.
Fixes: QTBUG-106387
Pick-to: 6.4 6.2 5.15
Change-Id: Ia3d27864325b6efb49f03fb20b711979f2d07fbf
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
The method erroneously returns the common ancestor of the |window| in
question and a modal window in case of window-modality of the modal
window. What should be returned is the modal window because it is the
one that blocks the |window|.
Fixes: QTBUG-106627
Change-Id: Ib4da6c1e9757629bbedbd8a16407cd6b5b0d5d27
Pick-to: 6.4
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Addressing some remarks made during the review of QTBUG-98434.
Fix the mismatches between strings and string literals.
Task-number: QTBUG-103100
Change-Id: I3a7d2574f55fcffa81b8c87fb510aba0a8853330
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Add the MANUAL_FINALIZATION option to qt_add_plugin and run
qt_finalize_target like we do for qt_add_executable and qt_add_library.
Currently, the only user-visible effect is that resource files are put
into a FOLDER and not underneath a XXX_other_files target.
Change-Id: I430d87b5357f6d2ed7fe32198a73eb919f393dd8
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
To address some findings from the review of QTBUG-98434, fix type
mismatches between strings and string literals in QtWidgets.
Task-number: QTBUG-103100
Change-Id: Ie4543d49ddfba382183c5d43df067694f5da53c7
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
The new function has an advantage of not requring EM_JS.
Change-Id: Ib9ad0e6b59cfe2e6864697a14b5cfdb39f62af2d
Reviewed-by: David Skoland <david.skoland@qt.io>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
They are not used, so just remove them.
Pick-to: 6.4
Change-Id: I9b92ef97df85a1ab975bf6b6d460b5427135c301
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Because, when used in a .cpp file, the compiler can verify that
they are. With warnings-are-errors this breaks compilation for me
on windows with clang++.
Pick-to: 6.2 6.4
Change-Id: Ib29c3b0b485be2c7d7cf6f1fa4541cac8fe32708
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Because, when used in a .cpp file, the compiler can verify that
it is. With warnings-are-errors this can break compilation.
Pick-to: 6.4 6.2
Change-Id: I2c403d914fca24158dba93f618476521cbcfe39f
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
To please qmlbench. 441->463 in delegates_shadereffect.qml
Change-Id: I66bbfd7747df958963a4ebf588a1461edc5dce59
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
...by making QMetaTypeId2 contain all expected members.
While we don't allow QMetaType from non-const references, we want to
get to the static_assert telling us as much, instead of running into
more or less incomprehensible error messages in the depths of
qmetatype.h.
Pick-to: 6.4
Task-number: QTBUG-106672
Change-Id: Ica9b13fee95eda97cafab2cccdc5249dfc3dcdf2
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Before searching, foldCase the first up to 256 characters, and use this
buffer to compare against the haystack. If the needle is larger than the
buffer, compare the rest of the needle against the rest of the haystack
for every potential match. The buffer is placed on the stack and must be
refolded for each search, but this change does not break the API.
This is faster than the old implementation, except if the needle is long
and it is found near the beginning of the haystack, or if the needle is
long and it is not found in a short haystack where few comparisons are
done and hence few case foldings were needed in the old implementation.
Benchmarking using tst_bench_qstringtokenizer tokenize_qstring_qstring
shows an improvement for the the total testcase and usually for each
individual test.
Fixes: QTBUG-100239
Change-Id: Ie61342eb5c19f32de3c1ba0a51dbb0db503bdf3a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit addresses a comment from the review of QTBUG-98434.
QL1S has its own arg()s, replace QStringLiteral("...").arg with
"..."_L1.arg.
Task-number: QTBUG-103100
Change-Id: I5313783e36101a9a65c7d5a2344ca46614658b80
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
Inserting the same key repeatedly with QMultiHash will not
test rehashing behavior because in Qt6 those entries all
end up in a linked list.
Pick-to: 6.4
Change-Id: I78c45eed0f35a13af6d6da75d7189a6933750f13
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
It seems all the others have had this treatment, but one got missed or
added while the others were being fixed.
Change-Id: If47e2c6bf939b7a55f2c38b029c1df3a901e8bfc
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
The QTRY_* macros and QTestEventLoop have (since 6.3) been exiting
their loops early if the test has failed. Where that was appropriate,
they should also have been exiting early on skip.
[ChangeLog][QtTest] Added QTest::currentTestResolved(), which is true
if the test has failed or skipped. The QTRY_*() macros and
QTestEventLoop now use this, rather than QTest::currentTestFailed(),
to test whether they should stop looping, so that they also do so on a
skip.
Task-number: QTBUG-104441
Change-Id: Ibf3d5a095b35e6670bc3daf756f05b66f7f3ef9b
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Reviewed-by: Jason McDonald <macadder1@gmail.com>