The subclass AnchorVertexPair is allocated and passed around as pointers
to AnchorVertex, and placed in lists that are then later cleaned up via
qDeleteAll. This very likely results in memory leaks, as the compiler-
generated ~AnchorVertexPair destructor is never called.
Add a virtual destructor. Since there now is a vtable generated for
AnchorVertex, remove the m_type member (which is only used for string
generation in debug builds) and make toString virtual instead.
Change-Id: I2cf184c0b1da1bd59b056a0f696a0e5479d4cb4e
Fixes: QTBUG-84094
Coverity-Id: 218707
Pick-to: 5.15
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Passing 0xA7 to a signed char causes a truncation warning with MSVC2017.
Make the cast explicit.
Change-Id: Ief1a97c52544b271556811816f7804074bd336df
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Even though QString::fromRawData() may not be as expensive as it used
to be, it's still and out-of-line call _and_ more characters to type,
so replace with QStringView construction where applicable.
Change-Id: I70662da1bd45284f67e117e92b25d242afb8aaf8
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Instead of creating a QStringList from a static array anew for each
call, cache the result in a static variable. If we have to pay for the
overhead of implicitly-shared classes, we should at least reap the
benefits, too.
Use IILE to gain automatic thread-safety (thread-safe statics).
Change-Id: Ib92dd9cb85f84e013f98ca81565cc392bb39e76b
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Be more specific about overriding behavior when using
the drawText overload that takes a QTextOption argument.
Fixes: QTBUG-41894
Pick-to: 5.15
Change-Id: I8b38cb383005f1a07f4c6d70050e0d2cbb551521
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Use the static global instance to call bounded() and fillRange().
Pick-To: 5.15
Change-Id: I91678b7c985ab9d0dcdf09aadad6cb8f495c02cd
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
QTest::toString allocates memory by calling qstrdup; that memory must
be freed by the caller.
Change-Id: I218bc57b3312fdd9195fb49eaed7d20df4bf717c
Fixes: QTBUG-84081
Coverity-Id: 186979
Covierty-Id: 186980
Pick-to: 5.15
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Also replace one case of QChar(0) with QChar::Null.
These were errors in my local tree, which means they're included in
bootstrap builds (incl. qmake).
Change-Id: I3dffa9383fd1a30aa43fe2491ad95bb2b1869b40
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
The QChar ctors from non-char-types are going to be deprecated.
Change-Id: I17d7916fb1dac9889ead61daca846b1257d17312
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
The fromUtf16(ushort*) and fromUcs4(uint*) overloads are going
to be deprecated. Use the newer fromUtf16(char16_t*) and
fromUcs4(char32_t*) overloads.
As a drive-by, use std::end()/std::size() where applicable.
Change-Id: I5a93e38cae4a2e33d49c90d06c5f14f7cb7ce90c
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
- constexpr
- noexcept
- return char16_t (this converts implicitly to QChar, but allows use
elsewhere, too)
[ChangeLog][QtCore][QUrlQuery] The defaultQueryValueDelimiter() and
defaultQueryPairDelimiter() functions now return char16_t instead of
QChar.
Change-Id: I4662f832a89ae9f4a984ea9349b5e0e212a09c95
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Coverity alerts about uninitialized members. While this might be ok
in the code here (ie TreeNode::splitLeft is never used for leaf nodes)
it can easily result in undefined behavior and other hard-to-debug
issues.
Initializing the struct with initializer syntax; compiler explorer
indicates that the compile will be able to optimze the calls to avoid
duplicate initialization of data members.
Change-Id: I0eb5d26e34f466d8c659c1945f02601aef511fbf
Fixes: QTBUG-84160
Fixes: QTBUG-84156
Coverity-Id: 218601
Coverity-Id: 11398
Pick-to: 5.15
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Use the combiners and an algorithm.
Change-Id: I577950bbd2e8b0556f28e2a8381e432c22bb0dc9
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Add a helper function so that we have a shortcut.
Instead of writing:
QHashCombine hash;
seed = hash(seed, fieldA);
seed = hash(seed, fieldB);
// etc.
return seed;
one can now simply write:
return qHashMulti(seed, fieldA, fieldB, fieldC);
Port a few usages inside qtbase as a demonstration.
[ChangeLog][QtCore][QHash] Added the qHashMulti and
qHashMultiCommutative functions as convenience helpers
to calculate a hash from multiple variables (typically,
data members of a class).
Change-Id: I881a9ad41168df20ceecc6588a94abe7ddc6a532
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
As what we did for QMake.
Amends commit 317383217b
Change-Id: Iab3b755193b5483362896da20a03fe2d59f37192
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
I generated a rc file using VS2019 and I found that it's
using other macros.
According to [1], both of VOS_NT_WINDOWS32 and VOS__WINDOWS32 refers to
"File was designed for 32-bit Windows", although they have different
values, and 0x0L is the value of VFT2_UNKNOWN. So I think it's safe to
update them. VS2019 is using them as the default template for rc files,
after all.
[1] https://docs.microsoft.com/en-us/windows/win32/menurc/versioninfo-resource
Change-Id: Ibaf91394668844492f1357da05b881b9d81aa15f
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Prepare for the fact that the multi-key containers will no longer
inherit from the single-key ones. Refactor the code to follow
the existing.
Change-Id: I5fd4d7e33f8184c015e18e169af72e11a5e84f0d
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
We use the Catch2 testing framework to test Qt Testlib, which also opens
up the possibility of using it for other internal testing once it's made
available through the build system.
The test now has a --rebase mode which will write out the actual results
as new expected files. Once we add the required post-processing to the
results to remove timestamps and other testrun-specific data we can
remove the standalone python script generate_expected_output.py that
today has to be kept in sync with the test itself.
No attempt has been made to clean up the comparison-functions, but
these could all benefit from moving their logic from the comparison
to the sanitization step. This will both make the expected files
more generic, and will reduce the diff once a failure occurs, since
we're not seeing all the hunks that the comparison-functions ignored.
Change-Id: I1769d42e7958d56d1ad5da958db0e8fe3a2a3c23
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Setting the QMAKE_MANIFEST variable doesn't have
any effect for MSVC. This commit fixes that.
If the developer is setting this variable,
he/she will definitely use CONFIG-=embed_manifest_exe
or CONFIG-=embed_manifest_dll at the same time,
so I think there is no need to check this.
Change-Id: Ie32b7e0cded71efcf14bf4c0eecab5ab1944fa2c
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
For some reason the Help target doesn't get its RC file generated
when building qttools, which leads to a build failure.
We don't quite know yet why all this is happening, but a workaround
fix seems to be to use an OBJECT library instead of an INTERFACE
library to propagate the generated RC file.
Amends 657fa0462d
Fixes: QTBUG-84155
Change-Id: I1e1c2f3b05bae2ed009020d031c6510a517c01ec
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
As it was found recently CA fetcher, while building a chain with a missing
intermediary, may return the root we are already aware of (had in the "ROOT"
store). While this is in general harmless, it can be a bit surprising if
some code is analyzing the list of CA certificates after a handshake.
Pick-to: 5.15
Change-Id: I1df3b537e2a812de17e2c94ad4643cf36e7e946f
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This enables the use of QChar::fromUcs4() instead of
QString::fromUcs4() in a call to putStringLiteral().
Change-Id: I6ed933cc92bfbb70ed2b168b7deeeb466bc6bfeb
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
The 'ch' never had to be a 32-bit variable. It only ever gets assigned
16-bit unsigned values, so make it a char16_t and thus implicitly
convertible to QChar, even when QChar(int) is being deprecated or
removed.
Change-Id: I8391c393ca860f8f73f1495d7764dacd57275ea7
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
[ChangeLog][Third-Party Code] PCRE2 has been update to version
10.35.
Change-Id: I9793bdd3d25b88eea0d4479f544b297d065b5fb6
Pick-To: 5.15
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Code that's removed via QT_VERSION(6, 0, 0) check is already no
longer compiled.
Change-Id: I70865f330a6260ac2e9cf2770d599a5b6f7bb7d4
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
Conversions from non-char-types to QChar are going to be deprecated.
Use QChar::fromUcs2(), fromUcs4(), QLatin1Char(), or convert the
constructor argument to char16_t.
Change-Id: Ib45ebd5560aa3a2bc460037ab09773607485c6e2
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
It seems that PCRE2_UCHAR16 is exactly ushort, even though it's
documented to be uint16_t. There's no requirement for these to be the
same type, nor for the PCRE typedef to continue to point to the same
type, so add explicit casts.
Change-Id: I89f65d29feaada84ea00688976a123364857bc58
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
The old code malloc()ed a buffer to hold a copy of the data if a
substring of *this was to be inserted. Instead, use a QVarLengthArray.
Pick-to: 5.15
Change-Id: Ia3b4d7509bff2375ec0da5c890ecff2e9f7f335c
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Yet Another Side Effect of not keeping iterator stability.
Although not idiomatic, the pattern
while (i != e) {
auto cur = i++;
if (cond)
erase(cur);
}
was actually correct. Move to the idiomatic erase pattern
instead (it = cont.erase(it)).
The example still has memory problems all over the place on
shutdown. At least now it doesn't crash when running.
Change-Id: I30bd2c4e2b3fa7fe4e28d4426ff3d894b9bae103
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Given that there is only one mouse (which might change some day, but
hasn't yet), there can only be one window containing the mouse,
regardless of which screen it's on. The implementation before was only
able to send enter/leave events when moving from one window to another
on the same screen; but we need the enter/leave events to be sent when
moving between two full-screen windows on two screens as well.
Also send an enter event the first time the mouse moves, to whichever
window that happens to be. A Wayland compositor that renders its own
cursor will need to know which screen is in use at the beginning.
Pick-to: 5.15
Fixes: QTBUG-83973
Task-number: QTBUG-55161
Task-number: QTBUG-79924
Change-Id: Ie6f36cd33b103955a70bac73c1485bf475c08468
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Overload uint/ushort versions with new char16_t/char32_t ones, and
[[deprecate]] the old ones. There's too much churn for doing the
replacement in one patch.
Change-Id: Ib1f90a1c46b80aa0fb1ea00ce614af49f49bd712
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Write a small range adapter that maps begin() to rbegin() and end() to
rend() of the underlying range, use it to replace indexed reverse
loops with ranged for ones.
Change-Id: I5498a23106b0432ce885e72e5e3912910f50b5c1
Reviewed-by: Lars Knoll <lars.knoll@qt.io>