When qtbase is configured with CMAKE_STAGING_PREFIX set, then Qt modules
built against this qtbase should also get CMAKE_STAGING_PREFIX by
default. Like CMAKE_INSTALL_PREFIX in regular builds, this prefix will
be determined by the location of QtBuildInternalsExtra.cmake to support
building Qt modules against an installer-provided Qt.
CMAKE_INSTALL_PREFIX on the other hand must be exactly the value that
was provided when building qtbase.
If CMAKE_STAGING_PREFIX is specified by the user, honor it.
To opt out of automatically setting CMAKE_STAGING_PREFIX, set
QT_BUILD_INTERNALS_NO_FORCE_SET_STAGING_PREFIX to ON.
Remove the old code that was supposed to set CMAKE_STAGING_PREFIX.
Pick-to: 6.2 6.3
Fixes: QTBUG-99666
Change-Id: I20edef54c102ca9784fcdef0decf0bd83266ae11
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
qstrncmp() would stop at the first null character, which isn't correct.
The tests that had been disabled in tst_qstring.cpp (with an inaccurate
comment) were actually passing. I've added one more to ensure that the
terminating null is compared where needed.
[ChangeLog][QtCore][QLatin1String and QUtf8StringView] Fixed a
couple of bugs where two QLatin1Strings or two QUtf8StringViews
would stop their comparisons at the first embedded null
character, instead of comparing the full string. This issue
affected both classes' relational operators (less than, greater
than, etc.) and QUtf8StringView's operator== and operator!=.
Pick-to: 5.15 6.2 6.3
Change-Id: I0e5f6bec596a4a78bd3bfffd16c90ecea71ea68e
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
QNetworkHeadersPrivate::toHttpDate() used a custom format to output a
date-time; the format supplied GMT as suffix, but neglected to convert
the date-time to UTC, so local-time was formatted as if it were UTC,
regardless of its actual offset from it. Fixing this (by the obvious
toUTC() call) broke formatting when the supplied header value was a
QDate, since it's packaged as a QVariant and QVariant's conversion of
QDate to QDateTime uses local time's (not UTC's) start of day. So fix
headerValue() to separate QDate and QDateTime cases and use
startOfDay(Qt::UTC) to get the right start of the day. Added tests for
non-UTC date-times appearing correctly in HTTP headers.
Fixes: QTBUG-80666
Pick-to: 6.3 6.2 6.2.3 5.15
Change-Id: I2792bce14a07be025cf551b0594630260c112269
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Two cases coincide without feature textdate, and the first falls
through to the second with the feature, making it possible to simplify
the #if-ery, converting its tests to positive form and skipping a
duplicate case body in the process.
Change-Id: I2c0ee800442474707bf8893bd72b9706fef54485
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Very simplistic initial test, inspired by the fix in 'fusion' style,
but not style-specific.
Pick-to: 6.3
Change-Id: I55ceca7ad214c86cb11032c5342bdae2a83852f1
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Force takeStandardSnapshots() to take and log all snapshots before
launching QFAIL. Macros QBASELINE_CHECK_DEFERRED and
QBASELINE_CHECK_DEFERRED_SUM have been added in qbaselinetest.h
Task-number: QTBUG-99790
Pick-to: 6.3
Change-Id: Ia015de808f354e842ac4029c5c84be18c4a4e209
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Files that are not meant to be executed should not have the execute
permission bit set.
Task-number: QTBUG-81503
Pick-to: 6.3 6.2 5.15
Change-Id: I10666bd958adfc5c425216bcff7456facd1fe5f3
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Ievgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>
The 'qt_host_path' should not affect the package_id as it is most
probably completely different in different environment and would make
the CI produced cross compiled binaries unusable by end users.
Pick-to: 6.2 6.3
Change-Id: I91019dacb99a3ee69fadbf3435d37bac0c279330
Reviewed-by: Toni Saario <toni.saario@qt.io>
Move the window logic and state out of QWasmEventTranslator and into
QWasmCompositor.
The reasoning for this change is that the state of the windowing
system was split between QWasmCompositor (eg. window stack) and
QWasmEventTranslator (eg. dragged and pressed windows). This change
moves the input handling and state to QWasmCompositor and demotes
QWasmEventTranslator to a helper class. In this model, QWC acts
as a proper window system / display server and can leverage multiple
helper classes which are "owned" by the QWC.
Here is a quick diagram illustrating the proposed general architecture
around WASM window handling and its difference from typical OSes:
https://i.imgur.com/vcBwUPf.png
Change-Id: Idca617992b8e1b431e5c71d46b5db61597c99e75
Pick-to: 6.3
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
QDoc made some assumptions about the module a class/header belongs to,
based on the source file path. This feature is rather error-prone and
unnecessarily complex and will be removed from QDoc.
Define modules explicitly to avoid documentation warnings when this
removal happens.
Pick-to: 6.2 6.3
Change-Id: I7947d197db5ac36c12e816caa19bb2f74eda8849
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
When they are disabled ('NoButtons'). Otherwise, we end up with a tiny
dot (top left or right corner of a spinbox).
Pick-to: 6.2 6.3 5.15
Fixes: QTBUG-99486
Change-Id: Ic99f4bce2abd57c988254296a749b5d5b23cfb39
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Some lines in tests had to be updated because they lost the implicit
conversion from char* to QString.
Change-Id: I95af5859ced95b9ca974205398e38c0bd4395652
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
qDebug() << i.next();
can become a NOOP if the code is compiled with QT_NO_DEBUG_OUTPUT.
Pick-to: 5.15 6.2 6.3
Fixes: QTBUG-97535
Change-Id: I9085b40ac9b4de2bb06f16e03fd5100902b08d4f
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
It is out of print since years, and probably quite dated by now (released
1997).
Pick-to: 6.3
Change-Id: I1653eb404713c15d70b8a15858e8c7d12b2e71cb
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Emscripten now warns against passing e.g. “ALLOW_MEMORY_GROWTH”
as a compile option.
Add EMCC_THREAD_CFLAGS, which gets compiler flags only.
Pick-to: 6.3
Change-Id: Ifcf40c45ca75cfdfc98a12e6b9d47f34158b3407
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
Use “-pthreads” instead of “-s USE_PTHREADS=1”. This
is both a compile and linker option.
Pick-to: 6.3
Change-Id: Iaf7cb4ec41577fe596c3e81fda05c03fe0074c08
Reviewed-by: David Skoland <david.skoland@qt.io>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
The “emterpreter” was the precursor to the current
asyncify support, but is not in use any more.
Pick-to: 6.3
Change-Id: I07ca04b61747e90939444525641b5aa34f7087b5
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
The names are the keys of a hash so they can come in any
order. That means the loop above, which stops before the end if
it finds a name that is not the official one, may not have seen
the official yet. If it has reached the end, then there is no
typedef alias.
Fixes: QTBUG-99620
Pick-to: 6.2 6.3
Change-Id: I3bd638766c494b32c665190d01db15c4cbc587b5
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
QString::utf16() needlessly detaches fromRawData() to ensure a
terminating NUL. Use data() where we don't require said NUL, taking
care not call the mutable data() overload, which would detach,
too.
Task-number: QTBUG-98763
Change-Id: Ibd5e56798c0c666893c12c91ff0881842b8430c7
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
This fixes a build problem (use of PATH_MAX) by eliminating a
Linux-specific condition that can't happen on HURD anyway.
Pick-to: 6.3
Change-Id: I5dcaf104a60b7850b8af3964fc4cd02ab24acd7b
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This class is not exported, so we can change the non-exported
methods. None of the exported methods required change; notably,
QVersionNumber::Segments::setVector didn't because it's only called with
values 1, 2, and 3.
[ChangeLog][Potentially source-incompatible changes] Updated the
QVersionNumber API to use qsizetype where length and index values were
used. This change retains binary compatibility and the vast majority of
users will not experience a source compatibility problem. It could occur
with ambiguous overloads when passing results from QVersionNumber to
other API not using either int or qsizetype. There could also be new
warnings from compilers about converting 64-bit types to 32-bit ones.
Change-Id: I0e5f6bec596a4a78bd3bfffd16c9984b61c9b55b
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Port the internals to qsizetype, and use QStringView instead of QString
as a function parameter.
The padding() function is changed to take a qsizetype to avoid warnings,
but the maximum padding that can be specified is still limited by the
range of an int (this is guarded via an assert).
Change-Id: I9dd98e5a534990a1758b080900a12dc793528d19
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
The docs are saying that QAnyStringView sizes are measured in terms
of code units of the underlying encoding, not code points.
Pick-to: 6.3 6.2
Change-Id: Ic72ffd122e45631e8626c9d57ec24ca348918424
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
This is heavily inspired by the patch written by Inho Lee
<inho.lee@qt.io>, which says "There is a precision problem in the
previous algorithm when checking pitch value. (In the case that the
rotation on the X-axis makes Gimbal lock.)"
In order to work around the precision problem, this patch does:
1. switch to the algorithm described in the inline comment to make
the story simple.
2. forcibly normalize the {x, y, z, w} components to eliminate
fractional errors.
3. set threshold to avoid hidden division by cos(pitch) =~ 0.
From my testing which compares dot product of the original quaternion
and the one recreated from Euler angles, calculation within float range
seems okay. (abs(normalize(q_orig) * normalize(q_roundtrip)) >= 0.99999)
Many thanks to Inho Lee for the original patch and discussion about
rounding errors.
Fixes: QTBUG-72103
Pick-to: 6.3 6.2 5.15
Change-Id: I8995e4affe603111ff2303a0dfcbdb0b1ae03f10
Reviewed-by: Yuya Nishihara <yuya@tcha.org>
Reviewed-by: Inho Lee <inho.lee@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
... as a befriendable namespace.
This breaks all remaining users of QMutableEventPoint, thus forcing
them to port to the new static-setter-only API that reliably avoids
the UB that the old QMutableEventPoint::from(), in particular,
depended on.
Fixes: QTBUG-99615
Pick-to: 6.3
Change-Id: Id162cd98f13b52c4f491749ee73826b1c5755453
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
In Qt 5 style sheets, objects could be selected by an enum-type property
using the integer value of the enum value, e.g
QToolButton[popupMode="1"] { ... }
In Qt 6, the the new meta type system and QVariant implementation enabled
QVariant::toString to return the string representation of the enum value
instead for a property containing an enum. Since QStyleSheetStyle's
attribute matching is string based, this breaks the Qt 5 style selector,
and QCSS code instead needs to use e.g.
QToolButton[popupMode=MenuButtonPopup] { ... }
While the new syntax is arguably preferable, this is an unintentional
change that silently breaks style sheet code (no error or warning at
compile- or run-time).
To support Qt 5-style selectors, we have to change the StyleSelector
interface of the QCssParser API so that we can pass through what type
of value the attribute extractor should return; if an integer string "1"
is provided, then we need to compare the enum integer value; if the
string provided does not represent a number, then we need to compare the
name of the enum value.
Since the pure virtual attribute() method that needs to be implemented
to extract the attribute value of the node is implemented in modules
outside qtbase, add a second virtual method that takes the entire
QCss::AttributeSelector, which includes the value to match. Extractor
implementations can use it to evaluate which type of data to return for
an exact match. The default implementation calls the old attribute()
method so that existing StyleSelector implementations continue to work.
Make the respective change in the QStyleSheetStyleSelector, and simplify
the surrounding code. Adjust other StyleSelector implemnentations in
qtbase. As a drive-by, remove the superfluous virtual declaration from
those overrides.
Once submodules are adjusted to override this virtual function instead
of the (now no longer pure) virtual attribute() method, that method can
be removed.
Pick-to: 6.3 6.2
Fixes: QTBUG-99642
Change-Id: I9a2b3498f77bf7cab5e90980b7dab2f621d3d859
Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
This code didn't actually use QMutableEventPoint::from(), so didn't
run into the UB that from() depended on, but it's in the way of making
QMutableEventPoint a befriendable namespace instead of a public
subclass of QEventPoint.
Replaced the QMutableEventPoint ctor that takes a timestamp, and
therefore isn't compatible with the ctors on QEventPoint, with a
static function that returns QEventPoint instead.
Port QList initialization to braced-initialization as a drive-by.
Task-number: QTBUG-99615
Pick-to: 6.3
Change-Id: If5a1dbea21cc31cdefdb640716793421c8ec0af4
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
This, finally, shows some expected results:
Clang -ftime-trace:
$ ClangBuildAnalyzer --analyze qtgui-spec-before.trace | head -n6
Analyzing build trace from 'qtgui-spec-before.trace'...
**** Time summary:
Compilation (523 times):
Parsing (frontend): 665.7 s
Codegen & opts (backend): 298.9 s
$ ClangBuildAnalyzer --analyze qtgui-spec-after.trace | head -n6
Analyzing build trace from 'qtgui-spec-after.trace'...
**** Time summary:
Compilation (525 times):
Parsing (frontend): 628.3 s
Codegen & opts (backend): 301.0 s
GCC 11 time (bash builtin):
$ time for ((i=0; i < 3; ++i)) do touch ../qt5/qtbase/src/gui/painting/qpolygon.h ; ninja libQt6Gui.so; done
[268/268] Creating library symlink qtbase/lib/libQt6Gui.so.6 qtbase/lib/libQt6Gui.so
[268/268] Creating library symlink qtbase/lib/libQt6Gui.so.6 qtbase/lib/libQt6Gui.so
[268/268] Creating library symlink qtbase/lib/libQt6Gui.so.6 qtbase/lib/libQt6Gui.so
real 4m10,918s
user 49m10,099s
sys 3m11,719s
$ git revert --no-commit HEAD
$ time for ((i=0; i < 3; ++i)) do touch ../qt5/qtbase/src/gui/painting/qpolygon.h ; ninja libQt6Gui.so; done
[268/268] Creating library symlink qtbase/lib/libQt6Gui.so.6 qtbase/lib/libQt6Gui.so
[268/268] Creating library symlink qtbase/lib/libQt6Gui.so.6 qtbase/lib/libQt6Gui.so
[268/268] Creating library symlink qtbase/lib/libQt6Gui.so.6 qtbase/lib/libQt6Gui.so
real 4m18,630s
user 51m11,491s
sys 3m16,479s
The technique in the comment in qmetatype.h doesn't work on Clang - it
runs into -Winstantiation-after-specialization. The whole extern
template stuff so miserably fails to meet the goals set out in N1448,
not only for MSVC and class templates, but, it seems, on all
compilers, and for function templates, too, that I'm giving up on it
for now.
Unfortunately, I'm not really seeing a way to hide this stuff behind a
macro, yet.
Task-number: QTBUG-97601
Pick-to: 6.3
Change-Id: I500fd04555e0bd76ac021f75582bd8d8cf339378
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
In Qt 5, such selectors have to use the integer value of the enum
value. Using the enum value name does not work.
In Qt 6, such selectors must use the enum value by name, using
the integer does not work.
It's not clear yet what changed, possible a side effect of the
changes and improvements in the meta object system and QVariant in
Qt 6. So for now, document the difference in behavior in a test.
Pick-to: 6.2 6.3 5.15
Task-number: QTBUG-99642
Change-Id: I96e0280b191b8ca06b16a97ab3ed367e9a8f43a0
Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
The header no longer uses QMutableEventPoint.
Fix TUs that relied on the transitive include.
Task-number: QTBUG-99615
Pick-to: 6.3
Change-Id: Iae4ff34ea708304fcd365fd763875dd4a97a1cf8
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
If text shaping failed for some reason (for example if the
string passed to Harfbuzz contains ignorables only), we
would return a single glyph for the whole string. But we
forgot to initialize the log clusters array, which could
cause crashes later when this was read. We initialize a
single cluster consisting of the "missing glyph" glyph to
be consistent.
Amends fccd419dd6.
[ChangeLog][QtGui][Text] Fixed a possible crash with certain fonts
when shaping strings consisting only of control characters.
Pick-to: 5.15 6.2 6.3
Task-number: QTBUG-89155
Fixes: QTBUG-92358
Change-Id: I1ec0237d99b48be2a8bb340f0feb056bca4fdffe
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
We already have a QMouseEvent, don't static_cast the QEvent again to the
parent-class of QMouseEvent.
Pick-to: 6.3 6.2
Change-Id: Ifd8a5a82d0a8ded564a68ec4f3ae877886c6e1c7
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Do the cast to QMouseEvent only after we determined that it's actually
a QMouseEvent. Says ubsan:
src/gui/kernel/qwindow.cpp:2558:27: runtime error: downcast of address 0x7fffca0e5af0 which does not point to an object of type 'QMouseEvent'
0x7fffca0e5af0: note: object is of type 'QShowEvent'
ff 7f 00 00 b0 09 01 b8 61 7f 00 00 11 00 00 00 00 00 00 00 b3 8a b5 41 00 00 00 00 80 50 5a cc
^~~~~~~~~~~~~~~~~~~~~~~
vptr for 'QShowEvent'
Only cast _after_ determining that `ev` is-a mouse event.
Amends 3d71c4b740.
Pick-to: 6.3 6.2
Change-Id: I8455c998e2f4390a1483c1a097eb095358963ace
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
The mix of signed (qsizetype) and unsigned long when comparing breaks
local -Werror,-Wsign-compare builds.
Amends d83dbc3db2.
Change-Id: I7910b7e2dfaaa01d8069ce52e97c0166e6d3fa30
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
This is floating point, so De Morgan doesn't always apply.
Change-Id: I89446ea06b5742efb194fffd16bb9e36025cb387
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Hopefully, the compiler will realize that the suprema calculated below
are actually bigger than these limits and make the appropriate dead code
eliminations.
Change-Id: I89446ea06b5742efb194fffd16bb99f78b26eb0e
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
The test is impacted by the position of the mouse cursor, and fails if
the mouse enters the test window when it gets shown. Try to move the
cursor away from the window.
As a drive-by, const'ify some of the local variables.
Revert 7b4b5115dd by removing the
blacklisting of the test on macOS in CI.
Pick-to: 6.3 6.2
Change-Id: Ia0c554fdf161fd4eb4aa3965e937c7db8ceeef8f
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
The commit missed the 6.3 branching / feature freeze.
Task-number: QTBUG-86106
Task-number: QTBUG-78092
Change-Id: I1d6b1efe0d482b6fc1ff3cfbbb440856b8cf1856
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
These were added to QStandardPaths in commit 68c4669ce4
[ChangeLog][QtCore] PublicShareLocation, TemplatesLocation got added as
known locations to QStandardPaths.
Task-number: QTBUG-86106
Task-number: QTBUG-78092
Change-Id: I453b6a07dd7775f81f81a1b18fa95f5c1230cb1e
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
... to the new static setter API, preventing the undefined behavior
that from() depended on.
Remove from() and constFrom().
Task-number: QTBUG-99615
Pick-to: 6.3
Change-Id: I69c52aa286eaf51303734e42184af36815cf828a
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
We had a copy-paste error there: not all array members were initialized.
Pointed out by PVS-Studio static analysis tool:
https://habr.com/ru/company/pvs-studio/blog/542760
Co-Authored-By: Marc Mutz <marc.mutz@qt.io>
Pick-to: 6.3 6.2 5.15
Change-Id: I06a4f2cd928846eab6330af014981fd0a3170ba0
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Since switching to the plugin bases system for the tls backends,
Qt again retains some QObjects after QCoreApplication shutdown.
This was previously fixed in QTBUG-84234, so make sure we destroy the
newly introduced QObjects as well.
Task-number: QTBUG-84234
Pick-to: 6.3
Change-Id: I1aaea2c90f7d55793c19259be4f9173b4befb246
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>