For generic interop with other parts of Qt, we need to be able to
extract the type-erased internal storage of QFuture<T>. In particular,
QtWebChannel needs this to transparently support QFuture<T> as a method
return type.
Task-number: QTBUG-92903
Change-Id: I763f054656b8810d58720262d364baf42c47eb37
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
SFINAE out the new-style connect() overloads for const char*
functions.
Before, we detected the problem in the body of connect(), by failing
the static_assert for signal/slot argument compatibility, but that's
too late. We don't want to select that overload at all, because we
want that decltype(QObject::connect(QAction*, &QAction::triggered,
QObject*, SLOT(something())) SFINAEs instead of returning
QMetaObject::Connect, because then all the classes that provide
convenience new-style connect syntax by wrapping the
QObject::connect() call can just use that decltype() to accept
anything that will succeed in the wrapped connect() call instead of
manually trying (and failing) to provide proper overloads themselves.
[ChangeLog][QtCore][Potentially Source-Incompatible Changes]
QObject::connect(sender, pointer-to-member, [receiver, ], SLOT(~~~))
is now SFINAEd out instead of triggering a static_assert(). That means
it is now possible to use Expression SFINAE
(decltype(QObject::connect(<sender>, <signal>,
std::declval<Args>()...) to properly wrap new-style QObject::connect()
calls with a single wrapper function, greatly simplifying the
implementation, incl. passing Qt::ConnectionType arguments. For more
information on how to use this in your own code, see the sources of
QWidget::addAction().
Change-Id: I4052a49eacd63a432a9648a667adc435744a633d
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
...lest some code tries to set it to no possible effect.
Change-Id: I7aed05200c1abeda1d2f9d88ceb99a5ce6132dbf
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
QTableView stored the current row/column selection start in an own
variable instead using currentSelectionStartIndex. This leads to an
inconsistent behavior when the selection is done with a click on the
header and then in a cell (and the other way round)
Fixes: QTBUG-92561
Change-Id: I4c8bda3a938de451b6eff2819141e86a6870fbef
Pick-to: 6.1 6.2
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Amends 556fbbea6e, which breaks
translucency of frameless tool windows. Possibly a bug in macOS, a
window being made miniaturizable should not have side effects on
background or translucency.
Pick-to: 6.2 6.1 5.15
Fixes: QTBUG-95042
Task-number: QTBUG-65637
Change-Id: I651196e3cf8a9c59b250e5f1b4064cc4ded02372
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Using the QTextFormat::FullWidthSelection property to select a line
would previously not take into account right-to-left text layouts.
With this patch, the whole line should now be drawn correctly for both
left-to-right, and right-to-left layouts.
Pick-to: 6.2 6.1 5.15
Fixes: QTBUG-91125
Change-Id: Ide7b340cd7b4060e7c00e55e0011a86ffdfb5eb4
Done-with: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Dmitry Shachnev <mitya57@gmail.com>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
The workaround I had implemented based on alpha version of OpenSSL v3
and what developers (OpenSSL) said about DH back then is not going to work
in the end - they do remove all DH (struct and related functions) stuff
if you set a proper OPENSSL_API_COMPAT level. A proper re-write is required
to support OpenSSL v3, but then there is no reason to keep dead useless
code.
Pick-to: 6.2
Task-number: QTBUG-94596
Change-Id: Iae092dd08148521649a684879d30e190736e1abe
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
It was fixed quite some time ago for TLS counterpart (TLS_MAX_VERSION),
but somehow the similar fix was missing for DTLS. OpenSSL v3 deprecated
those constants and they can be compiled out by OPENSSL_API_COMPAT.
Pick-to: 6.2
Task-number: QTBUG-94596
Change-Id: Ia0246170a003db900c430b2fbfc177caf05a395a
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
None of the member functions use sharedFromThis().
Change-Id: I4d1fc0c3c18830df231833ce0ef631e1bb1fc27e
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Cocoa renders the bevel of a push button always in the default height of
32 pixels. We handled the case that the button is larger than that by
switching to "squared" mode, but buttons that are smaller than that got
rendered incorrectly, with the bevel being clipped.
Fix this by always rendering buttons in "squared" mode when the height
of the widget is not the same as the standard. Adjust the default height
for "mini" push buttons based on visual testing. Make the equivalent
adjustment to the focus frame logic and general positioning so that
buttons and frames are centered compared to other controls.
As a drive-by, get rid of expensive QObject::inherits calls, and replace
with qobject_cast. The headers for all the relevant widget types are
already included.
Fixes: QTBUG-85972
Pick-to: 6.2
Change-Id: I4ad66fac2313fbee385c1eadcc243f69c9cace70
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
u8 literals changed type from const char[] to const char8_t[] in C++20
and Qt APIs that don't use QUtf8StringView aren't prepared for it. Use
a classical char literal for the time being.
Amends 857be50b2e.
Pick-to: 6.2
Change-Id: I7f194befc08ab50cdef321d8900ee3553599a19e
Reviewed-by: Andreas Buhr <andreas.buhr@qt.io>
If Qt was configured with -static-runtime which implies MultiThreaded
-MT flag, the plugin initializer object libraries were still compiled
with the default -MD flag.
When an application linked to Qt, that caused linking to fail with
mismatched symbol errors between the application symbols and the
plugin initializer object library symbols.
Make sure to set the MSVC_RUNTIME_LIBRARY property on both plugin
initializer and resource object libraries, depending on the value of
QT_FEATURE_static_runtime.
We did set the property for resources added by
qt_internal_add_resource, but not for the resource created by
the public qt6_add_resources counterpart.
Pick-to: 6.2
Fixes: QTBUG-95043
Change-Id: Ia543cd0241db94a12080be2655ad420fe9ad3f24
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Amends c0b3c06a7d.
The QCompleter used by QFileDialog uses starts-with matching of
the path parts, for all parts of the path. It uses the EditRole of the
underlying model for the data to match.
The path parts used for a path on Windows are "C:", "Users", "etc...",
and then finally whatever input has been typed so far. If we try to
match that against a starts-with rule against "Local Disk (C:)", then it
will fail and the completer will never have anything to show.
So, for the EditRole, return just the volume drive letter as we did before
c0b3c06a7d, not the volume name. Neither
can be edited anyway. This happens to then match the native file dialog
behavior, which doesn't complete "L" to "Local Disk (C:)" if the Computer
contents (ie. volumes) are shown.
Augment the QCompleter test case to cover that scenario (it already has
everything set up for this particular combination, even though we are
actually testing QFileSystemModel returning the correct data).
Fixes: QTBUG-94799
Task-number: QTBUG-78043
Pick-to: 5.15 6.2 6.1
Change-Id: I14844d91601e9b16dc07cff2ca48713acb7cdd09
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
There are four messages that we, for some reason I don't understand,
have our own text for instead of using strerror(). But even though they
were marked for extraction, they weren't translated.
Fixes: QTBUG-95039
Pick-to: 6.2
Change-Id: I266f1bf9a4d84db39086fffd168f8c6dfe9c2cf4
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
The method was never tested, but it failed to compile after
QMultiHash was introduced as a separate class in 6.0.
This patch fixes it and adds some unit-tests to cover the case.
Task-number: QTBUG-91736
Pick-to: 6.2 6.1
Change-Id: I5dd989d4775efc6a9bb13c5ed1d892e499d95dc2
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
This script was written for Python 2, which is deprecated now.
Change-Id: I534c93922776254a4c822ac60c6fd77ca7cb9760
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: hjk <hjk@qt.io>
Let androiddeployqt write a dependency file so that
the build system knows when to re-run it.
Fixes: QTBUG-94567
Change-Id: I5985d707f257b22789013a74f0a6f7c4de6e5e88
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
The base implementation discards the data by reading into a dummy
buffer, which is slower than necessary.
Change-Id: Iabf0c4a25746af6cac5b61d7bda66d89501c808c
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Do not detach when find(key, value) is called on an empty QMultiHash.
As a drive-by: fix return value for QMultiHash::remove() in case of
empty QMultiHash.
Task-number: QTBUG-91736
Pick-to: 6.2 6.1
Change-Id: I1e32f359e7ee9ce8403dae79d02e0b88a20ec4a5
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Says GCC:
qdbusmarshaller.cpp: In member function ‘QDBusMarshaller* QDBusMarshaller::beginMap(QMetaType, QMetaType)’:
qdbusmarshaller.cpp:286:17: warning: ‘%s’ directive argument is null [-Wformat-overflow=]
286 | qWarning("QDBusMarshaller: type `%s' (%d) is not registered with D-BUS. "
| ^
Fix by manual checking. It's a False Positive, because
QString::asprintf() can handle nullptr strings just find, but let's
make GCC happy.
Since the code snippet appears multiple times, even though GCC only
warns about one of them, take this opportunity to factor the code out
into a cold helper function.
Change-Id: I1d642f2465f34b670b179646185cba05cb16e573
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Now that calling hashLengthInternal() is cheap, use it to factor
common code in switch statements. For sha3, that would have been
possible before, too. Reason for duplicating the case bodies is
unclear.
Change-Id: I281617546e0b3e701315eee2f10df8d26ada92ae
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
... instead of the "usual" rule of three: ctor, addData(), result().
Not only does it generate less code in the caller, it's now also
faster.
Change-Id: I67c7eeb01f527b90e80a08f60c1c7f2ec1e49dd4
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
char16_t, as returned from QStringView::utf16(), is guaranteed to be
unsigned, so there's no need to reinterpret_cast to ushort.
Change-Id: I7432dd26b4814c61fe70cc33ed307097ef46ce4e
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
We call evaluateRecursive_inline in setBinding, which in turns runs the
noSelfDependecies check. However, creating a binding resuting in a
binding loop must not crash, but instead result in the binding entering
an error state. To prevent a crash caused by the assert in debug builds
of Qt, we replace the assert with a warning for now.
A better approach in the future would be to ensure that we only run the
check in cases where we are sure that a self-dependency is really a
fatal error.
Pick-to: 6.2
Change-Id: I58158864ed81fa907132a4e7d6667c9b529e7e64
Reviewed-by: Maximilian Goldstein <max.goldstein@qt.io>
... so don't try to call it.
The call resolves to a fall-back implementation of toString() that
just returns nullptr, so we might as well pass nullptr directly, like
three lines above, and not confuse readers of the code.
Change-Id: I85d196aae7a0317050cfe16b206252df3fdffa2d
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
The pro2cmake.py conversion script faithfully reproduced the .pro files
for the plugins, which specified the libraries as public. But in CMake,
the implications of this are that public usage requirements should then
be propagated to consumers. We don't expect any consumers, since a
plugin is created as a MODULE library in CMake, so for Windows we don't
even have an import library to link with. The only exception to this is
for static builds where plugins are created as STATIC libraries
instead, but only in certain controlled situations do we then link to
plugins. Even then, usage requirements are not expected to propagate to
the consumers, so these relationships should always be specified as
private.
Pick-to: 6.2
Task-number: QTBUG-90819
Change-Id: Ibc7c2bcd3b6a9dc77df40c4c0c22ff254a80f33d
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
C++20 gave us constexpr std::swap, but it makes no sense for qSwap
not to be constexpr anyways.
[ChangeLog][QtCore][QtGlobal] qSwap is now constexpr.
Change-Id: I13f3cbf2870adf5770c62dc00e15004978fc85d9
Pick-to: 6.2
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
After dc794f7622, side widgets only got
space if they were not fading out, but the logic was not correctly
accounting for side widgets that never fade, such as buttons added via
QLineEdit::addAction.
Fix this to give visible widgets space, unless they are fading out. That
was the intent of the original change. Rename the variable to make its
purpose clearer, and reset it at the end of the fade-out animation.
Add a much-needed test that relies on private APIs to verify that the
effective margins are calculated correctly.
Fixes: QTBUG-94824
Pick-to: 6.2 6.1 5.15
Change-Id: If2ee6be52be9e4f9be1e91f72f27681ce27def6d
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Just create it on the stack, we know the lifetime.
Reduces memory allocations in static hash() from 2 to 1.
Change-Id: Ie0e22b023331da9a6f39c80b4cd1a5c016f63a87
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
These can be noexcept. Requires to add rvalue overloads for
QCborMap::fromJsonObject() and QCborArray::fromJsonArray(), too.
[ChangeLog][QtCore][QJsonValue] Added constructors taking
rvalue QJsonArray and rvalue QJsonObject.
[ChangeLog][QtCore][QCborMap] Added rvalue overload of
fromJsonObject().
[ChangeLog][QtCore][QCborArray] Added rvalue overload of
fromJsonArray().
Change-Id: I523c9a41166ea932fba4dd204072bd39d2192d2e
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Make sure the right variable is used
Pick-to: 6.2
Change-Id: Iec6d8392b320b704423ecbd4434270883fa9fd96
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Amends df31696321 to take care
of macOS 10.15 specifically, where the focus ring is a pixel
too high and leaves a gap that's visible on high-dpi displays.
On macOS 10.14 and before, and for editable comboboxes, the focus
frame is correct.
Fixes: QTBUG-94069
Pick-to: 6.2 6.1 5.15
Change-Id: I278aa30036808c06f8e71385d4797315e46d8f1d
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
...and use it internally.
Exported symbols are LD_PRELOADable, so the compiler might not
constant-fold calls to them. Besides, it's a requirement for a
follow-up change.
Change-Id: I437f46d7d42ed0a6921dee3027a471e2aa52baa1
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
It never changes, making it const might improve code-gen.
Change-Id: Ife8723e27ae9cf6cfcca48d58d46307003123354
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
The base implementation reads data using repeated calls to getChar(),
which is quite slow.
Change-Id: Ie46624df63791b2cdd3c8a28fe3327427d942505
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Incl. the static hash() function. Remove the QByteArray versions from
the API, but not the ABI.
Adapt some callers.
[ChangeLog][QtCore][QCryptographicHash] Replaced QByteArray with
QByteArrayView in addData() and static hash() functions.
Change-Id: Ia0e9bf726276305e05894d323d76a29e985f39eb
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
QIODevice::readLine() can also return partial lines, which was not
properly documented. Add an autotest for QLocalSocket to illustrate
and test this behavior.
Pick-to: 6.2
Change-Id: Ia2c1c438cc68d2672d34881e11fdf7837232f3b4
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Need to decrement 'remaining' (check), but also increment data (meep).
Testing is a bit complicated, as most algorithms are just too slow to
fit into the 5min QTestLib timeout. Picked the fast ones and Sha512
(which completes here in < 17s, with threads), at least.
Amends e12577b563.
[ChangeLog][QtCore][QCryptographicHash] Fixed a bug where presenting
more than 4GiB in a single addData() call would calculate the wrong
result().
Pick-to: 6.1 6.2
Change-Id: Ic72916ebc33ba087d58225af6d8240e46e41f434
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Amends a3f3af8a8f, which resulted in the
last visible separator always getting hidden.
Don't abuse QCocoaMenuItem::visible property to store whether the native
NSMenuItem is shown, only store whether it should be shown.
Rename the local variables to simplify the logic.
Fixes: QTBUG-94802
Pick-to: 5.15 6.2 6.1
Change-Id: I56e8c99a2a46d8cbdf75c4ad6cb714961f28a6a3
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
In Qt 6, QHoverEvent is a QSinglePointEvent and carries more information
than it did in Qt 5.
Task-number: QTBUG-94971
Change-Id: I55b271e8741081ed9074f687b08f4111142a1bf0
Pick-to: 6.2
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
If a child widget that is affected by the parent's style sheet is
polished (because it's been shown explicitly, for instance by a layout),
then it must be repolished when the parent's style sheet changes, even
if the parent itself has not been polished yet.
Since the style sheet is set on the parent widget, we must repolish the
parent (which will repolish the entire widget tree), not just the
individual children and grand children.
Fixes: QTBUG-76945
Task-number: QTBUG-39427
Task-number: QTBUG-18958
Change-Id: I7bca9ee1badc07202fa05dc97f440f4ca6c9517d
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
The macOS style falls back to the QCommonStyle for those, and that
style loads the macstyle pixmaps. Weird, but cleaning that up is
for another commit.
Fixes: QTBUG-38776
Pick-to: 6.1 6.2 5.15
Change-Id: Ie1fe721387e64cb91ee5fc528667a63e6ddd6eed
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
CMake has an optimization where it skips creation of a
${target}_autogen target and instead uses PRE_BUILD events for
AUTOMOC. That breaks qt6_extract_metatypes which expects the
autogen target to always exist.
Disable the optimization by generating a dummy header file and
adding it as a source to the target.
Pick-to: 6.2
Fixes: QTBUG-94944
Change-Id: Ic3d923cc6d3a149fea8c5c7b111576b64d19f608
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
We create the callable object at sizeof(QPBP) offset from
the beginning of the memory block. However, evaluateRecursive()
uses sizeof() + alignment when fetching that same callable from
the memory
While on 64-bit platforms this is fine due to
sizeof(QPBP) == QPBP::getSizeEnsuringAlignment(), this is broken for
32-bit systems where there's actually alignment bits that follow the
QPBP struct in memory (and thus we cast a random memory location to
an object)
(Note: QPBP is short for QPropertyBindingPrivate)
To fix this, change the offset for creation and destruction of the
callable to the one that uses alignment. This way, evaluateRecursive()
code becomes correct
Fixes: QTBUG-93890
Pick-to: 6.1 6.2
Change-Id: Ief57051846632fa61df4b79b3f054c25062a9498
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
The code assumed that any C++ implementation would implement the
resolution for LWG2996 in C++20 mode. While that may be the case in
the future, the current state in GCC 9.3 as shipped in Ubuntu 20.04
LTS is that it doesn't, which leads to tst_qsharedpointer fail there.
Fix by using the safe version of std::move, std::exchange, which
guarantees the state of the src object, no matter what the callee
does.
Pick-to: 6.2 6.1 5.15
Change-Id: Icc39b527df4d3a7b398ff2b44bcbdf9082b81f2f
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Enable kCFSocketConnectCallBack to get connection made/failed
notifications. For the error case, the data pointer will be
set (it points to an int with the error code).
Change-Id: Ib51c0ae7c2c74d7bc2fea3c8b7aa9033a860f602
Pick-to: 6.1 6.0 5.15
Fixes: QTBUG-91619
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
target_link_options are placed by CMake at the beginning of a linker
line. This gives us an opportunity to use the function to propagate
object libraries. This change adds one more check in the root
Config.cmake file. If CMP0099 policy is enabled, CMake enables
propagating of the linking options when linking two static libraries
using the PRIVATE linking visibility, so we can rely on the correct
linking order and expect object libraries to be propagated.
Note that on the platforms where cmake version is higher than 3.16
Qt uses CMP0099 NEW in functions like qt_add_executable. This means
that at the moment of creating an executable target the TARGET_POLICY
genex will also be NEW, so we do not take into the account the user
defined CMP0099.
If the CMP0099 policy is not available for a certain CMake version
we skip the TARGET_POLICY check and simply disable propagation of
the object libraries using target_link_options for both user and Qt
libraries. This is applicable for the CMake versions 3.16 and less.
Linking approaches have the following priorities(from higher to lower)
after this change:
- target_link_libraries - works if link order matters not or CMake
version greater equal 3.21.
- target_link_options - works if CMP0099 is set to NEW by user or
if the CMake version is greater than or equal to 3.17 and an
executable is created using Qt functions.
- object library finalizer - works if CMake version is greater equal
3.19 or qt6_finalize_target is called explicitly.
- target_sources - is used when all the other approaches could not
be used.
Amends a1fd4f51ad
Amends 3329212815
Pick-to: 6.2
Change-Id: I14f88caeb04e357191c840abeab89b03e210b796
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
To (set)decompressedSafetyCheckThreshold, as suggested on the API review.
Task-number: QTBUG-94407
Change-Id: Iffc52691022939ae46703de8a0416355487b716f
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
It's useful when one project needs to be configured multiple times in
different directories without overlapping CMakeCache.txt files, due
to differing options passed during configuration.
Pick-to: 6.2
Change-Id: Id2969e989824f980fba6ed58f9e0323ab3a862dd
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Remove unnecessary elements from the manifest file, making it
easier to manage and read. Mostly, the removed elements are
more internal data that is populated by the build system
and the user shouldn't have to worry or confront that.
Also, use the same formatting used by Android Studio.
[ChangeLog][Android] Remove some elements from the manifest
file that are internal, to make it easier to deal with the
manifest.
Pick-to: 6.2
Change-Id: I6a1f275b579370972c0bf022502a8fbfe7d0bfd1
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
Since Ministro no longer work on recent Android versions (Android 8+),
and it hasn't been maintained and the repos are not updated, the
existing code is practically a dead code.
[ChangeLog][Android] Remove ministro code since it's been unmaintained
and not working with recent Android versions.
Task-number: QTBUG-85201
Pick-to: 6.2
Change-Id: I18d7b1e209cba3cfd04674060e9bf39aa5a5510f
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
This reverts commit 046d819e2e.
Since qtandroidextras is now removed from qt5, there should
no longer be a dependency issue in CI.
Pick-to: 6.2
Change-Id: I3b8ed409eeb0ad6c7bb3303ec08e672739c5b2ed
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Introduce two new packages WrapVulkanHeaders and WrapVulkan similar to
the OpenSSL wrapper packages.
WrapVulkanHeaders uses FindVulkan and is marked as found if Vulkan
headers are found (that's the only part the Qt build requires).
The WrapVulkan package is currently not used, but is there for
symmetry.
The Vulkan feature is now disabled by default on QNX, because the
QNX toolchain file in the CI does not set
CMAKE_FIND_ROOT_PATH_MODE-like variables and CMake ends up finding
host Vulkan headers causing the build to break.
Pick-to: 6.2
Fixes: QTBUG-92157
Change-Id: I05309821f866456cd42e7f85bf8b76ba099df656
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
This reverts commit 1365a1c7a7.
Reason for revert: Causes the issue in QTBUG-94445.
Pick-to: 6.2
Task-number: QTBUG-88508
Fixes: QTBUG-94445
Change-Id: I131234c9b1daeecd5f5f4921a9150d65a26db972
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
Call handleScreenRemoved when the QOffscreenIntegration is getting
destroyed. Fixes memory leaks such as this one:
```
$ memcheck --leak-check=full ./tst_qlabel -platform offscreen
...
==117791== 472 (88 direct, 384 indirect) bytes in 1 blocks are definitely lost in loss record 166 of 267
==117791== at 0x483EF3F: operator new(unsigned long) (vg_replace_malloc.c:417)
==117791== by 0x48C0939: QOffscreenIntegration::configure(QList<QString> const&) (in /home/milian/projects/qt5/src/qtbase/build/plugins/platforms/libqoffscreen.so)
==117791== by 0x48C0B60: QOffscreenIntegration::createOffscreenIntegration(QList<QString> const&) (in /home/milian/projects/qt5/src/qtbase/build/plugins/platforms/libqoffscreen.so)
==117791== by 0x5381CB4: init_platform(QString const&, QString const&, QString const&, int&, char**) (in /home/milian/projects/qt5/src/qtbase/build/lib/libQt6Gui.so.6.2.0)
==117791== by 0x5384E05: QGuiApplicationPrivate::createPlatformIntegration() (in /home/milian/projects/qt5/src/qtbase/build/lib/libQt6Gui.so.6.2.0)
==117791== by 0x5385B1F: QGuiApplicationPrivate::createEventDispatcher() (in /home/milian/projects/qt5/src/qtbase/build/lib/libQt6Gui.so.6.2.0)
==117791== by 0x5C67A76: QCoreApplicationPrivate::init() (in /home/milian/projects/qt5/src/qtbase/build/lib/libQt6Core.so.6.2.0)
==117791== by 0x5387826: QGuiApplicationPrivate::init() (in /home/milian/projects/qt5/src/qtbase/build/lib/libQt6Gui.so.6.2.0)
==117791== by 0x4C00368: QApplicationPrivate::init() (in /home/milian/projects/qt5/src/qtbase/build/lib/libQt6Widgets.so.6.2.0)
==117791== by 0x11D7D9: main (in /home/milian/projects/qt5/src/qtbase/build/tests/auto/widgets/widgets/qlabel/tst_qlabel)
==117791==
```
Pick-to: 6.2
Change-Id: Ibf4e6f4258514f85f23bb91b29008b837016edbc
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
It was only needed during the transition, while qtbase integrated the
new name, so that qtmultimedia can switch to using it, after which
qtbase can safely lose the old name.
Pick-to: 6.2
Task-number: QTBUG-94407
Change-Id: I8e9f35ae04f719fc732cd0fe9501f49b316767e5
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Says GCC:
In function ‘char* QTest::toString(QPair<T1, T2>&) [with T1 = QWidget*; T2 = QEvent::Type]’,
warning: ‘%s’ directive argument is null [-Wformat-overflow=]
Fix by re-using formatString(), once introduced for std::tuple.
As a side-effect, this gets rid of the funny double-quotes around the
output.
Change-Id: I2dd5f10fa2b3a392370bf487c1b7e98f3d190978
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Revert a part of d3638e18d3 because the
change was not needed
Task-number: QTBUG-94407
Pick-to: 6.2
Change-Id: I7cf0969d6ecc4078d38b4241ffe7d24273a6d412
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
... and C++20 std::counting_semaphore API compatibility.
[ChangeLog][QtCore][QSemaphore] tryAcquire() now optionally takes a
<chrono> duration as timeout, not just int milliseconds.
[ChangeLog][QtCore][QSemaphore] Added try_acquire{,_for,_until}() for
C++20 std::counting_semaphore compatibility.
Change-Id: I34b6b4bf57a54745d4b97349903d090c4995338a
Reviewed-by: David Faure <david.faure@kdab.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
... by making the test class a friend of the CUT, as we do elsewhere
for the same reason.
This allows to remove the duplicated enum and struct in favor of using
The Real Thing™, which means the test can no longer go out of sync
with the CUT anymore.
Change-Id: I87dc8bb4a5476ae4fc99e006c4690e96d2f530d2
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
This is a partial revert of commit
f385b8827a.
This causes issues because we may overwrite genuine styles with
synthetic ones.
Lets say for instance that we register "Roboto Bold" and then later
we register "Roboto Thin". When we register "Roboto Thin" we also
register an alternative font which is called "Roboto" (because this
is the typographical family name of the font) with bold weight, because
we know Windows can synthesize this.
This would work fine, except that on Windows we also store the original
face name of the font as a user-pointer in the database. This contains
the legacy name of the font: "Roboto Thin". This will override the
font that is already stored. When we look up "Roboto" + bold weight in
the database later, we will find this synthetic font, replace
the requested family name with the legacy one "Roboto Thin" and use
this instead.
The right fix for now is to revert the cause of the regression. If we
want to re-fix the original bug, we might be able to reintroduce
f385b8827a and then make sure we always
prefer the "real" font when there are conflicts (this would mean marking
synthetic fonts in the database).
[ChangeLog][Windows] Fixed a regression where different font styles
and/or weights would not be available.
Fixes: QTBUG-94781
Task-number: QTBUG-91398
Pick-to: 5.15 6.1 6.2
Change-Id: I092022b14ebf1d56685eaa3b8efe55f015659adc
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
The FontConfig database had a static leak because we never
dereferenced the current config. To make address sanitizer output
less noisy, we clean this up on shutdown.
From FcConfigDestroy docs: "Note that calling this function with the
return from FcConfigGetCurrent will cause a new configuration to be
created for use as current configuration."
So this should be safe even if application execution continues after
Qt shutdown, but it could trigger creation of a new current config
in that case, if FontConfig calls are made.
Fixes: QTBUG-92477
Pick-to: 5.15 6.1 6.2
Change-Id: I596055a84edc1a1b06157e2adf6c8627c6802db1
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Using QSystemTrayIcon::isSystemTrayAvailable() generates a new
connection from QDBusTrayIcon::isSystemTrayAvailable() with a new unique instance ID.
These were never closed, so calling
QSystemTrayIcon::isSystemTrayAvailable() frequently leads to crash when
it runs out of file descriptors.
Fixes: QTBUG-94839
Pick-to: 5.15 6.1 6.2
Change-Id: Ib71441a6b680d8633707cc02f9b6081c0f02472b
Reviewed-by: Dmitry Shachnev <mitya57@gmail.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
It could fit into QVariant's inline storage if we didn't waste so much
space.
Change-Id: Ie9e592a49c955b0a97a202e0bd875183396af993
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Less boilerplate code and no more impedance mismatch with
recently-ported QSettingsPrivate::get().
Change-Id: I5e113a44a48274aecb20fc9cb5d8db02c6cd0a35
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
... instead of a bool return and a QVariant out parameter.
Change-Id: I9d937668ede668075d1de5bb57f61e4c260aaddc
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Taking the copy after the resize is completely pointless: the copy is
there to ensure that `t`, being a reference potentially aliasing an
element in [begin(), end()[ before the resize(), isn't invalidated by
the resize(), so it must be taken before resize().
Add a comment so the next rewrite doesn't cause this to be mixed up
again.
[ChangeLog][QtCore][QVarLengthArray] Fixed an aliasing bug affecting
insertions of objects aliasing existing elements.
Pick-to: 6.2 6.1 6.0 5.15 5.12
Change-Id: I26bc449fa99bf8d09a19147a12a69ac4314cc61d
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Android logs have a tag/category field in each log entry,
which currently if defined by Qt, it's being included as part
of the message and not used as a tag as it's supposed to be.
This patch fixes that behavior. If a non-default category
is defined, it will be used as a tag, otherwise the application
name is used as before.
Pick-to: 6.2
Fixes: QTBUG-94708
Change-Id: Ie56187f23a47cda6d82e14fdec7c8903d3ee40b6
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
Add --restrict definition, because GHS compiler doesn't support it by default
Pick-to: 6.2
Change-Id: I6766f2fe309802ad9de333edd6ed43f7a187616f
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Otherwise touch pad and wheel + ctrl cause the window to be zoomed,
which is not what happens on desktop.
Pick-to: 6.2
Change-Id: Ic841b7c2ab56846db9f030abaeb9efa7d3dd4dcf
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Replace the hardcoded cpp exports with a generated one where it's
applicable.
Task-number: QTBUG-90492
Change-Id: Idc160b594987b2c765e75bd669aae851b4366282
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Change all outbound links in user-facing documentation.
* Reflow lines that exceed 100 cols as mandated by clang-format.
* Add unicode.org as a global \externalsite.
Pick-to: 6.2 6.1 5.15
Change-Id: I2ba1e434aa913e678406d62c2801f1a8b2d9e4f4
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
QMutexLocker is declared in qmutex.h, which is already included.
Pick-to: 6.2
Task-number: QTBUG-94407
Change-Id: I78e0630c27ef7f85feae68e98f8cdcbe4e142cd8
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Otherwise, for the first day of a negative year, we'd get an invalid
day of the week (required to be in the range 1 through 7).
This is a follow-up to commit 1f4b237dad.
Change-Id: If1afcd42065c26d5fa5799b0cd47921a3d424dc8
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
No need to check if we're running on windows 8.1 or above.
We always are.
Pick-to: 6.2
Change-Id: I9f2e7a58631064e573725705882a603e900c7e39
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
As per the best practice laid forth in RFC-8996.
TLS 1.2 was recommended from 2008 until TLS 1.3 was released in 2018.
[ChangeLog][QtNetwork][QSslSocket] TLS 1.0, 1.1 and DTLS 1.0 are now
deprecated, as recommended by RFC-8996.
Fixes: QTBUG-92880
Change-Id: I90cebcfb07cfce623af7ac9f2b66ce9d02586b54
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Since we're no longer connected, much less encrypted.
Was done in schannel backend, but not in ST or OpenSSL
Pick-to: 6.2
Change-Id: Ia49387be0088f899a0c89091f7e468dba1c0eee6
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
With the recent change, 'system' headers gone: not in the test code anymore,
so, for example OPENSSL_VERSION_NUMBER is undefined, making the test
to select a wrong code-path - 'h2c', instead of encrypted h2.
Pick-to: 6.2
Pick-to: 6.1
Change-Id: I3b201e21fac56875c9045c7463e2ae69af4c6470
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Use autogeneratedd cpp exports in the Gui module.
Task-number: QTBUG-90492
Change-Id: Ifc5d3dd138ef9f86f6003ed9adb66a9eefdd64db
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Triggered by API review in Gerrit patch 355960.
Task-number: QTBUG-94407
Pick-to: 6.2
Change-Id: I7cafc1cc9d4b929040b53c6bf92c91d73c3b39f2
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Clear the cache when cursor theme changed.
Idealy we should subscribe root window's RESOURCE_MANAGER property
to update cursor theme via Xcursor. KDE already has a daemon
KDE GTK Configurator to sync KDE settings to GTK. Then we can
register the fallback there both for KDE and GTK changes. See also
https://invent.kde.org/plasma/kde-gtk-config
Fixes: QTBUG-94538
Pick-to: 6.2 6.1 6.0 5.15
Change-Id: Ia4de30930a0dc1dc306c61e1553970c3dab67bd6
Reviewed-by: Liang Qi <liang.qi@qt.io>
We made a signal const. This does not make sense.
Task-number: QTBUG-94407
Pick-to: 6.2
Change-Id: I372da9c045ba880f8fba48399e441b53c1683e93
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
This is a collection of SVGs provided in the process of addressing
QTBUG-38776. As of now, they are converted to PNGs or XPMs in different
resolutions, which are then built into Qt as resources that are loaded
into QIcon instances at runtime.
Task-number: QTBUG-38776
Change-Id: Ib03f82cf1b1d2dc6260845fc46ad193046aff44c
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
The QCommonStyle provides explicit pixmaps for the SP_TitleBarCloseButton
and SP_TitleBarNormalButton, but never showed the "down" pixmap on macOS
because the button has no frame, so the On state flag was never set.
Set the style states so that the "down" pixmap is used on a button that
is either pressed or checked if it doesn't have a frame. Since QIcon
only has two states, use the "On" state for both pressed and checked.
Pick-to: 6.2
Task-number: QTBUG-38776
Change-Id: Ic04070196b97a4fb66d7a2669e9894fd7960230e
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Found by clang 12:
qsctpsocket.cpp:172:56: error: result of comparison of constant 9223372036854775782 with expression of type 'int' is always true [-Werror,-Wtautological-constant-out-of-range-compare]
Q_ASSERT((datagramSize + int(bytesToRead)) < MaxByteArraySize);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~
Change-Id: I7246c3e7bb894e0d9521fffd168af11764956d8f
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
- Add information about symlinks and file metadata.
- Reflow text.
- Extract text common to both overloads to a .qdocinc file
for consistency and to avoid duplication.
Pick-to: 6.2 6.1 5.15
Fixes: QTBUG-94706
Change-Id: I3c730fd63f4018a1a573bb56751fedd2270a3247
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This should reduce the amount of fall-out from DST complications.
Also document the assumptions of QDateTimeParser's two fromString()
methods (and fix the punctuation on the QDateTime parameter).
Adjusted some tests to match.
Since only QDateTime-returning methods will show the difference, and
it's at least somewhat odd to be using those on QDateEdit or
QTimeEdit, this should have little impact on API users.
[ChangeLog][QtCore][Behavior Change] QDateEdit and QTimeEdit now
operate in UTC, to avoid spurious complications arising from time-zone
transitions (e.g. DST) causing the implicit other half to combine with
the part being edited to make an invalid result. Returns from their
dateTime() and other methods returning QDateTime (max/min) shall thus
be in UTC where previously they were in local time. QDateTimeEdit
continues using local time. The default can be over-ridden by
setTimeSpec(), as ever.
Change-Id: I44fece004c12342fe536bbe3048217d236fd97b2
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Thanks to Giuseppe for pointing it out in API change review.
Task-number: QTBUG-94407
Pick-to: 6.2
Change-Id: I3b8fb653b5efa7ded51f81aadb35d361e7dbf19c
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
QDTP's absoluteMax(), setDigit() and getDigit() simply treated
day-of-week as synonym for day-of-month.
Consequently, QDTE::stepBy() did the same.
This meant that wrapping happened at the month boundary, so would jump
within the week if it wrapped around, otherwise the up/down arrow
would "jam" at a particular day of the week when further steps would
leave the month. Instead, when wrapping, wrap round the week while
still moving the day-of-month to match, jumping back or forward a week
to stay within the month on hitting a month boundary; otherwise, stop
backwards stepping on hitting the locale-specific day of the week, or
forward stepping when the step would be to or past this first day.
Fixed various bugs found in the course of testing this.
[ChangeLog][QtWidgets][QDateTimeEdit] Corrected handling of weekdays.
Previously, changes to the week-day were simply changes to the day of
the month. Weekday fields are now handled as such: changes to them do
change the day of the month, but a change that would step past the end
(or start) of the month is adjusted to the relevant day of the nearest
week within the month. When wrapping is disabled, the locale-specific
first and last days of the week are the bounds. Formats which specify
day of week but not day of month will now preserve day of week when
changing month or year, selecting the nearest day of month that
matches.
Change-Id: I7868b000fea7a4bc17a1b5687c44bcd56d42ae90
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
In the case of a plugin, the plugin might be unloaded, and destroy its
QGuiApplication. We don't want the screen notification handlers to outlive
the application, as that results in crashes.
Fixes: QTBUG-91919
Pick-to: 6.2 6.1 5.15
Done-with: Yang Yang
Change-Id: I3a4c0fcf97b785357516d1dac34489511400f154
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
In general, QEventLoop::exec() _can_ be used as-is on
WebAssembly, provided that the event dispatcher supports
the use case.
Use cases that can work include calling exec() on a
secondary thread, or calling exec() on the main thread
if asyncify is used.
Some use cases will still require special casing for
Wasm, such as the non-asyncified QApplication::exec(),
but that can be handles closer to where the workarounds
needed, for example in QApplication.
This removes the partial support for nested event loops
on the main thread, which did not really work. Also,
we no longer call emscripten_force_exit() on QEvetLoop::exit(),
which makes it possible to exit a top-level event loop
without exiting the process.
Task-number: QTBUG-70185
Change-Id: I3a28f41b8547ed3ba1bdf6a835e6662483e34449
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
This is the wrong event: exiting the app here it is not
compatible with the back/forward cache for instance. See the
the MDN docs for the “Window: unload” event.
Instead, make the Qt default be that we assume the
app process will live “forever” until the browser
terminates it, much like modern process handling on
e.g. iOS.
We may want to come back to app lifecycle handling
at a later point. This might require changes to application
code: implementing main() in such that it supports
clean shutdowns and auditing showdown code to make
sure it is web-compatible.
Change-Id: I0f32026a3af76c9cc79e3aab31e8aaed7b8f8023
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
This commit adds an opt-in mechanism to kill type-unsafe functions
and implicit conversions of QFlags, therefore removing an entire
category of bugs that QFlags itself is supposed to protect against:
QFlags<E> f;
f == 3.14; // OK; f->int, int->double, then operator==(double,double)
f & UnrelatedEnum; // OK if of unscoped enum, calls operator&(int)
f &= 123; // calls QFlags::operator&=(int)
int i = f * 42; // f->int, then operator*(int, int)
Thankfully, operator+ and operator- had already been deleted.
By defining QT_TYPESAFE_FLAGS one:
* disables operators taking (u)int, forcing the usage of an enumeration
or another QFlags object;
* turns the implicit conversions towards integers/bool in explicit
(one can always use fromInt/toInt instead);
* adds a convenience set of (in)equality operators against literal 0,
in order to keep code like `(flag & bit) == 0` compile. This set can't
be added normally otherwise it would add ambiguity;
* adds the unary operator~(Enum), turning it into a flag. This is
a source incompatible change, in general, so it's opt-in.
This is a Qt-internal macro at this point. It can't be offered to users
yet because we need to fix some public API flaws first: in some places
(e.g. QPainter::drawText) we ask users to do type-unsafe manipulation
of flags. A user enabling the macro wouldn't be able to properly use the
functions in question.
This macro will be enabled in a follow-up commit.
Change-Id: I796f2256b446bafc12cdcbaf7de417d12bd3619e
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Which is not a trivial class.
qstringbuilder.h: In instantiation of 'static void QConcatenable<const char16_t [N]>::appendTo(const char16_t*, QChar*&) [with long long int N = 6]':
qstringbuilder.h:402:35: required from 'static void QConcatenable<QStringBuilder< <template-parameter-1-1>, <template-parameter-1-2> > >::appendTo(const type&, T*&) [with T = QChar; A = char16_t [6]; B = QString; QConcatenable<QStringBuilder< <template-parameter-1-1>, <template-parameter-1-2> > >::type = QStringBuilder<char16_t [6], QString>]'
qstringbuilder.h:460:52: required from 'QString& operator+=(QString&, const QStringBuilder<A, B>&) [with A = char16_t [6]; B = QString]'
/home/tjmaciei/src/qt/qt6-release/qtdeclarative/src/qml/jsruntime/qv4qobjectwrapper.cpp:1762:75: required from here
qstringbuilder.h:338:15: error: 'void* memcpy(void*, const void*, size_t)' copying an object of non-trivial type 'class QChar' from an array of 'const char16_t' [-Werror=class-memaccess]
Change-Id: Iddb933f281024939b6acfffd1689cf320c84873c
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
The spurious warning is not emitted any more by GCC 10 / 11.
Even if it's still emitted by earlier GCC versions, now it's no longer
an error.
Change-Id: Ia8bf3e10905909c097ecc025bf89f818410a8dae
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
If we disregard the precision we may read a very large string that we
subsequently discard. Furthermore, people use this to read
non-null-terminated strings, which randomly crashes.
Pick-to: 5.15 6.1 6.2
Change-Id: Ifa255dbe71c82d3d4fb46adfef7a9dc74bd40cee
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Like AESNI, RDRAND is an optional extra feature that is not always
enabled in all parts. Probably something to do with export restrictions,
but I've only seen that in low-end parts.
Drive-by removal of "AES" where it was no longer relevant.
Pick-to: 6.2
Change-Id: I7246c3e7bb894e0d9521fffd168af3fc0fb638a1
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Use nullptr instead of 0 for null pointers.
Compare OCIHandleAlloc() return values to OCI_SUCCESS rather than 0.
Initialize instance variables in the class where possible, rather than
in the constructor. Conform to coding style o long lines and braces.
Assert pointers are null before allocating and overwriting them, so we
might have a chance of catching leaks.
Change-Id: Ia885ec18f46de5219a51fb6f9f23f474b3046585
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
QOCIResult::~QOCIResult() was doing part of the tidy-up for
QOCIResultPrivate, whose own destructor took care of the rest.
So move that part to the private, where it makes more sense.
Also correct an error message in part of the private's existing
tidy-up and eliminate a needless local variable.
Change-Id: I09a51c72afd7a30bcee7f6127c59d703650f1c41
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
If d->sql is non-null, it gets freed; later in the same function, it
gets reallocated, unless the query is empty, in which case the
now-freed value was still recorded, so that later clean-up might find
it and mistakenly think it needs to be freed again. Clear when freeing.
Pick-to: 6.2 6.1
Change-Id: I8d37d2ba1fcaa320916eaf30dceaa720bbf62f38
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
Transaction handles were allocated but nowhere freed. Thanks to Stefan
Latsch for pointing this out and suggesting the fix. Make the handle
yet another member of QOCIDriverPrivate so that close() can free
it. At the same time, also free the service context handle d->svc when
failing do open(); and shuffle the order of frees to be the reverse of
the order of allocations.
Fixes: QTBUG-94246
Pick-to: 6.2 6.1 5.15
Change-Id: I45818ada6d884b06028056d28635390a300e2def
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
MetaMethods is a std::vector, so we should avoid copying it. Add
strategic std::move()s and pass to the TestFunctions ctor by value,
not cref.
Change-Id: Iaa2879ae427b9603a7abaab0e3015556d9c247fc
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Make Emscripten generate a global constructor function
("createQtAppInstance()") instead of a global javascript
module object.
This enables more fine-grained control over module
instantiation; previously the module object would be
created when the runtime javascript was evaluated, and
the number of emscripten module/instances was limited
to one per page.
Set EXPORT_NAME to “createQtAppInstance” which avoids
collisions with other non-Qt Emscripten modules on
the same page. A further improvement would be to include
the app name in EXPORT_NAME, but this is not done at
this time.
Update the code in qtloader.js to call the constructor
function instead of working on a global module object.
The qtloader.js API is functional before the wasm and
Emscripten modules have been instantiated; store properties
and forward to the Emscripten module when it's created.
Change-Id: I12c49a5b9a4a932bbc46fcc5e5ecc453fd0fe7f0
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
Depending on build options, the module can have a different
name, or be a non-global object. We were already using
module_property in many places, but some were missing.
In the case of the clipboard code, there is actually
no need to export all of the C++ functions to JavaScript
and then resolve them from the module; instead call them
directly.
Change-Id: I83aa3ad01ad961d48e21f0994e0c205d833cbe8a
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
Remove event listeners on shutdown. For emscripten
event callbacks this can be done by passing nullptr
as the callback, for DOM event listeners use the
“removeEventListener” API.
Change-Id: I5a32a6a8feb906082db5ef3d0a0cd7ecb3b54292
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
m_compositor and m_eventTranslator are owned by the
screen object and can be held in a unique_ptr.
Pick-to: 6.2
Change-Id: I7d5e19e7ac6f762f360d6af0fc9500e6964f737e
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
We can get better performance if we omit unlocking the mutex before
relocking it in startAsyncRead().
Change-Id: Ia012a71b95876d4f90c1dc4b7db5d7b267fca7a6
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
An initial EOF check is not required here because the code below
correctly handles this case. Also, the condition '!pipeBroken' means
that the pipe reader is in the 'Running' state.
Change-Id: I608d932c4e38f8224d9e655272e61295e55414e0
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
The setlocale call will only give useful results if the program
had previously set the current locale using setlocale...
See also "Compose Locale" section in xkbcommon doc:
https://xkbcommon.org/doc/current/group__compose.html#compose-locale
Fixes: QTBUG-85529
Pick-to: 6.2 6.1 6.0 5.15
Change-Id: I65b1ac86ea54445bc3a2e1707df79bd9f732ab46
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
If __qt_internal_propagate_object_library is used to propagate an
imported object library we assume that the library is already compiled
and no need to apply properties that may affect compiling and further
linking of the target.
Amends 3329212815
Pick-to: 6.2
Change-Id: I2bd03264e286439fbed9067fa2c0a5c4a0097856
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
The code uses std::numeric_limits but is lacking the appropriate include
Pick-to: 5.15 6.1 6.2
Change-Id: I41fa5ac4d8c4e06f35b5b1551ef2ad8417df80bd
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
The compiler generated ones are broken. The RO5 exists for a reason...
Change-Id: Ibaa5322a7a1ad4ad06bd00e9d1c21bbbea6eb08c
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Both the call to setProcessState(QProcess::NotRunning) and deleting
the PROCESS_INFORMATION structure are redundant here. All this work
was done by the previously executed cleanup() call.
Change-Id: Iaf89f5edd2b661008a479d154e68974621b1b1eb
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
As with other network events, we must also ignore these notifications
until WM_QT_ACTIVATENOTIFIERS message is received.
Fixes: QTBUG-82835
Pick-to: 6.2 6.1
Change-Id: I0740bf22e8d1cb0e8b4eba7fc1a27ffe669973ff
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Replacing a call to waitForWrite(0) with checkForWrite() changes
nothing in logic, but saves one system call. As a result, unused
functions in the QWindowsPipeWriter class have been removed.
Change-Id: I34ec6310d9659f59a720056b9be54e31f2193116
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
The linking logic of object libraries should be reusable outside of the
resource context. This introduces a
__qt_internal_propagate_object_library function that prepares all the
necessary genexes to link and propagate the object library to the
end-point executable.
Rename resource object finalizer API to make the naming more generic
to object libraries of any kind.
Amends 5fb99e3860
Pick-to: 6.2
Task-number: QTBUG-93002
Task-number: QTBUG-94528
Change-Id: I69d0f34c0dadbd67232de91035aaa53af93d1fa1
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
As QWindowsPipeWriter now maintains a chunk queue, there is no need to
use the internal QIODevice buffer and wait for the previous operation
to complete.
This also allows us to get rid of the stdinWriteTrigger timer; however,
as a trade-off, QWindowsPipeWriter now needs to accept data even before
a handle is assigned.
Change-Id: I17fe0e36a6165fe05100bfab3fe01fc0d880d617
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
The transfer occurred in Qt 5
Pick-to: 5.15 6.1 6.2
Change-Id: Id3428809d89c804112d9dc02f2a476cb03bd2c98
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Without the workaround, and when using a Core GL profile, we hit a code
path in QSGOpenGLDistanceFieldGlyphCache::resizeTexture() that produced
corrupt glyphs on M1 hardware.
We fix this by enabling the workaround, so that the user doesn't have to
set QT_ENABLE_GLYPH_CACHE_WORKAROUND themselves.
None-Core contexts do not have this problem, but the logic in
QOpenGLContext does not account for recreated contexts with different
formats, so we can't limit the workaround to Core formats only.
With the unified memory architecture of the M1 hardware, the workaround
should have limited negative effects.
In Qt 6 this is not a problem, since Qt Declarative effectively always
uses the workaround code-path, but it's worth recording the fact that
we need the workaround.
Fixes: QTBUG-89379
Pick-to: 6.2 6.1 5.15 5.12
Change-Id: Icfd8b8b23c0dcda3fea8663d81d0e225134eec5e
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
As a result, we can refrain from using the deleteLater() technique in
QProcess and avoid long-lived soft leaks in blocking applications.
Change-Id: I89e02b02551a668b995ad3d12d3ce9575b2dd9dd
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Changing anything on a QWindow's QSurfaceFormat has zero and null
effects once the underlying native window has been created. Letting
QWidget update the format is wrong in this case, because we always
expect that the value returned from QWindow::format() reflects
reality.
(reality being the settings with which the underlying native resource
was created, which is typically frozen after QWindow::create(), not
the state of some QWidget attribute. There are certain exceptions to
this, such as when preparing to recreate the underlying native window,
in which case one will want to update all relevant fields of the
format based on the current values of the widget attributes, which is
exactly what QWidgetPrivate::create() implements, and that's good.)
Such a mismatch can have fatal consequences when OpenGL and friends
are involved, but this always depends heavily on the platform and
windowing system. For example, claiming that the alpha buffer size is
0 when the native window was created with 8, or vice versa, can break
OpenGL-related code (both in Qt itself and in applications), that
tries to create a QOpengGLContext configured based on what
QWindow::format() returns. If that format describes settings that are
incompatible with the actual underlying native window, we end up with
the classic Invalid pixel format, EGL_BAD_MATCH, and alike errors.
This is exactly what is happening when a QOpenGLWidget (or
QQuickWidget) is placed in a QDockWidget where one of the ancestors is
forced to native (winId() was called or WA_NativeWindow was set). When
undocking, various code paths in QWidget will try to update the opaque
flag of the widget, which in turn calls updateIsTranslucent. Now, if
this function unconditionally changes the alphaBufferSize in the
QWindow's QSurfaceFormat (even though this is completely futile to do,
it has no visible effect in practice), we get the problem described
above: rendering breaking down due to OpenGL contexts created with a
pixel format incompatible with the native window.
Prevent all this by not touching the format once the QWindow has a
QPlatformWindow. This is the right thing to do, regardless of the bug
in question: a window's (or context's or any other native resource
wrapping class's) format must describe the underlying native resource
and must never deviate, unless we are preparing to create a new native
resource underneath.
When it comes to the autotest, this changes the test added in
555661b625c40f21a6a3e4c73e928a6e8a46db20: the autotest logic is
inverted because what we should test for is that the QSurfaceFormat
stays untouched once the application makes a - futile - attribute
change on the widget.
Fixes: QTBUG-85714
Pick-to: 6.2 6.1
Change-Id: I7bf90711867e8a0fd474895625bf9530a7821fd5
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
When QPainterPath was used for RTL text, either directly or because
the target text size exceeds 64 pixels, we would pass true for
"isRightToLeft" to DirectWrite, causing it to do adaptation internally
for this. But the RTL layout had already been handled by Qt, so we
would essentially reverse the layout twice and also move the text
to negative X coordinates.
Passing false instead fixes this, as it will then just use the
positions we pass in blindly.
Fixes: QTBUG-94175
Pick-to: 5.15 6.1 6.2
Change-Id: Ie9a47e56e97fc867ede10ab21ac5e3f003ddcacb
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Remove the configure.json and configure.pri files that
were used for the qmake-based configure.
Remove the .prev_*.cmake files that were a by-product of
configurejson2cmake.py.
Pick-to: 6.2
Task-number: QTBUG-89536
Change-Id: Ie827562f7fd2513d59f69234d77b8b93124ea78e
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
When the element you want to erase is the last element AND the
next element (element 0), when rehashed, would be relocated to the last
element, this leads to the state below. Which is similar to a test in
tst_qhash for some seeds.
auto it = hash.begin + (hash.size - 1)
it = hash.erase(it)
it != hash.end
By forcing the iterator to increment if we were erasing the last element
we always end up with a pointer which is equal to hash.end
Befriend the tst_qhash class so we can set the seed to a known-bad one
Pick-to: 6.2 6.1
Change-Id: Ie0b175003a2acb175ef5e3ab5a984e010f65d986
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Since memReq is initialized inside the loop, codechecker
complained that we might use uninitialized data if count == 0.
So we assert that this is not the case to get rid of the
warning.
Change-Id: I82152942d2bb61723e9e41489c87bfde9f8bec15
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
When calling `setStyleSheet` with property `qproperty-styleSheet`,
`QStyleSheetStyle::polish` will call`QStyleSheetStyle::setProperties`, and then`QStyleSheetStyle::setProperties` goes on to call `setProperty`.Because there is property `qproperty-styleSheet`, it will update stylesheet by calling QStyleSheetStyle::polish`.
This causes the recursive call to crash.
Fixes: QTBUG-94448
Pick-to: 5.15 6.2
Change-Id: I79c51192a939b0b62e5b1d0dcc90d38f79e28222
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
QAbstractItemView opens the editor and changes focus in response to the
first QEvent::InputMethod event. Changing focus however cancels the
current composition, so the key press is lost and needs to be repeated by
the user. What QAbstractItemView does is probably not that unique, so
fixing this there - if possible at all - is not a general solution.
In the platform specific input method handling code, we can generally
discover that the focus object changed in response to the InputMethod
event that gets sent to the focus object. On macOS, we can then pass the
key event to the input method once more, which works fine.
On Windows and X11, the situation is more complicated. That the focus
changed is easily discovered, but re-sending the key press in such a way
that the input method responds doesn't seem possible. On Windows, using
SendInput simply delivers the exact key to the focus object, without
starting the expected composition.
On X11 with IBus, it should be possible to call ProcessKeyEvent again on
the IBus input context when we discover in filterEventFinished that the
focus object changed while delivering the event. However, any attempt to
do so has no effect.
So, for now only fixing this for macOS.
Task-number: QTBUG-54848
Change-Id: I0f7b786cfa57430e6a1e7d605415265cf53eb675
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Directly writing to the underlying property storage has the potential of
breaking all kinds of internal invariants. As we return QBindable in
the public interface, we should not grant callers access to the
internals of the object.
Pick-to: 6.2 6.1
Change-Id: I737ff293b9d921b7de861da5ae23356c17690b78
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Andreas Buhr <andreas.buhr@qt.io>
We dont really need those after functions definitions.
Change-Id: I41f010a223977c55d4b7271ac3ebdc1bb9047b09
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
This is needed for a change in qtdeclarative to allow building the
Q_IMPORT_PLUGIN-containing object library initializer of a qml plugin.
Show an error if the qml plugin has no class name, it's needed for
plugin initialization so it's mandatory to have a class name.
Show an error if a class name is not found when computing the import
macro for a plugin (both for a regular qt plugin and a qml plugin).
When querying for the class name of a target, query both a Qt6::
prefixed target as well as a non-prefixed one, with the Qt one
taking precedence.
This is to allow querying the class name of user project created qml
plugins.
Currently regular qt user plugins don't use the object library
initializer approach. This will likely be revisited in the future.
Pick-to: 6.2
Task-number: QTBUG-92933
Change-Id: I46417471a7d8b49651e6821f7b28e7a9d44c2557
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Repos should have migrated by now and the function should not be
advertised as a public one.
Pick-to: 6.2
Task-number: QTBUG-88763
Change-Id: Ica5bc55670a17a28c0022f78c126a3a8a8ffdeb5
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
For now, it's not meant to be called manually. It's called in
qt_add_executable automatically for iOS.
Amends 4d838dae5a
Pick-to: 6.2
Task-number: QTBUG-88763
Change-Id: I90dfcf86f53a3c8e48a813435f7400db232b21f4
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Due to capacity() reporting the size of all allocated space, this is
somewhat inconsistent with what QVector::capacity() in Qt5 provided,
due to Q6List being double-ended. So let's document this better
Task-number: QTBUG-92941
Pick-to: 6.2
Change-Id: Iba46389121e721a8d21f0344b154f41c2c245867
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
msvc2019 emits:
warning C4244: 'argument': conversion from 'qsizetype' to 'int',
possible loss of data
Change-Id: I286c0d453f69654ba58f071aee28e557b9f9058d
Pick-to: 6.1 6.2
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
Avoid multiple re-reads of xml files, for example in dolphin,
which displays MIME type comments as file types.
Change-Id: Ia124930e2a1fdc99d8a4d160f2288a00f55e0e8e
Reviewed-by: David Faure <david.faure@kdab.com>
A misunderstanding seems to have caused several files to be compiled
with extra runtime arch options.
We need to disable multi-target functions though, because it doesn't
work with clang-cl headers.
Task-number: QTBUG-88081
Task-number: QTBUG-88434
Pick-to: 6.2
Change-Id: Ic5829540f9007428c80f9a7bd46af35540745ccd
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
QSet is internally implemented by a QHash. Therefore the change in
reference stability affects QSet, too.
Pick-to: 6.1 6.2
Change-Id: If1879d5a027211bca0beeff16ffbc77f2f4fce26
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Mention change of behavior introduced by 89f7a2759c in the porting
documentation.
Change-Id: I3c282362f5852cc7768e6655fc7b3901d68f2b10
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
It's only Qt::MiddleButton in Qt 6.
Pick-to: 6.1 6.2
Change-Id: Ia68bad910c617993e30e3ed1e117192469ec50eb
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
When a signal/slot connection is broken, it gets added to the
sender's list of "orphaned connections", to clean up later.
This cleanup happens when the sender gets destroyed or as soon as
it emits any signal.
This may cause soft memory leaks in case receivers get destroyed,
and the sender is a long living object and doesn't emit signals
for a while (e.g. QThread).
For some reason, an explicit disconnection cleans up the list
(either by using the QMetaObject::Connection object, or in case
of string-based connect, using a string-based disconnect). This
raises lots of doubts about why having this list in the first
place.
Fix the soft-leak by cleaning up the orphaned connection list when
destroying a receiver.
Note: I still believe that we shouldn't have any "orphaned"
connection list, and rather cleanup on disconnect/deletion
(otherwise, emitting a signal may cause a CPU spike because it
triggers a cleanup). If we allow for any "impredictability" during
signal activation we're just admitting that signals/slots aren't
suitable for e.g. low-latency codepaths. That's why I'm not marking
the problem as fixed.
Original-patch-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Task-number: QTBUG-88248
Task-number: QTBUG-87774
Pick-to: 6.2 6.1 5.15
Change-Id: Id25f67a45dff49f740132a44d36e88740eb12070
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This does not fix all data races that we have in the system yet.
One major issue is the virtual disconnectNotify(), that can be
called from any thread and thus is inherently problematic, as it
can collide with the object getting destroyed at the same time
in another thread.
Pick-to: 6.2 6.1 5.15
Task-number: QTBUG-88248
Change-Id: I9d841eb363b7e4f0de1657aeb8f5340d0fd55190
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This function is/will be used in a few places where we already have a
lock. Temporarily unlocking and relocking invites all kinds of troubles.
By adding a flag we can instead tell the function that we already hold
the lock.
Pick-to: 6.2 6.1 5.15
Change-Id: Ibca089de61133661d5cd75290f2a55c22c5d013c
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Copying a QOrderedMutexLocker is questionable, and would currenly easily
lead to UB. Therefore we delete the copy ctor and copy assignment
operator, and implement well-behaving move operators.
In addition, provide an explicit dismiss method for cases where we don't
want the locker to unlock the mutexes, as they have been manually
unlocked (this could have been implemented previoulsy by using the copy
assignment operator).
Pick-to: 6.2 6.1 5.15
Change-Id: If2a888710e1c74277b28fd3e2939ab26fff0c7ae
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
For user projects we run the static link order check once
'find_package(Qt6 ...)' is called.
If linker can resolve circular dependencies between static libraries
and object files we set the _qt_link_order_matters property of the
Qt::Platform target. This indicates the use of finalizers is not
required and we may rely on CMake-base propagation of resource
libraries and resource object files.
If linker could not resolve circular dependencies depending on
the _qt_resource_objects_finalizer_mode value:
- Finalizer will be called and collected resource objects will be
linked to the target directly.
- Finalizer will be omitted and resource objects will be linked
using the target_sources function implicitly. This only
propagates resource one level up if consumer links the static
library PUBLICly, but all symbols will be resolved correctly
since object files are placed in the beginning of the linker line.
In the CMake version 3.21 we expect that CMake will take care about
the order of the resource object files in a linker line, it's
expected that all object files are located at the beginning of the
linker line.
TODO: Need to confirm that the CMake 3.21 meets the expectations.
Amends 4e901a2f99
Pick-to: 6.2
Task-number: QTBUG-93002
Task-number: QTBUG-94528
Change-Id: Ia68976df8182d3d3007b90c475c1e3928a305339
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
The kludge previously implemented for handling dates outside the
supported time_t range, by asking for a corresponding date in a year
in the range, had a comment remarking that this is broken due to the
wrong day of the week and, consequently, the placement of DST
transitions, e.g. those scheduled by the last Sunday of a month,
happening on different dates in the year asked about and the in-range
year passed to the system time_t functions.
This can be handled by selecting a year in the time_t range which has
the same pattern days of the week (and length of the year, i.e
leap-ness). That may (particularly for leap years) need to select a
year far from the end of the range (and there may be a change to the
zone's rules between the selected year and the end).
Change-Id: Ia353b2cc7b7d266b7abf80e37cac61544ce95c2d
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
System V semaphores are not supported in sandboxed applications,
so when Qt is configured with App Store compliance, or the user
requests POSIX IPC explicitly, we use that instead.
https://developer.apple.com/library/archive/documentation/Security/Conceptual/AppSandboxDesignGuide/AppSandboxInDepth/AppSandboxInDepth.html#//apple_ref/doc/uid/TP40011183-CH3-SW24
As the shared memory name limit on Apple platforms is very low,
we have to skip the existing logic for naming, and instead use
a truncated hash of the key. This should still be fine for
avoiding any collisions in practice.
An explicit check for the ENAMETOOLONG error has been added to
catch any cases where they key goes beyond the allowed length.
Sandboxed applications also have an extra requirement that the
key must include an application group identifier. This requirement
has been pushed up to the user and documented, as we don't have
enough information in Qt to know which identifier to use.
Both tst_QSystemSemaphore and tst_QSharedMemory work as before
with both sandboxed and non-sandboxed applications, after removing
some assumptions in tst_QSharedMemory about System V behavior.
Fixes: QTBUG-91130
Change-Id: Iaf1edb36a5d84d69e42ec31471a48d112faa8c6a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The documentation says that if we "pass a URL to the main
executable of a bundle, the bundle as a whole is generally
recognized.". By passing the executable instead of the
bundle we include command line applications that don't
have a app bundle folder (but have an embedded Info.plist).
Pick-to: 6.2 6.1 5.15
Change-Id: I3a2f145c1ec6e16607e9c04baf08678d5dea0b81
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Abort the system move/resise at XCB_INPUT_TOUCH_END.
Limit the behavior only on supported platforms, such as KDE and
OpenBox.
Change-Id: I53c86979ca56f4de8c5cf2807f781abdad6987b2
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
We can't get mouse release event from master pointers after
QXcbWindow::doStartSystemMoveResize() which calls xcb_ungrab_pointer(),
it looks like most X11 WMs work as that.
So we try to get mouse release event from slave pointers.
Based on https://specifications.freedesktop.org/wm-spec/1.4/ar01s04.html
, we need to send _NET_WM_MOVERESIZE_CANCEL when we get mouse release
event.
Task-number: QTBUG-91077
Change-Id: I01e74a01c87b381ee7cd6f20d51a1fa61c0e98fc
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Amends 16f927a4f1.
At the time the original change was written, QStringTokenizer
had not been integrated, yet.
Change-Id: I83c31d816199bc48c4baea855d13cbf9eda9aaa2
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
PAGESETUPDLG's hDevMode reports the page size and orientation selection
of the user, so read that data to get accurate results.
Otherwise, the page size of a landscape page wouldn't match any known
page format, and we'd end up with a custom size that would not be valid
for the preview, breaking the preview UI's orientation state.
Reuse the helper from QPageSize to map Windows page size ID to our own
enum.
Fixes: QTBUG-93764
Pick-to: 6.2 6.1 5.15
Change-Id: Ib9a848619e3ba8780264ad76ed43c4fffae6b07f
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
Since there is no header then the cells appear with no actual border so
it can look a bit strange without it. This ensures that the border is
at least shown when there is no header to represent it if the style hint
is turned on. This gives an option for those who want it to have it
turned on.
Fixes: QTBUG-85523
Change-Id: Ib94874bddddd31738fbcd41c6f77a2e0fa2ef443
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
The iOS port creates one QIOSViewController per connected
screen. And each view controller listens for changes to
the application state. The problem is that we never
disconnect this connection again. So if a screen is removed, and
the corresponing view controller is deallocated, the
connection is still kept alive. This will cause crashes to
occur when the signal emits, since the slot will then be accessing
deleted memory.
Fixes: QTBUG-76948
Pick-to: 6.2 6.1 5.15
Change-Id: I758e51af9297cd62de193aae825f4475a2c7c3e5
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This reverts commit 03eb44394e.
Reason for revert: This breaks the dependecy update round in dev now. The revert can be reverted again after
1) Full dependency round is succeed in 'dev'
2) Android extras submodule has been removed from qt5.git#dev (7aa41d22fa485f212aebbef500ea91921c7bc38b)
3)qtmultimedia has been ported to use new api instead of this old one
4) Full dependency round with all above is succeed in 'dev'
Change-Id: I23241d2a90307074ecfc9573d2b58baba1874cfc
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Fixes build issue "no instance of overloaded function "qHash" matches
the argument list" on INTEGRITY
Pick-to: 6.2
Change-Id: Ia1273587840d55199846dc64d487d194f9a4d565
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Fix various C4244 warnings with the MSVC compiler for 64 bit
Proposed upstream fix:
https://github.com/mity/md4c/pull/162 for an upstream fix,
Pick-to: 6.1 6.2
Change-Id: I2ac1c17febb4fb269ac7244458f4cd90ce8b8e49
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Update the bindable property docs to explain how to deal with virtual
getters and setters.
Task-number: QTBUG-92994
Pick-to: 6.2
Change-Id: I6c29011817e83623414b39afee0f39ad4cc5c1c9
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
The link, allegedly to the pcrepattern(3) man page, was in fact a link
to a .txt file giving an over-view of the pcre library, but not
describing the pattern syntax. Link, instead, to the actual HTML
version of the pcrepattern(3) man page.
Change-Id: I566fa5185b909bceb51dfe9f253c98f858f6a182
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Previously, it went direct to QTestResults::addFailure() without going
via the checking for expected failure. Add QTestResults::fail() to
take care of this checking, as for verify() and compare().
Tidied up the code implementing expected failure and QFAIL(), while I
was about it. Adjusted an existing test to verify that expecting a
QFAIL() works, by using QFAIL() instead of QVERIFY(false).
Remove the QVERIFY(false) whose comment brought this to my attention.
[ChangeLog][QtTestLib][QFAIL] QEXPECT_FAIL() now correctly anticipates
a subsequent QFAIL(). Previously QFAIL() counted as a fail regardless.
Change-Id: Icc28cf70e5ff3006363791ea03aa01f2f591eb71
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
The tool used QCoreApplication::translate(), but did not attempt
to load a QTranslator. Use QStringLiteral() instead.
Pick-to: 6.2
Task-number: QTBUG-75870
Change-Id: Ib3c6b1893889a82b186a310c0c725dbf1a1885b3
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
There are multiple macros used to get/check and return with error
in case the requested object is not valid. These macros are defined
in multiple places and duplicated. This patch defines them in one place
and then they can be reused.
This macro expects a "char m_qtTag[]" variable to be defined in
the scope where the macro is used. That variable is used as a tag
for the error message printed when an error occur.
Another consecutive patch use the new macros over qtbase code.
Pick-to: 6.2
Change-Id: Ibb8558d1229cec6dad9ec9da6e2635ea54fd18d6
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Move QT_END_NAMESPACE macro out of the #ifdef definition
Pick-to: 6.2 6.1 5.15
Change-Id: I26b4e263b5ae0acebf035dbfe8c7e287cd740190
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
It may change in the future.
Change-Id: If65bf690b12d4e6474557d7a48567941b18413bf
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Clazy warns about the fromUtf8() call with a constant argument, for
every use of the macro, so hide the stuff behind a compiler firewall.
Also fix the format injection error by using QLatin1String::arg()
instead of QString::arg() chaining.
Change-Id: I4bb4d4af56443540efc0c38c75819aa152a441fc
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Also, a minor clean-up: isMatchingHostname() overload
was never used, deleted (and it could not be used safely,
since it requires the name to be normalized first).
The file (qtlsbackend.cpp) was re-shuffled, to have
backend on top of the classes which this backend
is factory for.
Pick-to: 6.2
Pick-to: 6.1
Fixes: QTBUG-91929
Change-Id: I435c69b167f57f7c3f76e34449c52f665dc6f7c2
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
It's no longer used today.
And while we're at it: delete or fix typos in some nearby comments
Change-Id: Ib52268eeb936e71d6c09aece2e0833b99309ef2d
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
SETTINGS for max concurrect number of streams is 'one direction' - this
is how our peer conveys the possible number of streams _we_ can open,
not _them_. If they choose to have it unlimited - let it be so.
It's possible to send 0 as maximum number, also, it's possible to
reduce the maximum compared to initial at some point - then I have
to avoid integer overflows.
Pick-to: 6.2
Pick-to: 6.1
Pick-to: 5.15
Fixes: QTBUG-94470
Change-Id: Ia02247acbaedd70998a4cab02082ba10f45cf78c
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Previously they all returned the runtime versions and one string
function did not include the backend's name.
The NTDDI_VERSION macro is what we use to base certain
feature-availability on during compilation so it makes the most sense to
use for the build-string.
Pick-to: 6.2
Change-Id: I96b025a5a05c0bbb4db3d5ee68656e0df5f4eb07
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
QByteArray creates copies of data, but we usually don't need the copy
and a view, for comparison or fetching substrings, is enough. So instead
we use QBAView and QLatin1String (when we need to go through
QStringTokenizer).
Change-Id: I12e0bd8777fc63f676b9371abfd345fab1046c44
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
...if changed after the widget is shown.
Just documents the current state of things.
Task-number: QTBUG-60822
Task-number: QTBUG-59126
Pick-to: 6.2 6.1
Change-Id: If8281dce4457707a1673aca7a50744d8b231b030
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Use integral consts instead of enums for algorithm constants;
handle QChar::Decomposition as such, rather than as an int;
pass QChar pointers to cut down on reinterpret_cast<>s;
use char32_t instead of uint for UCS4.
Change-Id: Ia535128602065392a1b46fbb0a81572026be5d00
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
A mouse press that transfers focus from an open editor back to the view
will close the editor. To prevent that the corresponding release then
opens the same editor again we need to know that the closeEditor call
was caused by the mouse press. Since Qt first generates the focusOut
event, and then delivers the mouse press, we have to start a zero-timer
to check whether we are in the same event delivery process. If so, ignore
the corresponding release.
Add test case that simulates that chain of events.
Fixes: QTBUG-20456
Pick-to: 6.2 6.1
Change-Id: I28fa32bfbc776db207c594c329961f575ae58ea9
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
Since massageAdjustedDateTime() has to split LocalTime from TimeZone
and call {local,zone}MSecsToEpochMSecs() in any case, its call to
refreshZonedDateTime(), via checkValidDateTime(), was duplicating that
work uselessly. So handle UTC and offset-from-UTC separately with a
call to refreshSimple and handle local/zone time by inlining what
remains of refreshZonedDateTime() aside from the duplication.
At the same time, recent reworking of qt_mktime() make
localMSecsToEpochMSecs() handle its DST-hint the same way
zoneMSecsToEpochMSecs() has long done so, to take care of the intended
handling of DST gaps and repeats.
Change-Id: Id6bef7dd0f8983c3e923f4580a62a76aa6fcb810
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
After 79fd1cb2c6 the methods for running
QtConcurrent algorithms in the blocking mode aren't used anymore. Since
ThreadEngineBase and ThreadEngineStarter classes aren't meant to be used
externally, it should be fine to remove startBlocking() methods now.
Removed the unused code and adjusted the tests accordingly.
Change-Id: Ifb13820ce207869d6f720bcb5be8d35bb355fe33
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
qtbase\src\corelib\thread\qfutureinterface_p.h(180): error C2039: 'setException': is not a member of 'QtPrivate::ExceptionStore'
qtbase\src\corelib\thread\qexception.h(109): note: see declaration of 'QtPrivate::ExceptionStore'
Change-Id: Id746b87af3f88d91c473f6a3d986dc0f022dfa2f
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
We updated to v39 in 6235893d54
Task-number: QTBUG-94410
Pick-to: 6.2 6.1 5.15
Change-Id: I73d539d677c9066dc5ceb6b4fc65fb544f39ac7f
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Remove a conflicting definition of the same operator from
qrhi.cpp. Who knows how many ODR violations this hidden gem may have
caused...
[ChangeLog][QtCore][QDebug] Can now stream QVarLengthArray objects.
[ChangeLog][QtCore][QVarLengthArray] Can now be output via QDebug
streaming.
Change-Id: I12f7670e32029fa8c96b446e9a98ebf3b9732d0d
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
It's deprecated. Port some unnamed enumerations (used only to
declare constants) to constexpr integers instead. Apply qToUnderlying
as needed.
Task-number: QTBUG-94059
Change-Id: Ifaa64ece966ce08df40dc71ffcfa7ac038110e0b
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Both code paths (write() for the main thread and waitCallback() for
the worker thread) use the same logic when processing write results.
To avoid code duplication, consolidate the common part for both threads
in the startAsyncWriteLocked() function.
Change-Id: Ie2663b2ed221e2797a1ecbdb3fcee0ee8f030cc0
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Some of the data members related to progress reporting (min, max and
text) aren't used when user doesn't want manual progress reporting, so
the data for them can be allocated on demand, when the user explicitly
sets them. Note, that we still need to always create other related data
(current value and progress timer), since in the non-manual mode
progress is still reported by incrementing the current value each time
a new result is reported.
Task-number: QTBUG-92045
Change-Id: I1e5bd17de2613a6ea72ccff0029812f67686708b
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
QFuture doesn't need both at the same time, calling QFuture::result(s)
either returns a result or throws an exception. Store result and
exception stores in a union, to reduce the memory.
Also added a note for making the ResultStoreBase destructor non-virtual
in Qt 7.
Task-number: QTBUG-92045
Change-Id: I7f0ac03804d19cc67c1a1466c7a1365219768a14
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
A follow-up to 6ec3321875 where the
function was optimized using a hand-rolled lazy-split on a QBAView.
Now that QLatin1String::indexOf(QLatin1String) has been optimized we can
use QStringTokenizer instead.
Change-Id: I30b15d309e7c364c0a4dafe31651b39ea14db7e5
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Rather than when the data is received. Source compatibility is
achieved through double-decompressing the data. This lets us know
how many bytes are available just as before but without having the
uncompressed data left in memory.
Fixes: QTBUG-83269
Change-Id: I352bd09581614c582e4628243e2a0e895ba4946b
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Small change needed to make QString_char16 and QString_QChar return -1
in this case, but other combinations already returns -1.
[ChangeLog][QtCore][Behavior Change] QString::indexOf(QChar) and
QString::indexOf(char16_t) now treat a negative start-position, from,
bigger than the string's size as invalid. It previously
clipped such start-positions to the start of the string, inconsistently
with other QString indexOf overloads.
Change-Id: Ic56c8a558bf40a94845c649647db569892d4df02
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
We need those events to trigger palette color group changes in QQuickItem
without having to connect every item to yet another QWindow signal.
Task-number: QTBUG-93752
Pick-to: 6.2
Change-Id: I8534808cdaab828e5876f8fda31567aeb1b4272a
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
The case where a parsed date-time fell in a transition, but only
because the default value for some field lead it there, only dealt
with the case of parsing a date-time, which is the only time it should
be relevant. However, since the date and time do get combined as a
date-time (even when only one of them is relevant) the same problem
could arise when parsing a date (on which the current time-zone
happened to make a transition at the start of the day) or a time (if
the default date happens to be one on which the current zone had a
transition).
So handle both of those cases, as well as the date-time case.
Fixes: QTBUG-91120
Pick-to: 5.15 6.1 6.2
Change-Id: I565d115eb85cd2ee69fa500fcd40b05bcf8f6fff
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The Open Group's documentation of the meanings of the
locale-determining environment variables.
Change-Id: I5e3ae7de033b569b1c691b85ed65e441832359c4
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Some time ago I wanted to use QStringTokenizer with a QL1S haystack and
needle to optimize a particular bottleneck. Only to realize the new
bottleneck was more expensive (continuously converting both the strings
to QString).
Change-Id: Ica86db0043c839c2336a3c3886ffbe3875659b5b
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
The decoding of PNG_INFO_gAMA to QColorSpace was incorrect, the PNG
gamma is the inverse of the gamma value we use. We revert it
everywhere else, just not here.
Pick-to: 6.2 5.15
Change-Id: Ic0ae1963b2dde3004cac8a6430ddaf99e7096915
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
Without the overloads using QLatin1Char in QL1S member functions results
in the QL1Char being converted to QChar and QL1String being converted to
QString.
Change-Id: Ic19545539a207f025a6293f0b2d929de475dc166
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
It's a latin-1 string so embedded nulls are weird, but it makes it
easier for the follow-up patch adding overloads for QLatin1Char.
A test case in tst_qstringapisymmetry.cpp, which checks handling of
"empty" values, end up with a '\0' latin-1 char. Which makes the code
assert.
Change-Id: I0ff6628087cfac4d875b19f572c59ef7b5406293
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
queued_activate adds a reference to the slot object. It also attempts to
deref it again, but that did not work correctly so far. We could end up
with
T1 | T2
queued_activate |
checks isSlotObject |
adds ref |
locker.unlock() |
| QObject::~QObject
| //In disconnect all senders loop
| sets isSlotObject to false
| derefs slotObj, but not deleted
checks isSlotObject |
(no deref because it's null) |
To solve this issue and others caused by early returns, we now use a
RAII helper, which always takes care of calling destroyIfLastRef if the
ref count has been incremented.
Change-Id: I9c011cdb8faa5f344d7e70f024fc13f407e39ccf
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
The code already checked for QT_BUILDING_QT to decide whether the
'apk' target should be part of the default 'all' target, but it only
worked properly for qtbase.
The 'apk' target was created before the value of QT_BUILDING_QT is set
when building other repos like qttools.
Postpone the decision on whether 'apk' should be part of 'all' to the
first call of qt_add_executable -> qt_android_add_apk_target.
At this point QT_BUILDING_QT will be defined.
Achieve that by relying on an additional 'apk_all' target as an
implementation detail.
Amends 8b8679f73d
Pick-to: 6.2 6.1
Fixes: QTBUG-94442
Task-number: QTBUG-94264
Change-Id: I92ff0a7eef2caad244340ab7835e77c9fb3377c0
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
To better match other plugins in Qt
Pick-to: 6.2
Change-Id: I6ab19603f13c80a8afe4fe69f64669559a0eea15
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Yuhang Zhao <2546789017@qq.com>
In my prior attempt to handle the last second of 1969, I forgot that
the QTime we're describing is a local time, so whether *it* thinks
we're at the last second of the day is beside the point. Fortunately,
preceding second should get -2 as return if mktime()'s initial -1
actually meant the last second of 1969, so we can test via that, after
a cheap pre-test to save doing this too often (albeit we only even
attempt the check if mktime() returned -1 in any case).
Restructured qt_mktime() in the process to deal with the error case's
early return promptly instead of doing it in an else clause. Also
repackage the calls to mktime to isolate various quirks and simplify
the logic in qt_mktime(). This also prepares for setting tm_isdst as a
hint when we know when we came from, in massageAdjustedDateTime().
Refined one test, added two more test cases. These didn't fail before
this fix, but a judiciously-placed qDebug() in testing revealed that
localMSecsToEpochMSecs() resorted to its fall-back handling - as if
the date-time were outside the time_t range - due to qt_mktime()
failing, for these test-cases (and several others). This fix evades
that fall-back behavior; a judiciously-placed qDebug() shows none of
our test-cases now fail callMkTime().
Change-Id: I11aa5015191dc4a565c28482307f7bc341c207e7
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The function takes a UTC time, which it converts to local time when
needed, but its (two) calls to refresh a local time instance were
doing the (more expensive) reverse conversion, which we don't need
(because we knew UTC to start with) and, in this case, it can't land
on an invalid time, so we don't need to cope with that.
Change-Id: I49b42bfa9f6a5fde12810f5a0da9ff4466ca86a4
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>