The Find Files example is gone.
Pick-to: 6.5
Change-Id: I63bc33c3b9db7c8bfcf07fbcee0182a492c01dbd
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
This is equivalent to the corresponding relation types defined
in the IAccessible2 spec [1] (IA2_RELATION_DESCRIPTION_FOR,
IA2_RELATION_DESCRIBED_BY, IA2_RELATION_FLOWS_FROM,
IA2_RELATION_FLOWS_TO) and for AT-SPI on Linux [2]
(relation types ATSPI_RELATION_DESCRIPTION_FOR,
ATSPI_RELATION_DESCRIBED_BY, ATSPI_RELATION_FLOWS_FROM,
ATSPI_RELATION_FLOWS_TO).
User Interface Automation (UIA) on Windows also has corresponding
properties for 3 of them [3]: UIA_DescribedByPropertyId,
UIA_FlowsFromPropertyId, UIA_FlowsToPropertyId.
This commit adds the new flags and implements the mapping for
the AT-SPI case.
Note that the relation type is conceptually always "inverted"
when comparing Qt and AT-SPI (or Qt and UIA)
as clarified in afbfe30093.
"QAccessible::Description" instead of "QAccessible::DescriptionFor"
would align better with the naming scheme of the other relations, but
that is already used in the Text enum.
[1] https://accessibility.linuxfoundation.org/a11yspecs/ia2/docs/html/group__grp_relations.html
[2] https://lazka.github.io/pgi-docs/Atspi-2.0/enums.html#Atspi.RelationType
[3] https://docs.microsoft.com/en-us/windows/win32/winauto/uiauto-automation-element-propids
[ChangeLog][QtGui][QAccessible::RelationFlag] Added new relation
flags DescriptionFor, Described, FlowsFrom and FlowsTo.
Fixes: QTBUG-105864
Change-Id: If2d46099eeea75e177358c821d1ae833a553bd0e
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
Use it in a few places.
[ChangeLog][QtCore][QMessageAuthenticationCode] Added
QCryptographicHash-style resultView().
Change-Id: I745d71f86f9c19c9a9aabb2021c6617775dab1cf
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Document that the operation is not supported.
Pick-to: 6.5 6.4 6.2 5.15
Task-number: QTBUG-98974
Change-Id: I1faacb7af7e11943d6da62313ed104fda063d30d
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
Reviewed-by: Nicholas Bennett <nicholas.bennett@qt.io>
It's possible since Windows 10 1903 to set the active code page
to UTF-8 using the manifest. In that mode, QString::toLocal8Bit
converts to UTF-8 and the legacy programs not using UTF-8 codepage
can't interpret the value.
We can detect whether the UTF-8 code page is used, and in that case
only provide data as CF_UNICODETEXT. Windows will then synthesize the
CF_TEXT format when the clipboard data is consumed, using the right code
page for the target application.
https://learn.microsoft.com/en-us/windows/apps/design/globalizing/use-utf8-code-page
Pick-to: 6.5 6.4 6.2
Change-Id: Ie024a618556d9bb5b5c7ac70507d279b959ff6db
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
As pointed out in review, somewhat contradictory advise.
Rewrite the section to be more active, focus on the user and
their application, and a bit more consistent.
Pick-to: 6.5
Change-Id: Idbbf29d3033d32ade553290a2e89bd778876224c
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Since 6.0, these functions all return QString, to cope if the
character is outside the BMP so surrogate-encoded, and it has lately
come to light that some of them are, in any case, multi-character
tokens. Now that the code correctly handles that, update the docs to
paint a more faithful picture of what these tokens are.
Fixes: QTBUG-107801
Change-Id: I0a364432408a166fae86666f8e5de4f59622b2a3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
... telling the compiler all there is to know about block.size(), so
it hopefully vectorizes the function well.
Pick-to: 6.5
Change-Id: Icb3d5c983402e52a65c72af15f806f3a3fe6411f
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
... by checking that for each algorithm, that the algorithm's result
size is not larger than the algorithm's block size.
Pick-to: 6.5
Change-Id: I4daf7900e72766d180954b15edb06687a57f939f
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>
Add more API to QSmallByteArray:
- const op[] overload
- copy construction and -assignment from QSmallByteArrays with smaller N
(for implicitly converting a HashResult into a HashBlock, incl. a
static assertion that it always fits
- STL-style assign()
This allows us to use HashBlock for the key, instead of a QByteArray.
To make-it-cool®, add a method that xor's all bytes in a
QSmallByteArray with a given value and returns the result. We use that
algorithm twice in the implementation, and the code simplification at
the call sites is amazing.
Pick-to: 6.5
Change-Id: I7fbc11538544b4a8d1771dc8ad025be154d446df
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Also adds a file to patches which is a required modification
to the update in order to make it compile.
Pick-to: 5.15 6.2 6.4 6.4.3 6.5
Fixes: QTBUG-111536
Change-Id: Iaabc1b7736cfd98217a8aff2b7f9bc65402d0451
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Note: 6.4.x update has to be done in a separate commit
because it did not get the update to 6.0.0, so the
cherry-pick will not apply.
Pick-to: 6.2 6.5
Task-number: QTBUG-111535
Change-Id: I9d4aae98f8267827ec983ca89b1310006c6aee78
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Avoid the creation of a temporary buffer by using QVarLengthArray
instead. Normally GetRegionData() only returns one rect (~48bytes) so it
will fit into the QVLA without a memory allocation
Change-Id: I279693e17e2f9f2c1c75504c3e5c1de3d45084ec
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Avoid a memmove (and replace it with a memcpy) by not using
QString::prepend() but create a completely new string object instead.
Change-Id: Ibdb4a9c6b15b96f1743d47e158ff0fb9b2048221
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
Use QDateTime::toString("ttt") which is available since Qt6.5 instead
own implementation
Pick-to: 6.5
Fixes: QTBUG-111275
Change-Id: I41676d3a327c5aaabdeb4f54b9d169e228c482e1
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
The window uses default palette (QPalette()) to determine frame
color (either light or dark). This doesn't work for quickcontrols
as they depend quicktheme palettes and they don't overwrite default
palettes.
This patch add API in QWindowPrivate to provide palette for window
and this can be overridden by quickcontrol windows to provide
their corresponding palette.
Fixes: QTBUG-111491
Pick-to: 6.5
Change-Id: I39eea20ee7c61ecf0279143c9784da35be15edd3
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Kept separate from the parent patch to allow qtdeclarative
to remove its usages first.
Change-Id: Ic0fe61f3d48c2ddb1b0314b1cc219e52e4728ac1
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
A click on the selected item should deselect all other items before
editing starts.
Remove the part of the test case that assumes that we can have multiple
items selected in ExtendedSelection mode, and click on an item to start
editing while maintaining selection. That can never happen.
Pick-to: 6.5 6.4 6.2
Fixes: QTBUG-111131
Change-Id: I0312eed4614502cfb77eca26d3f7615427493d7d
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
tst_QListView::moveLastRow asserts now and again, unless only that test
function is running. We repeat failing test functions individually, so
this never blocked CI.
The reason seems to be that we get a paint event only for the viewport,
after the item model's structure has been changed by the test. Moving
rows does trigger a delayed layout, and in some circumstances the
entire view is updated, rather than just the viewport. But if only the
viewport is updated, then layout execution in QAbstractItemView::event
never happens, and the data structure that the paintEvent implementation
relies on is outdated and contains invalid item pointers, resulting in
an assert.
If we need to execute delayed layouts when the entire view gets painted,
then we also need to execute them when only the viewport gets painted.
Pick-to: 6.5 6.4
Change-Id: Ibb46c2315825d99c82b884226817c494a3d95975
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
Instead of overwriting the CMAKE_AUTOMOC_MACRO_NAMES, we try to append
our desired moc names to it, and don't get rid of what's there.
Thanks for Friedrich W. H. Kossebau for filling a descriptive bug report
and offering a solution as well.
Pick-to: 6.5 6.4 6.2
Fixes: QTBUG-110497
Change-Id: I582af431151cacfe24085b890ae9dba0a0e53f3f
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
The documentation for the RelationFlag enum was not very clear on what
was the "first" and "second" object.
And the fact that the AT-SPI backend (which these enum values originates
from) inverses "first" and "second" makes it harder to understand what
how it all fits together.
So when (with this change) Qt documents 'QAccessible::Labelled' as
"The returned object is labelled by the origin object"
AT-SPI documents ATSPI_RELATION_LABELLED_BY as:
"The origin object is labelled by the returned object"
(Documentation for AT-SPI is rewritten so that it shares the same
terminology)
Notice that the two objects are exchanged, which means that even if they
use the same 'Labelled' relation, the semantic gets 'inversed'.
This is already the case today, so we cannot change it. Therefore, to be
clear, the relation mapping will remain to be like this:
Qt Relation | Maps to AT-SPI | Qt explanation
----------------+-------------------------------+--------------------------------------------------------------------------------
Label | ATSPI_RELATION_LABELLED_BY | The returned object is a Label for the origin object
Labelled | ATSPI_RELATION_LABEL_FOR | The returned object is Labelled by the origin object
Controller | ATSPI_RELATION_CONTROLLED_BY | The returned object is the Controller for the origin object
Controlled | ATSPI_RELATION_CONTROLLER_FOR | The returned object is Controlled by the origin object
This mapping can already be seen in qAccessibleRelationToAtSpiRelation()
For the record, these future relations should then be mapped to like
this:
Qt Relation | Maps to AT-SPI | Qt explanation
----------------+-------------------------------+--------------------------------------------------------------------------------
Described | ATSPI_RELATION_DESCRIPTION_FOR| The returned object is described by the origin object
DescriptionFor | ATSPI_RELATION_DESCRIBED_BY | The returned object provides a description for the origin object
FlowsTo | ATSPI_RELATION_FLOWS_FROM | The returned object has content which flows logically to the origin object
FlowsFrom | ATSPI_RELATION_FLOWS_TO | The returned object has content which flows logically from the origin object
Change-Id: Ib245ec95564e4886dc6dbbb68abec2b23cd0e534
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Use ProxyingQueue for proxing calls from secondary threads
to the main thread. This replaces the previous usage of the
private emscripten_async_run...() API.
Keep the existing "trampoline" which in addition proxies
using a JavaScript zero timer. This makes sure that
the proxied call is made with a clean stack, and not
e.g. while the main thread is waiting on a mutex.
Change-Id: I66cfdc2cf4bc733b1732973677c2ae46d85c8e7c
Reviewed-by: Mikołaj Boc <Mikolaj.Boc@qt.io>
Currently images that does not fit in the cache will be destroyed, which
is unfortunate. 256 MB cache is too small for todays standards, so
increasing it to 1 GB. Also adding an environment variable so that it is
changeable if required.
Fixes: QTBUG-111498
Pick-to: 6.5
Change-Id: I70c65cad6219a59102b16abc50f098aa0b017314
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
This means that, thanks to std::string's SSO, we won't allocate to
hold the indent step string anymore, at least for non-pathological
indents of up to 15-23 characters, depending on the particular
std::string implementation.
Task-number: QTBUG-103302
Change-Id: I63685619e86a3aa7bcfac41db84f64a78859bdb7
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
OpenSSL doesn't support some Blake2s and Blake2b hashes and querying
these would automatically report that they are unsupported, while we are
actually using non-OpenSSL implementataion for these and therefore they
are always supported.
Pick-to: 6.5
Change-Id: I300694459891c3103502705d6c8271caa47d8d01
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
If a style sheet is applied to a scrollbar, then we cannot treat it as
transient, as the QStyleSheetStyle doesn't implement any fade-in/out
animation logic. And we also need to set the overlap to 0 (in both
the style sheet and the macOS style) if the scrollbars are not
transient; otherwise the opaque scrollbar will be placed on top of the
content.
Since a style sheet might only apply to a scrollbar based on its
orientation, we also have to pass the style option through to all calls
of the styleHint function.
And since that function is also called from other QStyle implementations
in the macOS style, we have to make sure that we call styleHint() on the
widget's style to get the correct value based on the style sheet.
Fixes: QTBUG-63381
Pick-to: 6.5 6.4 6.2
Change-Id: Ic67ce3a7cb5089f885dabfd5a1951e3029915446
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
QGuiApplication::lastCursorPosition is a QPointF, and (at least on macOS)
compares always different from the QPointF stored in the event. This
might be due to the translation from system coordinates to QPointF
introducing noise.
The result is that even a simple button press causes mouseMove events
to be delivered.
To prevent this event noise, overload equality operators for the special
QLastCursorPosition type when comparing with QPointF to explicitly use
single precision comparison.
Pick-to: 6.5 6.4 6.2
Fixes: QTBUG-111170
Change-Id: I82ea23ac9f4fa80c55c9c5c742527dd7ee74fd99
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Runtime support is indicated via QRhi::Feature::HalfAttributes.
OpenGL support is available in OpenGL 3.0+, OpenGL ES 3.0+, and in
implementations that support the extension GL_ARB_half_float_vertex.
Other RHI backends (Vulkan, Metal, D3D11, and D3D12) all support this
feature.
Note that D3D does not support the half3 type. D3D backends pass half3
as half4.
tst_qrhi auto unit test included.
Change-Id: Ide05d7f62f6102ad5cae1b3681fdda98d52bca31
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
... it conflicts with rfc6234/sha.h's SHA{1,224,256,384,512} symbols.
We can't drop the rfc6234/sha.h header, as openssl/sha.h doesn't give
us the algorithm's block sizes, necessary for HMAC
(QMessageAuthenticationCode).
But we can drop openssl/sha.h. The only reason we included the header
was to get access to SHA<N>_DIGEST_LENGTH, but this is a well-known
value and easily obtained from rfc6234/sha.h as SHA<N>HashSize, so use
that.
Even reduces #ifdef'ery.
Amends d9f9d03fd3.
Fixes: QTBUG-111467
Pick-to: 6.5
Change-Id: Ice19ad8c788fb2828666647cc40abb894cd7af2b
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
GetFocus will return the window that currently has keyboard focus. This
is not what we want for drag and drop handling though. Use the window
under mouse and process events for that window when doing the touch/pen
input workaround. If no window is found we fall back to the focus
window. Followup to 31e7790102
Fixes: QTBUG-111149
Pick-to: 6.5 6.4 6.2
Change-Id: Ib8233debc267df0cc19b21c1dc5c6881d018d84a
Reviewed-by: Timothée Keller <timothee.keller@qt.io>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
When ICU is not available, QTimeZone::displayName() does not return a
valid timezone offset string so the OCI driver will get a wrong utc
offset string and inserting a QDateTime will go wrong.
Fix it by creating the utc offset string by ourself (toOffsetString()
inside qdatetime.cpp is static and therefore not accessible for us).
Pick-to: 6.5 6.4 6.2 5.15
Fixes: QTBUG-111275
Change-Id: Ib724d760688614e162246e1e028ee5e004cc9477
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This makes it explicit when we process the key (setKey() called) and
when we don't. That the old initMessageHash() left the key alone if it
already had the correct size was properly hidden in plain sight. The
split makes clearer what's going on.
Pick-to: 6.5
Change-Id: Ib013dbf8b976aa9f564224866091256aa8434cbd
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Iterators were missing. Provide a const data() overload to implement
the iterator functions in their natural form.
Pick-to: 6.5
Change-Id: I906013e55fce2effbedba0d283fb4cea3b512fdd
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Unconditionally returning true is incorrect, not only just since
NumAlgorithms was added in 0411d98192.
The values may have gaps, we might be compiling with SHA1_ONLY, and,
on a language-lawyer level, enums can legally contain values other
than those explicitly enumerated, so give the right answer in all of
these cases.
Pick-to: 6.5
Change-Id: I705d4f759b2572b8b3d1cee18b7939939eedbbac
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
I don't think any of these make a difference because the Duration is an
implied parameter because of the time_point arguments, but this makes
the code match QDeadlineTimer::deadline<T>.
Pick-to: 6.5
Change-Id: Ieec322d73c1e40ad95c8fffd17468a41182944ab
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
It's the only place that uses it.
Pick-to: 6.5
Change-Id: Ieec322d73c1e40ad95c8fffd17465370ac209c2f
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Ahmad Samir <a.samirh78@gmail.com>
Where it has a home with its other timespec/chrono siblings.
Luckily I only needed to change one place in the code, and that source
file already has #include's q_core_unix_p.h.
Change-Id: I783383f958ceccfd6f9210f0b76d35b0f82b7cb5
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Not all callers pass a view-type object: there are several call points
passing a QVarLengthArray, which means the value ended up being copied.
Introduced in 67108ef8db. Found by
Coverity scan (CID 404702).
Change-Id: I9671dee8ceb64aa9b9cafffd1742f9cda2131752
Reviewed-by: Ahmad Samir <a.samirh78@gmail.com>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This reverts commit e76bcaa203.
I managed to reproduce the warning with GCC 12. It only happens
with -flto (LTCG) builds, not in regular release builds.
Change-Id: I6747273300ee51dec05563233017ba0cdf46794a
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Replace the QVarLengthArray with HashBlock, an instantiation of
QSmallByteArray. Unlike QVLA, which may allocate memory when
capacity() exceeds Prealloc (not the case here, but could become an
issue with future hash algorithms, we're at 144 now, up from the
traditional 64), QSmallByteArray never throws, and the few Q_ASSERT()s
it contains don't matter, because we use the class' functions
in-contract here.
Requires to add an indexing operator to QSmallByteArray.
Pick-to: 6.5
Change-Id: Ica3656adc190e0141e065287fadc38e0cebce0f4
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This minimizes the impedance mismatch between
QCryptographicViewPrivate and QMessageAuthenticationCodePrivate and is
the penultimate step to finally marking QMAC's finalizeUnchecked()
noexcept, too (QCH's has been for a few Qt versions now).
It also enables adding a QMAC::resultView() a la QCH::resultView(),
but that's another commit, as 6.5 is closed for new API.
Pick-to: 6.5
Change-Id: I3fe228585c560d8d32e99e12bba2be21fddaf642
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The only reason why we couldn't before was because we had a view on
messageHash's result, which would have been clobbered when resetting
messageHash for reuse.
Since QMessageAuthenticationCodePrivate now contains
QCryptographicHashPrivate, we gain access to the latter's
QSmallByteArray result, and can just take a copy before reset()ing.
Re-using a QCryptographicHash is faster than creating a new one,
esp. in OpenSSL3 mode, where construction allocates a context while
reset() no longer does.
Pick-to: 6.5
Change-Id: I3bc0454918840a104fd53909e79b6fe21326bfbf
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Because we can, and as a preparation for using it to determine the size
of a fixed-size buffer for the HMAC's key material.
Pick-to: 6.5
Change-Id: I4add1115ef6d649baab25a842e1238db8a98bb7d
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Add Algorithm::NumAlgorithms and use it to iterate over all
statically-available algorithms, querying their hashLengthInternal().
This avoids having to statically_assert(<= MaxHashLength) everywhere,
and auto-adjusts the buffer size in SHA1_ONLY builds.
Yes, the extra case labels for NumAlgorithms are a nuisance, but at
least the compiler will remind us when we forget, unlike a missing
static_cast(<= MaxHashLength) that might easily be forgotten.
Adjust the test (which iterates over the QMetaEnum for
QCryptographicHash::Algorithm, so finds NumAlgorithms and tries to
pass it to the hash() function which responds with a
Q_UNREACHABLE(). Only test hashLength() == 0 for that enum value.
Pick-to: 6.5
Change-Id: I70155d2460464f0b2094e136eb6bea185effc9d5
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
To avoid gui slowdowns due to global pool being blocked.
Fixes: QTBUG-109511
Pick-to: 6.5 6.4 6.2
Change-Id: I4e8d91e8fb0bd2e395072a082e992a3c5d3464ad
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
More readable and now we can return earlier in an already long method.
(Patch best viewed in terminal: `git show -W --ignore-all-space` :)).
Change-Id: Ia405cdb91966b993cf7130c662bc1d189ff2c155
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
"currentTime", which one? the member, a local var or a method arg?!
Change-Id: I7f8269ef15a8a901e47e4f83f8e16f185fe8b8f5
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Konrad Kujawa <konrad.kujawa@qt.io>
For VeryCoarseTimer:
- The code used to convert QTimerInfo::interval to seconds in
registerTimer(), then convert to milliseconds when creating
QTimerInfo in registeredTimers(); this is a bit confusing as
"interval" was sometimes milliseconds and sometimes seconds
depending on the type of the timer; instead "round" to the nearest
second while always keeping "interval" in milliseconds (relying on
chrono doing the conversion)..
- Add roundToSecs() helper; it behaves like the original code (i.e.
rounding each 500ms to 1 full second):
const auto list = {300, 499, 500, 600, 1000, 1300, 1499, 1500, 1501,
1600, 2000, 2300, 2499, 2500, 2600};
using namespace std::chrono;
for (int dur : list) {
auto i = dur;
i /= 500; i += 1; i >>= 1; // Original code
milliseconds msec{dur};
seconds secs = duration_cast<seconds>(msec);
milliseconds frac = msec - secs;
if (frac >= 500ms)
secs += 1s;
assert(i == secs.count());
}
----
- Don't mix signed and unsigned when doing arithmetic
The next "chrono-first" step would be changing
QAbstractEventDispatcher::TimerInfo::interval from int to
chrono::milliseconds, and adding a virtual
QAbstractEventDispatcher::registerTimer() overload that takes
chrono::milliseconds; neither can be done until Qt7 due to binary
compatibility constraints, c.f.:
https://community.kde.org/Policies/Binary_Compatibility_Issues_With_C++
Task-number: QTBUG-110059
Change-Id: I36f9bd8fb29565b1131afb3cdfc313452f625598
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Also move some timespec helpers from qtimerinfo_unix.cpp to
q_core_unix_p.h, so that similar functions are grouped in one place.
Change-Id: I817733dd70607a1f4243a9745626f5c9b37ddc2a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Allow openUrl() to use FileProvider for opening files that are located
under app scoped paths and that use a file scheme for Android sdk 24 or
above.
[ChangeLog][Core][Android] Add FileProvider support for
QDesktopServices::openUrl().
[ChangeLog][Core][Android] Add AndroidX dependency to Gradle builds
by default since it's required by FileProvider.
Fixes: QTBUG-85238
Change-Id: Ia7403f74f2a8fd4886f74dba72e42b318ef5d079
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Nicholas Bennett <nicholas.bennett@qt.io>
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
Instead document the meta-data and let the user set it.
Pick-to: 6.5
Change-Id: I13c9cd0129ffeef7b72635f46f53cf3dbfcf6684
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Seen (and breaking local build) with VC++2022:
qrhid3d12_p_p.h(206): warning C4018: '<': signed/unsigned mismatch
QD3D12ObjectHandle::index is a quint32, whereas data is a QVector,
with count() returning a signed qsizetype.
Pick-to: 6.5
Change-Id: I81946459ea9222dee2cbb2ae4589fb0e4028f5dd
Reviewed-by: Kristoffer Skau <kristoffer.skau@qt.io>
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Only Ukrainian is actually recorded in CLDR as using U+0415 as
exponent separator; all other Cyrillic-using locales officially use
plain ASCII 'E'. However, it seems reasonable, in all Cyrillic
locales, to recognize both (given that they look very similar).
Task-number: QTBUG-107801
Change-Id: I70a1e60a2d9fe7e254e01d32c5bad909ea4b8c76
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Ievgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>
In some locales signs and the exponent are not single character
tokens. Replace QLocaleData::numericToCLocale() with a tokenizer that
will cope with this. At the same time, cache the locale data needed in
support of that, so that we don't repeatedly recreate QString()
objects just to compare them against input tokens.
The caching class is inspired by Thiago's proposal for fixing the
performance, which also inspires the optimization of the C locale in
the tokenizer used here.
Add some testing that round-tripping numbers via strings works for the
locales with signs and exponents that use more than one character.
Task-number: QTBUG-107801
Change-Id: I9fd8409a371ed62ed969d9ebc8b09584e752f7fb
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Use the function now in qtools_p.h in several more places.
(A later commit rewrites the remainder away.)
Change-Id: I782f0dceffe0e6e76753643a889011a834bc3ff0
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
There's more space to the right now, so we may as well use it.
Change-Id: I653c52e1a2fb9eb2a0b027be90fb7bc2734a5e85
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
The case labels are meant to line up with the switch statement.
Change-Id: I62a45ffca22582d2264ecb3eb5ad7fbfe2aa148b
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
The QtConcurrent examples were only discoverable from the
"All Qt Examples" page, which was very inconvenient.
This patch adds a separate page for all Qt Concurrent examples, and
links to it from the module's main page.
Pick-to: 6.5
Change-Id: Iecabd9e21033605c1ec74232ce4f3d68b0c78d82
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Jaishree Vyas <jaishree.vyas@qt.io>
... avoiding one more memory allocation, and giving us access to
QCryptographicHashPrivate::result, for use in subsequent commits.
The only real adjustment to users of QMACPrivate::messageHash is that
instead of
messageHash.result();
they now need to use
messageHash.finalizeUnchecked();
messageHash.resultView() // .toByteArray()
I.e. explicitly finalize.
Pick-to: 6.5
Change-Id: I80b1158b062554bbf8afa7241674a892de27f204
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
To be reused in QMessageAuthenticationCode.
Pick-to: 6.5
Change-Id: Ie4f003ad38ce9072cf6ee52ef2d7a63438e4d7ae
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
With the OpenSSL3 code allocating state on the heap instead of in
QCH::Private's inline union, reset() should be faster than even a
static hash() call. Even in the non-OpenSSL3 case, using less
QCH::Private objects to do the same thing means we increase effective
data cache size.
Pick-to: 6.5
Change-Id: I0b1347864081169a24c5d349702931afdab6c5bf
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This just complicates the code, for the small benefit of avoiding a
messageHash seeding from an empty key that then has to be reset.
This lazy initialization is in the way of using QCH's SmallByteArray
for the key, which this author thinks is the more important
optimization, because it will allow passing keys by QByteArrayView,
removing the impedance mismatch between QMAC and QCH.
Since the QMAC API doesn't distinguish between the absence of a key,
and the presence of a null (ie. empty) key, we can't not call
initMessageHash() when the key is empty, so we should suggest to pass
the actual key to the constructor as often as possible, and use
setKey() only to change the key afterwards.
[ChangeLog][QtCore][QMessageAuthenticationCode] No longer delays
processing of the key to the first setData() or result() call. While
passing a default-constructed key to the constructor and then calling
setKey() continues to work, for optimal performance, we suggest to
pass the actual key as a constructor argument and call setKey() only
to change the key.
Pick-to: 6.5
Change-Id: If0a078f37a16f8306f77d2b2bd5dacf23ce5c3e2
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>
Like in QCryptographicHash, it's never re-set, so, like there, make it immutable.
Pick-to: 6.5
Change-Id: I88f3dc15febffa8950256aedc5e8d1385fc86ddd
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
... basically inlining static QCH::hash(), which, however, accepts
only one piece of data, while we have two.
Avoids the memory allocation of the QCH d-pointer. The toByteArray()
is now the only memory allocation left in finalizeUnchecked(), and
will be removed in a subsequent commit.
Pick-to: 6.5
Change-Id: I7549d6e1c116a4cdc29dac74b867dfa6647022a0
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Rename it to QSmallByteArray, and make the maximum size a template
argument. Initialize m_size to 0, to avoid a partially-formed
default-constructed objects (default-constructed containers should
always be in the empty state).
As a drive-by, fix placement of some {'s.
Don't move it into a header of its own, yet, as it lacks a lot of
features expected of a generally-reusable class. Maybe one day.
This is in preparation of re-using the class to hold the key in
QMessageAuthenticationCode.
Pick-to: 6.5
Change-Id: Iee77e03e50afdf2ebc5889feeead344bef8ab3e8
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
... from the end().
It was lonely down there, and prone to be overlooked when performing
early returns in the #ifdef'ery above, as witnessed by the early
returns in the OpenSSL3 code.
Amends 1fe74c3bd3, itself amending
633c136596.
Pick-to: 6.5
Change-Id: I8c941ecb5c4755d8823b2161544cf6f7fe75a239
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
It was confusing entry capacity with the bucket capacity. The value
maxNumBuckets() returned was the maximum number of entries. This issue
was harmless: we would just fail to cap the maximum to an allocatable
size. But the array new[] in the Data constructors would have capped the
maximum anyway (by way of throwing std::bad_alloc).
So instead of trying to calculate what the maximum bucket count is so we
can cap at that, simplify the calculation of the next power of 2 while
preventing it from overflowing in our calculations. We continue to rely
on new[] throwing when we return count that is larger than the maximum
allocatable.
This commit changes the load factor for QHashes containing exactly a
number of elements that is exactly a power of two. Previously, it would
be loaded at 50%, now it's at 25%. For this reason, tst_QSet::squeeze
needed to be fixed to depend less on the implementation details.
Pick-to: 6.5
Change-Id: I9671dee8ceb64aa9b9cafffd17415f3856c358a0
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Saw this on my FreeBSD VM. The backtrace() function thought the nearest
symbol to something was "_ZTSNSt3__110__function6__baseIFbPvS2_EEE",
which decoded to
typeinfo name for std::__1::__function::__base<bool (void*, void*)>
The function pointer type inside parameter threw the decoder for a loop
and caused it to crash with the failed assertion in qbytearray.h:
inline char QByteArray::at(qsizetype i) const
{ Q_ASSERT(size_t(i) < size_t(size())); return d.data()[i]; }
I noticed this
- because tst_qtimer hung
- because qFormatLogMessage deadlocked acquiring QMessagePattern::mutex
- because the logging recursed
- because qCleanupFuncinfo failed an assertion while formatting the
backtrace (my QT_MESSAGE_PATTERN has %{backtrace})
- because QTimer::~QTimer -> QObject::killTimer printed a warning
- because tst_QTimer::moveToThread produces warnings
Pick-to: 5.15 6.2 6.4 6.5
Change-Id: Ieec322d73c1e40ad95c8fffd17464f86e9725991
Reviewed-by: Kai Köhne <kai.koehne@qt.io>
They share so many things, and QMAC is lacking so many of the changes
QCH has received over the last few months, that it seems QMAC is
better off being implemented in the QCH TU.
Among other things, this will allow QMAC to use QCHPrivate for its
implementation, drastically reducing the number of memory allocations
required to perform HMAC operations.
Pick-to: 6.5
Change-Id: I3c81a52e3a9ad57c14c91c16bc347f215fd407ba
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>
This brings the code in line with the sibling code in
QMessageAuthenticationCode, which now has a simiar split between
finalize() and finalizeUnchecked().
Pick-to: 6.5
Change-Id: I10701d59d56617ab32fae0df47371f0464e9cc77
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
QIODevice::read(ptr, n) returns qint64, not int. The returned values
are, however, confined to the interval [-1,1024], so no harm
done. Make the narrowing explicit, though.
Pick-to: 6.5
Change-Id: I5f95292ca6e05f0f402e7258e590593eff361255
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
... of creating a Private instead of the public class on the stack.
This avoids its memory-allocation, as well as the overhead of the mutex
in finalize().
Task-number: QTBUG-111347
Pick-to: 6.5
Change-Id: I4d144fcfadc0b8c9ba78d395ff7279b2d5d7b050
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
While QMessageAuthenticationCode is not copyable, result() is
nevertheless const, so a user could prepare a
QMessageAuthenticationCode object with setKey() and addData(), pass it
by const reference to two threads, which each just call result() on
it. This should be safe, but because result() performed lazy
evaluation without being internally synchronized, this would cause
data races.
Fix in the same was as b904de43a5 did
for QCryptographicHash. See there for a detailed discussion of the
solution.
Fixes: QTBUG-111347
Pick-to: 6.5 6.4 6.2 5.15
Change-Id: I1feb380973c480ad6268349a0a46ac471b9ca0f7
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: David Faure <david.faure@kdab.com>
This reverts commit 610bafdfc5.
It breaks the tests for Qt Wayland Compositor.
Task-number: QTBUG-111423
Change-Id: I8e411792e991d23cb0cb6b114ab1697c3b9e8c0e
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Querying bit flags by direct comparison yields incorrect results.
As an effect the minimum size for QWasmWindow is not always properly set.
Use testFlags() function instead.
Change-Id: Ie4cf528ed3c6f664abd17615a6898e8fc49d84b5
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Fix the statement when the tablename is a synonym by not appending the
where clause for the table name to the initial statement used for
tables and synonyms later on.
Pick-to: 6.5 6.4 6.2 5.15
Fixes: QTBUG-111339
Change-Id: Ie18a858427d124e80462048b1a9c5e2afa327546
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
<bit> exists in C++20 and is properly both constexpr and optimized. But
in C++17 mode, we don't have constexpr bitops and instead elect to have
performance at runtime instead. But somewhere along the line, either
when they were added, when C++20 <bit> support was, or in any of the
bugfixes for other compilers, the nesting of #ifdef got messed up and we
declared that we had constexpr builtins for MSVC in C++17 too.
The macro QT_HAS_CONSTEXPR_BUILTINS isn't supposed to be used by anyone
else... but we ended up not being able to use it ourselves either. So
I'm renaming it to a more precise label.
Pick-to: 6.5
Change-Id: I9671dee8ceb64aa9b9cafffd1741b9b4060c9753
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
This brings the code in line with its sibling code in
QCryptographicHash and prepares for a static hash() optimization and
the fixing of the result() re-entrancy issue (QTBUG-111347).
Task-number: QTBUG-111347
Pick-to: 6.5 6.4 6.2 5.15
Change-Id: I3d0c0cd2a37c2bbeb60974307ff138e26b82bf69
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
The goal of this function is to ensure that dst is _always_
NUL-terminated. The only exception is if there's no space to write
even one NUL byte, of course, but not when src is nullptr but dst
would have space.
Update the docs to the new behavior and make them more precise.
Fix a test that assumed qstrncpy() would not write to dst for
(dst, nullptr, 10).
[ChangeLog][QtCore][qstrncpy()] Now NUL-terminates the target
buffer even when the source pointer is nullptr, provided the
target buffer has space for at least one byte.
Pick-to: 6.5 6.4 6.2 5.15
Change-Id: I7806d8c71e260f8f02b79af7b6ce94f23599dd69
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
When Qt is configured to return nullptr from isNull() QStrings
(QT5_NULL_STRINGS != 1), then we'd be feeding a nullptr src into
strncpy(), which is UB. I couldn't rule the case of a null QString
lexeme out with local reasoning, seeing as the code is in the else
branch of an if (lexeme.startsWith(~~~) && lexeme.endsWith(~~~)), so
it might be null.
Instead of porting to qstrncpy(), which can deal with a nullptr src
(albeit up to recently, badly), note that the strncpy + the char[]
allocation is a qstrdup(), so use that instead. This also does away
with the queasiness of taking the size() of a UTF-16 string to limit
strncpy() for the L1-recoded version (which, in this instance is safe,
as toLatin1().constData() is NUL-terminated, but in some other
instances was not).
As a drive-by, make sure we don't leak the strdup()'ed string if the
emplace_back() fails.
Amends be98fa32c7.
Qt 5 is not affected, as constData() never returns nullptr there.
Pick-to: 6.5 6.4 6.2
Change-Id: I178d356e560d2749cd6ce0b9364c710a2d117304
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
The only user of the function, QCollatorPrivate::init(), passes
QLocalePrivate::bcp47Name().constData(). bcp47Name() may return a
default-constructed QByteArray (e.g. for QLocale::AnyLanguage), so
constData() may be nullptr (QT5_NULL_STRINGS != 1). Passing nullptr to
strncmp() or strncpy() is UB, though.
Instead of using the nullptr-hardened q... versions of these
functions, check name for nullptr once, at the top of the function,
and avoid all the lookup code that follows and is known to fail
(because windows_to_iso_list does not contain empty entries).
This way, we take advantage of the std functions' UB for performance
reasons (fewer repeated nullptr checks), instead of being taken
advantage of.
Qt 5 is not affected, as constData() never returns nullptr there.
Pick-to: 6.5 6.4 6.2
Change-Id: I980dace2bca1e983ac526e89fadeb92239ab5f11
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The window stack will now upkeep three groups of windows, always
on bottom (1), regular (2), always on top (3). Windows belonging to
(3) will always appear on top of (2) and (1), and windows from (2) will
always appear on top of (1).
The first window created in the application gets the (1) status, which
is in line with the root window mechanism used before.
Activation has now been decoupled from the top position on the window
stack as a window in (1) or (2) may be active, in spite of the top
window belonging to a higher group.
Fixes: QTBUG-110098
Change-Id: I51f4d2d47163fab26ce5ef28f7a4f23a522c7f91
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
Test documented behavior and serv as a baseline for future changes.
Change-Id: I36a914694d5244c89f28f3e403e11d65492a5eef
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
This completes the triad uint/ulong/qulonglong, ensuring that one of
them will be size_t and one of them will be uintptr_t (size_t and
uintptr_t don't have to be the same type). The signeds ensure one of
them will be ptrdiff_t too.
Pick-to: 6.5
Change-Id: I9671dee8ceb64aa9b9cafffd17415a0bfcbd68b7
Reviewed-by: Lars Knoll <lars@knoll.priv.no>