I noticed that QDTP has a mutable member, text, which gets set at the
end of each call to parse(); this makes all the in-out parameters
redundant, since relevant methods can simply access - and modify -
text, if it's set *at the start* of parse instaed. (There are no early
returns to complicate matters.) This also makes StateNode::input
redundant.
At the same time, rename the mutable member, as several methods shadow
it with parameter or local variable names; it is too generic.
Change-Id: I2259cd87de5c84201b25c9633d11e59a4a4d57a1
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
There were duplicates; there was neither rhyme nor reason to the order.
One was conditioned on a deprecated old define.
Change-Id: Iba390f4a83758418379fb5fc522f08ada3e41d12
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Use std::hypot() instead of sqrt() of a sum of squares.
This ensures length() can't be zero when isNull() is false.
Use length() in QLine::setLength() rather than duplicating that.
Clarify and expand some documentation; isNull() never said what
constituted validity, nor did unitVector() mention that is should not
be used on a line for which isNull() is true. Make clear that lines of
denormal length cannot be rescaled accurately.
Given that we use fuzzy comparison to determine equality of
end-points, isNull() can be false for a line with displacements less
than sqrt(numeric_limits<qreal>::denorm_min()) between the coordinates
of its end-points (as long as these are not much bigger); squaring
these would give zero, hence a zero length, where using hypot() avoids
the underflow and gives a non-zero length. Having a zero length for a
line with isNull() false would lead to problems in setLength(), which
uses an isNull() pre-test, protecting a call to unitVector().
(It was already possible for a null line to have non-zero length; this
now arises in more cases.)
Restored QLine::setLength() to the form it had before a recent change
to avoid division by zero (which resulted from underflow in computing
the length of a non-null line) but allow for the possibility that the
unit vector it computes as transient may not have length exactly one.
Add tests against {ov,und}erflow problems in QLine. Reworked the test
added during the divide-by-zero fix to make it part of the existing
test.
Pick-to: 5.15 5.12
Change-Id: I7b71d66b872ccc08a64e941acd36b45b0ea15fab
Reviewed-by: Sze Howe Koh <szehowe.koh@gmail.com>
addBFail() asserts on the file being non-null. The convention seems to
be "Unknown File" for cases where we cannot determine the file.
Change-Id: I3a4d0130352d77d75f264fad6f3bd47c6700ef4c
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Changed QtConcurrent algorithms to take the passed sequences as
universal references, where it makes sense. In addition to avoiding
to create extra copies when passing rvalues, this change allows
passing temporary container adaptors to QtConcurrent::map (e.g. see
the example in the ticket and the new test-cases).
Task-number: QTBUG-83170
Change-Id: Ia7c0833f4ec1d860294fa5214cd53934b65ff084
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Add the missing call to QScreenPrivate::emitGeometryChangeSignals()
along with an emission of physicalDotsPerInchChanged()
since that is calculated from geometry and physical size.
Rearrange the code in
QGuiApplicationPrivate::processScreenGeometryChange()
to prevent duplicate emissions of geometryChanged(),
physicalDotsPerInchChanged() which this change would introduce.
Amends 5290027e3b.
Pick-to: 5.15
Task-number: QTBUG-76902
Task-number: QTBUG-79248
Fixes: QTBUG-86604
Change-Id: I3dc2ec5ccd9c6413e92f9246242f323e8afc5e57
Reviewed-by: David Edmundson <davidedmundson@kde.org>
Use a simple and straightforward container that only does what
we need here.
Change-Id: I1a81b53a58bc91d533e3d7df5471a1362046825d
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
To match QString and QByteArray behavior
Change-Id: Ifce4a5dee6fc9077e855a24499f11f911e359cf5
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Even if we don't reallocate or detach.
Change-Id: I44928c261f037b304de8ee6135b96f00dd217c51
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
ChangeHandler's evaluated the binding to detect if the value actually
changed. This is a valid strategy for lazy bindings, but eager bindings
were already evaluated at that point, and thus the change would not be
detected.
Change the binding loop test, so that there isn't a fixpoint in the
binding loop, and we can still detect it. Changing the binding loop
detection code to deal with this case is left as an exercise for the
future.
Change-Id: Ia5d9ce2cd98a5780e69c993b5824024eb186c154
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
When converting a const variable to a non-const variable, use the conversion operator
Change-Id: Ib1c8f3defbf9ccce1af5c90e7e9c508bc8c039d0
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
We don't build on platforms without stdint.h
Change-Id: Iee9de3e71a7bcae524f2d1377919cf074a713960
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The documentation of convert promised that “If the cast cannot be
done, the variant is still changed to the requested type”. This was not
the case so far, because we returned too early if canConvert returned
false.
This commit changes the behavior of the method to reflect its
documentation. The documented behavior seems more useful than the
alternative of not changing the metaType, at least for common use cases
inside qtdeclarative.
Change-Id: I09b5a5efb7344e76e93de278e35c7fb2b2f87dcd
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
QXmlString is an internal class, so qdoc cannot tie the member function
documentation to anything. Since "swap" is rather self-explanatory anyway,
we can just remove the (somewhat oddly placed) documentation.
Change-Id: I3d47219a628ba3d3e5ecd0c825eeff71908d07e9
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
The logic was complex and missed the UTF-8 UTF-8 case. It ended up
calling the UTF-8 to Latin1, resulting in an improperly-sorted
container, which in turn meant keys were not found when searched.
Fixes: QTBUG-86873
Pick-to: 5.15
Change-Id: I0d3ff441bec041728945fffd16379dec418637ca
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Deprecated from 6.0, but necessary for migration.
Change-Id: Idb1264e6ecca9400086970c15270b803c8fd391b
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Nullptr memcpy, memmove and 36 bit shift of integer.
Change-Id: Ib79c8a98a710d021fc93b6aaec6c0ba9bde5f91e
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
We were missing 64-bit signed mul_overflow on 32-bit platforms and in
those where we did have it, the detection was awful (both for signed and
for unsigned). So if one of the parameters is a constant, we can
simplify the code generated.
Change-Id: Ia99afccf0c474e20b3ddfffd162a60d269eb1892
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Movable in Qt is confusing since C++11. Our code also relies on wording
with "relocatable" and "movable" is mostly a backwards-compatibility thing
Change-Id: I28f5a61b4482aa1dd26c7b760d78be031d11ef10
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
Introduce a category for debug/warning prints coming from connect()
and related functions. As a drive-by, rename and complete the
usage of logging categories for connectSlotsByName().
Change-Id: Ieb2d8641df856c8c60317757eda80dc5f9375130
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Take only the three things we need. Otherwise we waste time on copying
data that is not even relevant to buffer updates at all.
Change-Id: I5ed6ae647e23c6f1d0f5f1d973bead2e008f06cc
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Also bump the non-heap buffer size in the binding list to 16,
in order to accommodate complex Quick3D materials with many
associated texture maps.
Change-Id: Id190e5f8304f5941cffc41a2605fce45dfeb72f0
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Because we will iterate through this list and issue a memcpy
for each entry. Better to keep it sorted based on offset to
be more cache friendly.
Change-Id: Ie9dcb259e9a543937cbdcdea85aec9eb92dba1b1
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
The semantics are not very intuitive, and it opens a can of worms
with regards to what should happen with observers that observe
that property.
Change-Id: I6fb00b7693904b968224cc87d098bbd0ea776ba3
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
In the internal hash map implementation, we have to ensure that the
index is in the interval [0, size - 1].
Moreover, in setBinding we have to refetch the binding storage in case a
reallocation happened.
Change-Id: I11c6264f16537699c8908b647e2355a39ce87648
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Add qt6_android_get_sdk_build_tools_revision() function to get the
Android SDK build tools revision, the logic is moved from
QtPlatformAndroid to Qt6AndroidMacros. The update QtPlatformAndroid
header comments.
Task-number: QTBUG-85982
Change-Id: If3e5b46fa583f929a24794792c9d5a52beb83990
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Simplify rounding to get rid of hacks to make lines meet up again. This
also results in better looking drawing results in general.
Task-number: QTBUG-25896
Change-Id: I48f08f0e7bd7ff869d6767f7bac2a18c2d280615
Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
These value gaps were there for binary compatibility, but we don't need
those in Qt 6.
Change-Id: I72a40d601b61f90e14562578e88493b0d54ff398
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
This adds 'Inherited by:' links to print support classes deriving from
Qt GUI types.
Pick-to: 5.15
Task-number: QTBUG-77126
Change-Id: I84ecee5df8cae0635d42653b1483db6b3c6074ee
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Class QObject is the most widely used base class in Qt. It is
inherited by a great many Qt classes.This update sets the depends
variable in qtcore.qdocconf to '*' so that QDoc will load all the
index files for all of Qt, when it generates the documentation for
QtCore. In particular, this will ensure that the "Inherited By"
list for class QObject will show all the Qt classes that inherit
QObject.
Pick-to: 5.15
Task-number: QTBUG-77126
Change-Id: I5f38400ccc798ec34e2ee80472f1fe9bb7b1877d
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Since size is already qsizetype and costs is multipla of size, it seems
costs should be qsizetype as well.
Change-Id: Iae85baaba5842460358e369a666fef6ebb7e52b4
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
string-shortening operations never throw away capacity (unless
detaching), so it may very much make sense to squeeze a string whose
capacity was not explicitly reserved.
this does in fact restore the behavior prior to commit a3aa2fcf, which
changed it presumably only due to not considering the case above.
Change-Id: I0d7919a1724dd3ecc6cd4cbd7236eb52067f0a1c
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
This image is already a combined image of all urls that we drag.
Pick-to: 5.15
Change-Id: I8fe45f64a6022881320d100f8a6f4a25fcac73b9
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Make name format of QT_ANDROID_DEPLOYMENT_SETTINGS_FILE consistent with
qmake, that is android-${target}-deployment-settings.json.
Task-number: QTCREATORBUG-24678
Change-Id: I2bdb056cf7a82fd83aaf658f3a405a0c9ef05756
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Change lots of code to avoid the deprecated operator+() or implicit
casts to int.
Change-Id: I0c343cd5b28603afdf1214eefb85e928313345e2
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
QtConcurrent algorithms are making an internal copy of the passed
sequence, to make sure it won't be destroyed before the execution
is finished. However, they were using iterators of the originally
passed sequence. So, if the original sequence is deleted, QtConcurrent
algorithms would use invalid iterators to a deleted sequence. This
might work with Qt containers thanks to implicit-sharing, but with
other containers will lead to unexpected results. Fixed them to work
on the internal copy of the original sequence.
Change-Id: I1d68692ed9746223c85f51bb05977bc1443b681d
Reviewed-by: Andreas Buhr <andreas.buhr@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
If we're able to load a system zone without knowing its name, we
shouldn't claim that its name is UTC. Instead, use the system zone
information's name for the zone.
Let the backend return an empty string if it can't determine the
system zone ID, provided it has some way to get system zone info
despite not knowing its name. This can happen on Windows if the system
zone is one of Microsoft's idiosyncratic names that we don't
recognize; or on Linux if /etc/timezone is a copy of a zoneinfo file,
instead of a symlink. In support of that, handle empty ID as a request
for system zone info, so that the backend constructors taking an IANA
ID never get passed an empty ID; that gets routed to the default
constructor instead.
This incidentally restores QTzTimeZonePrivate's behavior, for empty
ID, of reading the content of /etc/timezone if we are unable to
determine the name of its zone any other way.
Fixes: QTBUG-86306
Pick-to: 5.15 5.15.1
Change-Id: Iad57c18199124f651ebc3d32c3deffca6eaab512
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Before we had the option of eager evaluation, we were able to use the
dirty flag to detect whether we are recursing. However, eager properties
will lead to a evaluateIfDirtyAndReturnTrueIfValueChanged call, and that
in turn will clear the dirty flag.
Introduce a new member to detect that situation, and set the bindings
error state to BindingLoop if we detect that kind of loop.
Change-Id: If40b93221848bd9e9422502318d992fad95b0b74
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Explicitly declare members in qdoc runs that are otherwise inherited
from QListSpecialMethods.
Note: Due to a bug in syncqt, those members need to be added in a
separate #ifdef Q_QDOC section.
Change-Id: I96850f3665359de4f97be1b8d10f8052ba252fab
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Move all the documentation for that class into one place, and remove
rawMetaData documentation and references; it is a private variable, and
shouldn't be documented.
The instance member is a function pointer type variable, but should
be treated as a member function. Even with a Q_QDOC ifdef'ery we can't fix
that warning (we would get a lot of new warnings instead), so leave that
as is for now.
Change-Id: I951aaafad8dca5ed2533ace69931f002eb97996a
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
arg() is now a variadic template, already documented in
qstringview.cpp, so document that and remove the documentation for
the removed overloads.
QString has no member subString, so remove that as well.
Fix return type in QLatin1String member function documentation.
Change-Id: I32e7bcba770bcee77ae4a07c06ac61228ffa93a6
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
It's no longer possible to decrement an iterator, and the class uses
qsizetype, not int for sizes.
Fix incorrect function prototypes in the documentation, and remove
documentation for functions/overloads that don't exist.
QMultiHash doesn't have Java style iterators (not a new issue in
Qt 6), so remove the references to QMultiHashIterator.
Change-Id: I149b4620963f2087f3f66bb70a9c97b292a35378
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Pointed out by Lars.
Change-Id: Idb8427d77b35c84eb3037703957cf7f93ea5f387
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
XDG_SESSION_TYPE is a non-standard part of systemd, and not set if you
run a compositor from the command line, for instance.
[ChangeLog][Wayland] XDG_SESSION_TYPE is no longer used to determine which
platform plugin to use. Instead, if WAYLAND_DISPLAY is set in the environment,
wayland is used. Similarly, if DISPLAY is set, xcb is used. If both are
detected, wayland will be attempted first, then xcb.
Gnome-shell is still skipped for automatic wayland detection.
Fixes: QTBUG-75732
Change-Id: Ieed123330662dc29eafa31148a9b99ba0810de90
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
They appear to be no longer in use.
Task-number: QTBUG-85700
Change-Id: Id4c134b99372ccb26eead2a033d99196778c418e
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Remove public constructor of QWindowsXPStyle since it
cannot be instantiated via style factory since 5.0.
Remove overridden functions that merely call the base implementation.
Change-Id: I3b2998115c4ab65fabf3744874bc3a69a1f5e5b0
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Do not always use the smoothScaled routine, the normal routines are
also optimized, and do not convert to alpha formats when not necessary.
Task-number: QTBUG-49719
Change-Id: I6ee9b620cc259472c419e7363357f41ce29b594a
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
Enable Gradle builds to use Java 8 features like lambda expression by
default.
Task-number: QTBUG-86282
Pick-to: 5.15
Change-Id: Ib497b8a789690fcca6e13ea4995e5966331c6c0d
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
Fix prototype of template member function, and fix see-also reference.
Change-Id: Ibb39925063dfeb3fd511f47a1606a0b243d4c2ef
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
Use correct member function prototype, which requires the template declaration.
Remove see-alsos that don't exist.
Document parameters for qTokenize.
Still lots of warnings from QStringTokenizer, due to the inheritance structure
of that template class and the declarations of nested types in undocumented
base classes.
Also, qdoc doesn't seem to recognize training this-lvalue/this-rvalue
declarations for overloads, and considers the second toContainer documentations
to override the first.
Change-Id: Iadf967d3328ddda52b6f66786836853bddeda79b
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
Fixes few of these, for example:
qurlrecode.cpp:308:19: warning: 'ucs4' may be used uninitialized in this function [-Wmaybe-uninitialized]
*output++ = ucs4;
Change-Id: Iaf09fa854102c76b51e6e18556c5ef20212e57cf
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
The Xorg Server requires colormap when creating a window if
the window's parent either has a different visual or has no
colormap. To simplify logic and avoid extra requests, create
a new window with colormap unconditionally.
Pick-to: 5.15
Change-Id: I21a53f9146ae0a03b38bb3a07c8a478043a2eb89
Reviewed-by: Liang Qi <liang.qi@qt.io>
... and from the duplicated Q_DECLARE_TR_FUNCTION macro for QXmlStream.
We expect source code to be utf8 encoded in Qt 6, so the function is gone.
Change-Id: Ie25329a54e709dc92a22893ad5ab023852300d81
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
This is a visible performance increase actually, given this is on a quite
hot chode path.
Change-Id: I165bfa0d4e490f80078551efb4bf2fe8e72d3596
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
The real benefit in practice is getting rid of profilers going wild
about QByteArray::begin() and similar. The actual perf. gain is
fairly small.
Change-Id: I25e4c762f303b41f0aaf914bc62751f3265d3cf8
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
There is no parameter called value in removeValueAtBeing/End.
Change-Id: Ife91d2014ea35ea636e9cfb1c815424e5f4ef7a6
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
This has a non-insignificant cost (since the size is at least 260 bytes)
in renderers that construct a lot of these objects per frame. After
changing the qHash implementation to be lighter we no longer rely on
qHashBits, so zeroing it is not essential anymore. Remove it.
Change-Id: If1fbd8dfd46fb3f0e9ea5a3c4794d24b8aeac1ba
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
If a target inherits precompile headers from a different target
that has more languages enabled (CXX, OBJCXX), the target will
depend on PCH artifacts for a language that is not actually
present.
Change-Id: I230f16ee59f2c524a30d41a487093343272722d1
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
I accidentally made the CLASS_NAME a multi-value parameter when adding
it.
Add a TYPE argument, which was likely intended to be there since it is
already used in an android branch.
Change-Id: Ic44dbbaeebc6863a984a7c2effbc00c3c2796b0b
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Headers of xkbcommon are used in private headers, and consumers of
Qt::GuiPrivate should automatically link against XKB::XKB.
Change-Id: I99c67b5f291f64b529aed1499a00a215b5db3be2
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Also std::end is constexpr where std::next sometimes isn't always with
sanitizers active.
Change-Id: Ibe4c11eb4945fb286247e841b6a7f6cc3ff1eaa6
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Change-Id: I53021781a25c141db5d5fc6771192cd8d6ed732a
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
It was already used many places directly making the code inconsistent.
Change-Id: I3b14bc6c333640fb3ba33c71eba97e78c973e44b
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
If there is not a title or an indicator for a groupbox, then there is no
reason to add extra padding for it when placing the contents of the
groupbox. So this accounts for when one or the other is not set so that
the space is used more evenly.
Fixes: QTBUG-86411
Change-Id: I536798b57e1195c5a13218f1f82431c4e91f6852
Pick-to: 5.15
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
On FreeType font engine this results in a call to FT_Load_Sfnt_Table
with a pointer to an uninitialized value passed in as FT_ULong* length,
crashing. Instead initialize value to 0.
Change-Id: I50d6df3b2296a05640d939e862bc50adb0fec921
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
(cherry picked from commit e041f5459660eaa7108fa5888e77e64f7d1b3d1d)
Omitting stationary points from touch events is such a marginal
optimization that this code probably isn't worth maintaining.
It wasn't implemented correctly this time either, according to the
tst_QQuickMultiPointTouchArea::stationaryTouchWithChangingPressure()
test.
[ChangeLog][QtGui][QPointerEvent] We no longer attempt to avoid
delivery of stationary points within QTouchEvent: every pressed point
is now included in every TouchUpdate event.
Task-number: QTBUG-77142
Change-Id: If1fd666fb3057a17e0dffdd7ca7138693126b02b
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Remove the check since a QMutex can no longer be recursive, fixing:
qwaitcondition_win.cpp:164:28: warning: 'bool QMutex::isRecursive() const' is deprecated: Use QRecursiveMutex instead of a recursive QMutex [-Wdeprecated-declarations]
Task-number: QTBUG-85700
Change-Id: Ic1631c1e671cf3234b5823d6d20121d746304c8e
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
If it does not add item,the currentText should return empty string
Fixes: QTBUG-86580
Pick-to: 5.15
Change-Id: I54c3a8b7ececfb1e62bcd7ac592feccaff3f8b48
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
- Replace C-style casts, use helper wcharId() for the printer id
- Replace typedef by using
- Replace NULL by nullptr
Task-number: QTBUG-83259
Change-Id: I066ff65bf7c1e894a6c6bb19cf0334c0b83fb759
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Document new enum values, remove documentation for implicit members,
fix parameters, and tie documentation to function definitions.
Change-Id: I5f32d45be8709e5f614d099ddf21252e23e144f8
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Current implementation of QLineEdit uses the "edited" bit-field flag to
prevent unnecessary emissions of editingFinished() when a line edit
loses focus but its contents have not changed since the last time the
signal was emitted; however, this flag is only cleared when the signal
is fired due to focus loss and not when the Return/Enter key is pressed.
This causes an unexpected double emission of the signal when focus is
lost following a press of the Return/Enter key if the line edit's text
was not further altered between the two actions.
This change includes the Return/Enter press as a trigger for clearing
the "edited" flag to make editingFinished()'s behavior more consistent
and expected. Prevents slots in user code from triggering twice in
situations where the line edit's current contents have already been
handled, but still allows the end-user to force an emission of the
signal via Return/Enter.
The effect of the "edited" flag on the signals behavior has also been
noted in the signal description as it was previously omitted.
[ChangeLog][QtWidgets][QLineEdit][Behavior Change] Pressing the
Return/Enter key in a QLineEdit will now also prevent editingFinished()
from firing due to focus loss if the contents of the line edit have not
changed since the last time the signal was emitted.
See - https://forum.qt.io/topic/116902/
Change-Id: I11aadd45341337b7852da8cf5802c7c9efdd614d
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Replace with QPointerEvent::points().
As a drive-by, turn QEventPoint copies into const references where possible.
Change-Id: Ia5e0645493984fe9177dd3ca16afdb4d56e384ee
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Change the implementation of Qt DBus to use QMetaType directly
instead of integer based type ids.
Change-Id: I999023b58fa50dcc3504386467faf09874f7d2cf
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
A QList<int> where int is the metaType id is a bad idea in Qt 6,
as custom types will start at index 65536. Use a QHash instead.
Also fix the API to use QMetaType as arguments and return values.
Change-Id: Ia0b894126271be1f01dc4593b5155fb75d713720
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Modernize the code base, use QMetaType and avoid
reinterpret_casts.
Change-Id: I0bad2ee393a0f850cf40b248cb9439b06ed9f663
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Remove the limitation of max 8 arguments and clean up the
template code.
This required a bit of special work to ensure
QDBusPendingReply<void> works the same way
as QDBusPendingReply<>.
Change-Id: I8e822b2f97f0712746b917056ea8f3d5c219c7f6
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This fix is not final yet, it's just to plumb the serious bug/regression
of accessing NSPasteBoard in some strange state and the one we have not
populated yet/do not even own (?). Drag image(s) is broken atm and will
be fixed in the follow-up patch.
Pick-to: 5.15
Task-number: QTBUG-71939
Change-Id: I5c3ac3ec138d7407c2e0c206485478aa5244ae15
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
It already has a move-assignment operator, and implements swapping.
This requires a specialization of the QExplicitlySharedDataPointer
destructor to be forward declared, and an implementation that is
identical to the default version. Otherwise we would need
QPlatformPixmap to be fully defined in the public QPixmap header.
Change-Id: I2651bbc29a7083a93e3b3ad671d3aeea659b7d5a
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
...when available. This is mandatory in order to match results with
other APIs where this is always on.
Change-Id: I3b8ef2cb806a7297c83e60a3eb1fa71b50780dbe
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
In the past, string formatting and parsing was done in the users
locale. Now, the C locale is consistently used in QDate(Time) and
localized functions are offered in QLocale. This patch reflects
this change in the documentation.
Change-Id: I81afda9063fa232d06841d63f69e19b49f8083f3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This saves some repetition of verbose status-setting code.
At the same time, save the function that uses it a repeated
getStatus() call hidden inside its getSpec() by inlining getSpec().
Change-Id: I32aee521c1885408f822ecb47ab1ed76f92852a1
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
As proposed by Lars in code-review; its Data::Data() is in fact
noexcept even when CanBeSmall is false.
Task-number: QTBUG-86400
Change-Id: I351e4332660f5895fff34b950227cbb811fd9f81
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
We need to take into account the possibility that the slider is flipped,
otherwise we end up with inverted rects, as noticed in Big Sur.
The logic to use the ticks as input to whether the bar rect should be
inverted didn't make sense. If the graphics context has been flipped,
then we should reflect that through the slider.
Pick-to: 5.15
Pick-to: 5.12
Change-Id: I3574027c14807460affb42a9763211981c4ed528
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Colors with wrong number of elements are now invalid.
Change-Id: I32c934894de86095d9790baa5f0d2001d76bcd3c
Reviewed-by: Christian Ehrlicher <ch.ehrlicher@gmx.de>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
In one case, handle an error by an early return so that we can do so.
Change-Id: If98eaaf2dfd47c1df1d09497fcc3e9ab784dc6df
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
In QDateTime::toMSecsSinceEpoch(), all non-short date-times know their
offsets from UTC, so can use that, saving the TimeZone ones the need
to call (costly) zoneMSecsToEpochMSecs() and, when not short, the
LocalTime ones the need to call localMSecsToEpochMSecs().
Moved the setting of offset clear of refreshZonedDateTime()'s check
that the date and time match the milliseconds being handled, so that a
sensible offset value is set even when the date-time comes back
invalid due to being in a spring forward.
As refreshZonedDateTime() now sets d's m_offsetFromUtc for both specs,
it no longer needs QDateTimePrivate::setUtcOffsetByTZ(). In any case,
the private time-zone access that provided is equivalent to the
difference we already have between msecs and epochMSecs, except in a
zone-gap. Add assertions to confirm this in zoneMSecsToEpochMSecs().
This brought to light a problem with whole-day transitions, where
QDate::startOfDay() assumed the gap it was hitting would end by end of
day. Search backwards from noon tomorrow, instead; likewise, for
endOfDay(), search forward from yesterday.
Task-number: QTBUG-75585
Change-Id: I6151d1dfccab321605753c98e01152281461bfe2
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
QDateTime's comparisons just compare milliseconds when both values are
local times and their statuses (hence DST-ness) match. It can do the
same for time-zones. While doing the same for UTC and fixed offsets
wins nothing, it also costs nothing, given that we're already checking
the spec.
Task-number: QTBUG-75585
Change-Id: Ib6d824569aba8def2f1319ef3a11cca6869a5b5e
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Prompted by a ### Qt 6 comment on one of them.
Task-number: QTBUG-85700
Change-Id: Id78a05a7bf77ba04207e0f5bc2a316984b13c9ae
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Provide simplified declaration of fromArray for qdoc runs; fix a small typo.
Change-Id: I8c7300a014270e8ab7f18afd94ee66af4734e0c7
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
A snippet bug, and removed overloads.
Change-Id: I82aee3627ba1a4e75e392b28d8ec72d470c395db
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
QMutableSet/HashIterator can not walk backwards, neither can the STL iterator.
When function documentation was shared with other iterator types, move it into
separate section to avoid linking to incorrect see-alsos.
Remove or fix other member function documentation that had errors, e.g.
in parameter types after move to qsizetype.
Change-Id: Ic7f97a295eff63ee748998b10f08a160706fa650
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
00a1e5da7e wrongfully added parts of
QtPlatformAndroid.cmake which were removed in
32121e9882. This removed the part in
question again
Change-Id: Ie18968e6a165f52c68f4941ced6add266985bc48
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Commented recommended turning it off by default in Qt 6, but Lars
changed his mind once he saw how much broken on doing that.
Task-number: QTBUG-85700
Change-Id: I1aeec408400978821e0e64d082dbb73cf982e54a
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Because having profilers bombarded with mallocs (due to creating
deep copy QByteArrays) is not nice.
Change-Id: I848f41f3465d6dc2a58a193cc863495aacf13d79
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
More of an enabler for reusing the data in the individual entries since
not clearing the QVLA does not give us much on its own.
Change-Id: Ief9761f75382c3373cc2bc7b866eb59fdd8b3277
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Rather, utilize all the available ones in the pool, picking
the next available batch after the one we picked previously
(with wrapping over as necessary).
Change-Id: I5f26e127a406c2dd07d155712429c72ad4f0f0f1
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Modify special case locations to use the new API as well.
Clean up some stale .prev files that are not needed anymore.
Clean up some project files that are not used anymore.
Task-number: QTBUG-86815
Change-Id: I9947da921f98686023c6bb053dfcc101851276b5
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
As drive-by, fix qdoc warning in related internal documentation.
Change-Id: I7716a9b126e38e99dcd11c6af2e91b8ec7bf4346
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This makes the size nicely aligned and conveniently intializes
everything to the right values.
Change-Id: Ibad2defbbd323fd5cdd4bed8374f40558d80acc0
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Those APIs need to be declared for qdoc runs, even if cxx17_filesystem is not.
Change-Id: Iaa437aa424f35d0414b6b79328bcafb49af872b3
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Puge references from removed QPrinter methods.
QPdfWriter's setter API documentation only added the word "PDF" to the
QPagedPaintDevice documentation. This was not useful - when the latter
talks about "page", it's obvious what is meant in the context of PDF, so
remove the duplication.
Change-Id: I7b16cbc82de8d35b5224288c9e36deff4e01fb44
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
In QTextDocument and QTextFormat, standardize language a bit.
Change-Id: I7c81ecc7a32e36ec32214e6b5386a2827cfcbc3f
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Also, merge constructor overloads, and remove superfluous explicit from
a non-converting constructor.
Change-Id: I60d0e646d1aaeb8ea66b7598076c3e3ba356c12e
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Binary provider:
It was not possible to remove the first glob in a local override,
because the mainPattern handling would re-add the first glob back.
XML provider:
It didn't support glob-deleteall.
Also, the order of the providers was wrong. We want to pick local
overrides first, the internal DB has to go last in the list.
Fixes: QTBUG-85436
Pick-to: 5.15
Change-Id: I9a4523f37cd962c730df9a6ed992bd01c075bf03
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
To avoid potential decompression bombs. This is implemented with just
a simple check that the ratio doesn't pass some hardcoded preset.
Change-Id: I17246f0f43e73280cdb35a8f03d65885f5678ad6
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
QDateTimeParser mostly uses QLatin1Char where it can, but missed a few
cases.
Change-Id: I3df37c350047214aeb843c3290014fa45b4656fe
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Andreas Buhr <andreas.buhr@qt.io>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Assuming everything up to the first space is a digit is not sound.
Change-Id: Iab5bb134c8e3299da726625c53b6a9b23f09dbb4
Reviewed-by: Andreas Buhr <andreas.buhr@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Clean up the state of the projects,
before changing the internal CMake API function names.
Task-number: QTBUG-86815
Change-Id: I90f1b21b8ae4439a4a293872c3bb728dab44a50d
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
MSVC has strange problems with it and we don't actually need it.
Change-Id: I2c443946d52d475208800f310b5f910da165c99b
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
The default constructor was no longer documented, and the documentation of
the initializing constructor wasn't tied to the implementation anymore after
33fc622686.
Change-Id: I5354a7e3b249f2128a6421546d4ebb375ae48160
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
It's \reimp, not \reimpl, and this particular textAlignment variable
documentation is for QStyleOptionComboBox.
Change-Id: I90f1519410a4378c54777e29acce70b55975e70e
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
If we reference a parameter in the documentation, then we have to name
it as well in the function declaration. Use Q_UNUSED instead of omitting.
Change-Id: Icb32d3bd965f0361d112f62cb3bbbbb2005d378c
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
QIcon had two methods calling a trivial local static; both were
deprecated. Inlined the local static rather than #if-ing it on the
same deprecation #if-ery.
Shift the #if-ery on the deprecated methods to embrace also their docs.
Change-Id: I5f6755ef99dd6b4abddc343c9bedf4815e50d567
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Lars says documenting that the methods are slow is sufficient, no need
to deprecate them.
Task-number: QTBUG-85700
Change-Id: I7b1d19e91e30205df7d8198e3704cecc72a853e0
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Changes the definition of invalid QRects to be more consistent.
This simplifies the logic, and makes it possible for us to fix
normalized() so dimensions don't change.
The actual API is not changed except for inverted rects.
Only one use-case for the old normalized() function existed,
and has been reimplemented as QRect::span().
Fixes: QTBUG-22934
Change-Id: I29dad2952dc6c8e84a6d931898dc7e43d66780f3
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Due to somewhat inverted logic introduced by the 8481a9fc97,
testing number of items in a pasteboard happens _before_ we fill it,
which is wrong and useless. As a result, maybeDragMultipleItems will
prevent the single item drag.
Pick-to: 5.15
Task-number: QTCREATORBUG-24665
Task-number: QTBUG-86786
Change-Id: Ia4be9fc56677575bb363cbb8b1adbea59e6c3b0b
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Fix a logic error. QRegExp is a UserType in Qt 6 and we need to
check for it in the right place.
Fixes an autotest failure in the qregexp autotest in qt5compat.
Change-Id: I454cfcfd12b36f756b24b69a5412455db9dccbe7
Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
Do not use QVariant::Type anymore, instead use QMetaType
For some reason, this pushed the qvariant autotest over the limit where
MSVC requires the /bigobj flag, so add that one.
[ChangeLog][QtCore][QMimeData] The signature of the virtual retrieveData()
function has changed and now takes a QMetaType instead of a QVariant::Type.
Change-Id: Ib46773bd731ee2177b1ef74d8162d744be7017ef
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
We change the declaration of the new APIs using std::filesystem::path for
qdoc runs, and need to forward declare it consistently for qdoc builds to
avoid a flood of clang warnings when building documentation.
Change-Id: Iddcf0ce7d6207b6cc5910790315ab21076bd6ce1
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
For documentation purposes, we treat QList, QByteArrayList, and QStringList as
simple classes, whereas reality is a bit more complicated. We conditionally
change the declaration of the types for qdoc runs, and need to be consistent
to avoid a flood of warnings from clang when building documentation.
Change-Id: I22d529079e10f8fd3d93edc771e5f05729fa925f
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Skip AUTOUIC on sources generated by the qt_add_dbus_interface and
qt_add_dbus_adaptor macros. Otherwise CMake will warn due to policy
CMP0071:
```
For compatibility, CMake is excluding the GENERATED source file(s):
(...)
from processing by AUTOMOC and AUTOUIC. (...)
```
Pick-to: 5.15
Change-Id: I7d14b23c9343940964d5bc0d1d18fc19b41b5cd0
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
xcb-image includes xcb_aux.h, which is part of xcb-util.
Fixes: QTBUG-86287
Pick-to: 5.15
Change-Id: I253308008c5baeb1d061ef19f516ae6ab6dff52c
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Resolve remaining Qt6 TODO
[ChangeLog][QtCore][QAbstractEventDispatcher] The signature of the abstract virtual registerTime function now takes a qint64 value for the interval parameter.
Change-Id: I10166ad5cfb455edc404d465a3731ff094a8977e
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Current implementation of QProgressDialog always calls
QCoreApplication::processEvents() when the user calls
QProgressDialog::setValue() if the PD is modal. For most cases this is
fine, but when using a Qt::WindowModal PD with setValue() connected to
a signal in another thread using Qt::QueuedConnection a reentrancy
issue is present if setValue() is triggered too frequently as the
execution of its previous call may not have finished. If this happens
too many times in a row a stack overflow will occur.
Current documentation notes this potential issue but offers no way it
avoid it while still using QProgressDialog (user must implement a
custom dialog) without resorting to using Qt::BlockingQueuedConnection,
which unnecessarily reduces performance.
Introduces the boolean reentrancy guard "processingEvents" that is
checked before calling QCoreApplication::processEvents() in a modal
PD when setValue() is used. It is set before the first call to
processEvents() and cleared after that call returns. This ensures that
only one invocation of processEvents() is possible from within
setValue() at a time, and thereby minimizes iterations of the main event
loop and eliminates the aforementioned stack overflow condition.
See - https://forum.qt.io/topic/118292/
Fixes: QTBUG-10561
Pick-to: 5.15
Change-Id: Ifa9b91cbb66881981356954ead0906bdc91fab60
Reviewed-by: Samuel Gaist <samuel.gaist@idiap.ch>
bistream-vera is not a known license for SPDX. Instead use a DejaCode
URN. Handling of such URN's is done in a separate patch in qtools.
Pick-to: 5.15
Change-Id: I687507ab05d2d377a50dbc0a1037071a9de68341
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
QDirIterator is documented to be non-deterministic.
Fixes: QTBUG-86675
Pick-to: 5.15
Change-Id: I4161871a409bbaf85347ee6a60ef1189f56a1b22
Reviewed-by: hjk <hjk@qt.io>
As can be seen in the _q_resolveEntryAndCreateLegacyEngine_recursive method
in QFileSystemEngine, paths starting with ':' are treated as QResources,
which means that from QFileInfo's POV they're "not relative", which is why
QDir::isAbsolutePath would return true.
Pick-to: 5.15 5.12
Change-Id: I701d08ce43ea707bc34c928e39bea0b83597a4b6
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
In order to modify a container through an iterable, we need the original
container to be mutable. The iterable, then, is not a conversion of the
container, but rather a view on the container. The concept may be
extended to other types.
In order to facilitate this, provide a set of methods in QMetaType and
QVariant similar to the convert family. The new methods are non-const
and expect the original value to stay available during the life time of
the view.
Change-Id: I363621033f7fc600edcea2acb786820ccba49c86
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
And add mutable iterators. This requires some refactoring of the
existing iterators.
Task-number: QTBUG-81716
Change-Id: I61b3a3e8c0df5fd449679257a29d9f0c3d19c4f0
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
This will enable run-time debugging on Windows, using
_CRTDBG_MAP_MALLOC, which uses #define to override the
standard library memory management functions, including
realloc.
Fixes: QTBUG-86395
Change-Id: I51975dd74cab0ae8309436c86d17a59074c561e1
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
The constructor taking an array literal will now stop at the first
null-terminator encountered.
And fromArray is introduced which only supports array literals.
Constructs a view of the full size. Explicit so it shouldn't be
surprising.
Change-Id: I1497c33a5c12453a95e87c990abe6335b2817081
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
1. Make the ctor unable to construct a QByteArrayView from
array literals other than 'char'.
With the new behavior it would either be (very likely) unintended to
pass e.g. a std::byte array to the ctor. And it would be confusing
because you would get different sizes based on signed-ness.
2. Introduce fromArray
Only supports array literals. Constructs a view of the full size.
Explicit so it shouldn't be surprising.
Change-Id: Ifdb55eb21057dfe7053b2561bd81e2c9825e9bc6
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
For HTTP connections, QNAM defaults to opening its TCP socket in
unbuffered mode. This means that Qt will send the data written
into the socket right to the kernel, queueing only if the kernel
says it doesn't want more data for the moment being.
QNAM itself then uses separate write() calls to write the HTTP
headers and the body of the request (like POST or PUT). These 2+
writes result in headers and body being sent over different TCP
segments -- even if, in principle, a POST with a few bytes of data
(e.g. a HTML form, or a REST or SOAP request) could fit in the same
segment as the request.
Multiple writes like this interact extremely poorly with other
TCP features, e.g. delayed ACKs, Nagle's algorithm and the like.
In a typical scenario, the kernel will send a segment containing just
the headers, wait for the ACK (which may be delayed), and only then
send the body (it wasn't sent before because Nagle was blocking it).
The reply at this point is immediate (because the server can process
the request and starts replying), but the delayed ACK is typically
40-50ms, and documented up to 500ms (!). If one uses QNAM to access a
service, this introduces unacceptable latency.
These multiple writes to the OS should be avoided.
The first thing that comes into mind is to use buffered sockets.
Now, there are good reasons to keep the socket unbuffered, so we
don't want to change that. But the deal breaker is that even buffered
sockets won't help in general: for instance, on Windows, a buffered
write will immediately detect that the socket is ready for write and
flush the buffer right away (not 100% sure of why this is necessary;
basically, after populating the QTcpSocket write buffer, Qt enables
a write socket notifier on the socket -- notifier that fires
synchronously and immediately, without even returning to the event
loop, and that causes the write buffer flush).
Linux of course offers the perfect solution: corking the socket via
TCP_CORK, which tells the kernel not to send the data right away but
to buffer it up to a timeout (or when the option gets disabled
again, whichever comes first). It's explicitly designed to support
the case of sending headers followed by something like a
sendfile(2). Setting this socket option moves the problem to
the kernel and we could happily keep issuing multiple writes.
Ça va sans dire, no other OS supports that option or any other
similar option.
We have therefore to deal with this in userspace: don't write in the
socket multiple times, but try and coalesce the write of the headers
with the writing of the data. This patch implements that, by storing
the headers and sending them together with the very first chunk of
data. If the data is small enough, this sends the entire request
in one TCP segment.
Interestingly enough, QNAM has a call setting TCP_NODELAY
currently commented out because Qt doesn't combine "HTTP requests"
(whatever that means). The call comes all the way back
from pre-public history (before 2011) (!). This patch doesn't
touch it.
Fixes: QTBUG-41907
Change-Id: Id555d14e0702c9f75c3134b18277692eb3659afe
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
That XML was parsed over and over again, because the QMimeXMLProvider
was re-created instead of re-used.
Pick-to: 5.15
Change-Id: I07ff005d3f238afc1490b69a58cf4815e67d418c
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Qt Quick Pointer Handlers depend on this behavior:
QQuickPointerHandler::onGrabChanged() receives only the grabber that
was losing the grab or the one that is receiving it, not both at the
same time. UngrabExclusive means the original grabber simply
relinquished the grab by setting the exclusive grabber to null.
CancelGrabExclusive means the new grabber took over the grab that the
old grabber had before.
Task-number: QTBUG-86729
Change-Id: Iefca6fe91b11fcb03d2c6ac3598841c924facb22
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
The recently added check to avoid negative-bitshift ub ignored that
the algorithm will sometimes use a negative bitcount value as a
flag. This caused reading failure for some frames.
Pick-to: 5.15 5.12
Fixes: QTBUG-86702
Change-Id: I4c247a7eb6102f9b51cc8ac708c60db80d609e38
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
The documentation for [NSWindow performWindowDragWithEvent:] only
mentions mouse-down events, but starting a drag from move and drag
events works too, so include them as well.
Pick-to: 5.15
Fixes: QTBUG-85105
Change-Id: Ib6c29ed4035bfccc61d50a7f95f564fb3d56fcf6
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Check the reference count before deleting. Patch
as contributed on bug report.
Pick-to: 5.15 5.12
Fixes: QTBUG-86547
Change-Id: I2cb197e3eeda7ade2442c23f6b4f1ae6ff2ff810
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
This makes it easier to know which values to use in BLACKLIST files
for a flaky test, for example.
Pick-to: 5.15
Change-Id: I12af99d68f97e016aa42be9ae9d70de5fc0a58ed
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Simplified the logic around reconciling hour12, ampm and hour in the process.
Mindless coding-style tidy-up.
Change-Id: I0b7cabc57539d0d7201fef33e0120b84f4bb4994
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Updated QFuture docs to be more precise about QtFuture::Launch::Sync
policy.
Change-Id: Ic267c71f858e04a47ea1fc0996ea342d5eae7744
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
In fact, this variable can take only two values: 0 and 1. By
interpreting its value as boolean, we can use relaxed store operations
instead of atomic increments. This is safe, because it's guarded by
'activateEventNotifiersPosted' variable, which already provides a
release/acquire semantic.
Change-Id: If9adb7d022f1500ee7e8b61f336d8732f9b88d4c
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
[ChangeLog][QtCore][QByteArray] QByteArray is a prepend optimized
container similar to QList.
Task-number: QTBUG-84320
Change-Id: I45ed1cb75414930f5998be58bfcfe343b1790331
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
As OpenGL ES and Vulkan ruin the day with the spec mandated minimum
value for max threads per threadgroup being only 128, clients need
a way to decide if their compute shader (local_size_*) is suitable
for use at run time.
Change-Id: I72b4fc97032406340623add82ea4d9544ebe9fdc
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
The recently introduced overflow check for 8 bit images was too
aggressive, causing the last pixel on each line to be rejected.
As a driveby, add the same (fixed) overflow check also for 32bit
images.
Pick-to: 5.15 5.12
Fixes: QTBUG-86691
Change-Id: I62e4d5884e314f1171cb5a3e2c48657ce7259676
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
After we started defaulting to high-dpi enabled, it was discovered
that it does not work correctly with the placeholder screen. Since
the placeholder screen has no physical size, and the default
implementation of logicalDpi() divides by the physical size, we
got a scale factor of NaN in the high-dpi code.
The effect of this was that the nooutput test in Qt Wayland would
fail, because it did not get the events it was expecting, since
the window geometry was never set to a valid rect in the
resize() call.
Task-number: QTBUG-86698
Change-Id: I7ee68db9a13446b414502ae0f26fd214531c673a
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
The non-deprecated one called the deprecated one :-(
Inline the deprecated one and simplify, given the null pointer passed down.
Change-Id: I5b99053357fc3be109e61ccf1161835bf527b686
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
The reason for this bug is that after the TextItem loses focus,
the focusItem in QGraphicsScene is already empty.
When QGraphicsScene responds to the inputMethodEvent event again,
since focusItem is already empty,focusItem will no longer deliver events.
Fixes:QTBUG-85088
Pick-to:5.15
Change-Id: I329054333c2adec133d35318761612aca3afcf0d
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
These states correspond well with ScrollPhase, and this abstraction
makes it possible to handle wheel events the same way as mouse events
in Qt Quick: on "begin" we deliver to all Items and Handlers until
all points (the only point) are accepted; on "update" and "end" we
deliver only to the exclusive grabber, if there is one, and to any
passive grabbers.
Change-Id: I702dbd4f2c1bf5962eb3dbb9e4b725300a00a887
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
These docs are not part of the generated docs due to QRhi being private,
but nonetheless keep it useful.
Change-Id: Ic46aaa4cd329535c37fffcd514ba354dff4bfb5c
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
Do not qHashBits on the whole data that is at least 260 bytes, a big
part of it often unused. Just hash binding/stage/type and the first
resource pointer.
Change-Id: If9b3dc9acf36edf225302b1216d91e87b652b8ef
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
When we know the spec already, we can route to the correct branch of
the check directly. This also prepares the way for avoiding
duplicating the expensive check for LocalTime during
setMSecsSinceEpoch().
In the process, move duplicated code into massageAdjustedDateTime()
from its callers, to avoid adding verification to the duplication; and
clean up refresh{now: Zoned}DateTime().
Change-Id: I04d7a417110109d1f246a891b5aa94945821804b
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Various places in moc relied on the magic behavior of QByteArray, that
provided a non-null pointer to a null byte when the byte array was
null, resulting in crashes when QT5_NULL_STRINGS is turned off. Fixed
them to cope with this (and optimised out some pointless effort, when
empty QByteArrays are involved, in the process).
Change-Id: I617a878eb2e9ac8be244080efa1f0de4ac9a68a2
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Use ternary operator form, or boolean algebra, for the short returns.
Handling invalid differently from valid isn't symmetric, they're
qualitatively different branches.
Skip a fatuous default-initialization.
Change-Id: I01a8a06055c315ecf08fc87d208808c0fe71eb31
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
It is lossy, so should be requested explicitly, using a dedicated
fromPixmap factory function.
Deprecate the constructor and assignment operator, and make the
constructor explicit.
[ChangeLog][QtGui][QBitmap] Implicitly constructing and assigning
to a QBitmap from a QPixmap has been deprecated, and the respective
constructor has been made explicit. Use the fromPixmap factory
function instead.
Change-Id: I68ce85b26c901415137b664a1db687021d48bae0
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Allow Gradle builds to run using JVM daemon, this will improve the
current build time noticeably for clean builds and hugely for
incremental builds.
This will bring the Gradle build to comparable speed with a normal
Gradle build in Android Studio.
Task-number: QTBUG-86674
Pick-to: 5.15
Change-Id: Icc4267223802e4c9350b48099236650c023f868d
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
There were a small typos about those methods and fixed with correct ones.
Fixes: QTBUG-86635
Change-Id: Ib853e502fdcdafdf3ddf7ef6d25d368ebc2a631f
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
...not with the given point. Since QEventPoint has a constructor that
takes an id, it's possible to write something like
pointerEvent->setExclusiveGrabber(pointId, object)
which will construct a QEventPoint on-the-fly, containing only an id.
(That was unintentional, but perhaps useful sometimes.)
setExclusiveGrabber() looks up the persistent point, but if we emit the
signal with the given point, it is missing the device. A handler
connected to that signal might reasonably assume that the point is a
complete instance; so we'd better emit the complete instance that we
found. (OTOH if the given point was a detached instance, it might also
be unexpected that the signal emits the persistent instance instead of
the given instance.) Amends 2692237bb1
Change-Id: Iee16363dcb22c1dc07b0cc0a81930218e22fa19e
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Because of these lines in the Linux kernel (kernel/fork.c, see [1][3]):
if (clone_flags & CLONE_VFORK)
trace = PTRACE_EVENT_VFORK;
else if (args->exit_signal != SIGCHLD)
trace = PTRACE_EVENT_CLONE;
else
trace = PTRACE_EVENT_FORK;
Without CLONE_VFORK (which we can't use), if the exit signal isn't
SIGCHLD, the debugger will get a PTRACE_EVENT_CLONE, which makes it
think the process we're starting is a thread, not a new process. Both
gdb and lldb remain attached to the child and when it later performs an
execve(), they get mightily confused. See gdb bug report[5].
The idea of not having an exit_signal was so that no SIGCHLD would be
delivered to the parent process in the first place. That way, some
misguided SIGCHLD handler (*cough* GLib *cough*) wouldn't reap our
processes. Unfortunately, what I didn't realize was that the kernel
sends SIGCHLD anyway (see [2][4]), so this defensive measure didn't
actually work. Consequently, we can pass SIGCHLD to clone() and get the
debuggers working again.
[ChangeLog][Linux] Fixed an issue that would cause debugging a Qt
application that uses QProcess to confuse both gdb and lldb if
the Linux kernel was version 5.4 or higher. Behavior outside of
a debugging session was not affected.
[1] https://code.woboq.org/linux/linux/kernel/fork.c.html#_do_fork
[2] https://code.woboq.org/linux/linux/kernel/signal.c.html#do_notify_parent
[3] https://elixir.bootlin.com/linux/v5.8/source/kernel/fork.c#L2432
[4] https://elixir.bootlin.com/linux/v5.8/source/kernel/signal.c#L1925
[5] https://sourceware.org/bugzilla/show_bug.cgi?id=26562
Fixes: QTBUG-86319
Pick-to: 5.15
Change-Id: I2fc68c725ba649218bd9fffd1633863613537d42
Reviewed-by: Dimitrios Apostolou <jimis@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Reviewed-by: hjk <hjk@qt.io>
Our CI cross-compiling arm qemu builds have issues in tests that use
QProcess, due to user-space qemu seemingly not supporting pidfds
properly.
Add a 'forkfd_pidfd' configure.json feature, which can be manually
disabled when configuring Qt, causing QProcess to do a regular fork
instead of using the new pidfd kernel feature.
This will help us avoid the regression of multiple tests failing on
the new Ubuntu 20.04 CI host images when they are run via qemu.
Task-number: QTBUG-86285
Task-number: QTBUG-86187
Task-number: QTBUG-86198
Change-Id: Ib2209d7e95126e0fb738bf59e39070d5a62c482f
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Create a colormap per visual, not per window.
Pick-to: 5.15
Change-Id: I97d94618f159b4beaffd4a1afe0611233ced6676
Reviewed-by: Liang Qi <liang.qi@qt.io>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This is in accordance to the examples from harfbuzz docs:
https://harfbuzz.github.io/ch03s03.html
The fix is because `pkg-config --cflags harfbuzz` returns
the subdirectory as include path, for example:
-I /usr/local/include/harfbuzz
and this caused the system-harfbuzz not to be found when
/usr/local/include was not included by default (recent change on
macOS) and the code was doing #include <harfbuzz/hb.h>.
Fixes: QTBUG-85568
Change-Id: I12a34638e8ad5e3085768828457f0bfa1a2c68ad
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
... in order to avoid a bogus compiler warning.
Change-Id: I25eb435d6d57bdd5ef5c05ccacb0e6413631f6c9
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Change the rounding of negative half values to match standard C++
round, this will also allow future optimizations.
Change-Id: I8f8c71bed1f05891e82ea787c6bc284297de9c5c
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Also add existing such docs to the new document group
Task-number: QTBUG-84051
Change-Id: I76f033f0846e09943f249d2beeb1606869eef382
Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
When QCoreApplication object is instantiated, creation of the internal
message window is delayed until QEventDispatcherWin32::processEvents()
is called or socket/event notifier is registered. But, if the user uses
a native event loop, posted events are not delivered and timers do not
work.
This problem was fixed in a4ac4b3263 for
QWindowsGuiEventDispatcher in the same way. So, the risk of regression
is minimal.
Change-Id: I7bbb721d96046f64d21a7b0e553e46798b37189c
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
In 4e400369c0 we began to send synth-mouse
events from the touch device, but in the opposite direction it was not
consistent.
Add autotests to prove that it's consistent both ways now.
Change-Id: I7df2328fef224dc1529ca5d27411cd8a5a9c8df9
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This functionality was only in Qt Quick in Qt 5. Now we move it up to QtGui
so that every QEventPoint will have a valid velocity() before being delivered
anywhere.
[ChangeLog][QtGui][QPointerEvent] Every QEventPoint should now carry a valid
velocity(): if the operating system doesn't provide it, Qt will calculate it,
using a simple Kalman filter to provide a weighted average over time.
Fixes: QTBUG-33891
Change-Id: I40352f717f0ad6edd87cf71ef55e955a591eeea1
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
QQuickEventPoint instances were very long-lived and got reused from one
event to the next. That was initially done because they were "heavy"
QObjects; but it also became useful to store state in them between
events. But this is in conflict with the ubiquitous event replay
code that assumes it's OK to hold an event instance (especially
a QMouseEvent) for any length of time, and then send it to some widget,
item or window. Clearly QEventPoints must be stored in the QPointerEvent,
if we are to avoid the need for workarounds to keep such old code working.
And now they have d-pointers, so copying is cheap. But replay code
will need to detach() their QEventPoints now.
QEventPoint is useful as an object to hold state, but we now store
the truly persistent state separately in an EventPointData struct,
in QPointingDevicePrivate::activePoints. Incoming events merely
update the persistent points, then we deliver those instead.
Thus when event handler code modifies state, it will be remembered
even when the delivery is done and the QPA event is destroyed.
This gets us a step closer to supporting multiple simultaneous mice.
Within pointer events, the points are moved up to QPointerEvent itself:
QList<QEventPoint> m_points;
This means pointCount(), point(int i) and points() can be non-virtual.
However in any QSinglePointEvent, the list only contains one point.
We hope that pessimization is worthwhile for the sake of removing
virtual functions, simplifying code in event classes themselves, and
enabling the use of the range-for loop over points() with any kind of
QPointerEvent, not just QTouchEvent. points() is a nicer API for the
sake of range-for looping; but point() is more suited to being
non-const.
In QML it's expected to be OK to emit a signal with a QPointerEvent
by value: that will involve copying the event. But QEventPoint
instances are explicitly shared, so calling setAccepted() modifies
the instance in activePoints (EventPointData.eventPoint.d->accept);
and the grabbers are stored separately and thus preserved between events.
In code such as MouseArea { onPressed: mouse.accepted = false }
we can either continue to emit the QQuickMouseEvent wrapper
or perhaps QEvent::setAccepted() could become virtual and set
the eventpoint's accepted flag instead, so that it will survive
after the event copy that QML sees is discarded.
The grabChanged() signal is useful to keep QQuickWindow informed
when items or handlers change exclusive or passive grabbers.
When a release happens at a different location than the last move event,
Qt synthesizes an additional move. But it would be "boring" if
QEventPoint::lastXPosition() accessors in any released eventpoint always
returned the same as the current QEventPoint::xPosition()s just because
of that; and it would mean that the velocity() must always be zero on
release, which would make it hard to use the final velocity to drive an
animation. So now we expect the lastPositions to be different than
current positions in a released eventpoint.
De-inline some functions whose implementations might be subject to
change later on. Improve documentation.
Since we have an accessor for pressTimestamp(), we might as well add one for
timestamp() too. That way users get enough information to calculate
instantaneous velocity, since the plan is for velocity() to be somewhat
smoothed.
Change-Id: I2733d847139a1b1bea33c00275459dcd2a145ffc
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
It should not be necessary to have the xkb dev package installed for
users of QtGui.
Task-number: QTBUG-86421
Change-Id: I4a4102d578df504d23f504a97704fcab4a39023b
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
And remove another ### Qt comment, this time ### Qt 5.
Change-Id: I1d5cef47ddd81b6a27f870599128c8f16846c350
Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
Some CMake files currently assume that QtGui is always enabled and we
get a configure-time failure without these changes.
Task-number: QTBUG-86053
Change-Id: I28e32c180c32221f32519017bac6b518a19d5983
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Do follow the example of winmain.pro and replace /Zi with /Z7.
Manipulating CMAKE_CXX_FLAGS_DEBUG is not particularly elegant,
but CMake seems not to offer a more modern way yet:
https://gitlab.kitware.com/cmake/cmake/-/issues/19084
Fixes: QTBUG-86423
Change-Id: I280d06ad52b79d4be04052ab4e0d2113ef08414c
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
This requires refactoring of QMetaSequence, as they share a lot of
common functionality. QMetaAssociation provides a low level interface to
an associative container.
Task-number: QTBUG-81716
Change-Id: I273e00abd82f1549ba8803c323d82aa3a2d12ded
Reviewed-by: Lars Knoll <lars.knoll@qt.io>