RFC2397 doesn't explicitly mention it, but references RFC2045, which,
in Section 2, states:
> All media type values, subtype values, and parameter names as
> defined are case-insensitive.
and goes on, in 6.1:
> mechanism := "7bit" / "8bit" / "binary" /
> "quoted-printable" / "base64" /
> ietf-token / x-token
>
> These values are not case sensitive
So regardless of whether "base64" is a parameter name, or a mechanism,
we need to treat it case-insensitively.
Use QLatin1String::endsWith() instead of QByteArray::endsWith(),
because the former takes Qt::CaseInsensitive while the latter would
need a toLower().
Add a test.
As a drive-by, use the same trick for the existing case-insensitive
comparison with "charset".
As a further drive-by, fix inappropriate uses of QLatin1String (=
where they don't prevent allocations).
[ChangeLog][QtCore][QUrl] Now recognizes the ";base64" marker in
"data:" URLs case-insensitively.
Pick-to: 6.3 6.2
Change-Id: Ife6ba771553aaad3b7c119c1fa631f41ffa8f590
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Destructors of polymorphic classes should be out-of-line to pin vtable
and type_info objects to a single TU.
Pick-to: 6.3
Task-number: QTBUG-45582
Change-Id: I541437a3ff53852527f6278355f7b549e62e17f7
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
We want to mark the corresponding QColor ctor(s) explicit.
Use Qt::GlobalColor or the new QColor::fromString() instead.
Change-Id: I68bf75a094e6821b97682de5a0ffd975834d22d0
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
... from qstringalgorithms.h and qutf8stringview.h, in order to
centralize the declaration of the string classes, much like
qcontainerfwd.h does for Qt containers.
[ChangeLog][QtCore] Added header qstringfwd.h containing
forward-declarations of all Qt string classes.
Task-number: QTBUG-98434
Change-Id: I4cf1ede9fe6c286230f4c7e7abe379da28ce5d15
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Anton Kudryavtsev <antkudr@mail.ru>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Nothing serious, just was curious and played around a bit, so might as
well merge it.
There's much more here that could be done, but I lack the time to do
it.
Change-Id: Idd4ea09a7a413ed5911ffe16841f3d5c944ec1a5
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
... because we can.
Change-Id: I3a813fa9c33e47d20a00e6a331cbbcf6f85e63e7
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Use qOffsetStringArray() instead of an array of pairs of pointers.
This unearthed a problem with SIGNAL and SLOT calling qFlagLocation()
(meaning in debug mode, the array was runtime-initialized, not just
relocated), which we work around by using the new QT_STRINGIFY_
{SIGNAL,SLOT} macros now.
Saves 24 relocations, but, interestingly, saves only 4b in text size
on GCC 11.2 Linux AMD64 -O2 C++20 builds (TEXT and DATA combined)
while saving 760b on the equivalent Clang 10 libc++ build (expected,
in both cases: 24 * (sizeof(void*) - sizeof(quint16))):
Clang:
$ size qtbase/lib/libQt6Core.so.6.4.0
text data bss dec hex filename
5476156 90520 16185 5582861 55300d qtbase/lib/libQt6Core.so.6.4.0
$ ~/bin/relinfo.pl qtbase/lib/libQt6Core.so.6.4.0
qtbase/lib/libQt6Core.so.6.4.0: 6528 relocations, 3598 relative (55%), 2540 PLT entries, 2227 for local syms (87%), 0 users
$ ninja libQt6Core.so
[6/6] Creating library symlink qtbase/lib/libQt6Core.so.6 qtbase/lib/libQt6Core.so
$ size qtbase/lib/libQt6Core.so.6.4.0
text data bss dec hex filename
5475604 90312 16185 5582101 552d15 qtbase/lib/libQt6Core.so.6.4.0
$ ~/bin/relinfo.pl qtbase/lib/libQt6Core.so.6.4.0
qtbase/lib/libQt6Core.so.6.4.0: 6504 relocations, 3574 relative (54%), 2540 PLT entries, 2227 for local syms (87%), 0 users
GCC:
$ ~/bin/relinfo.pl qtbase/lib/libQt6Core.so.6.4.0
qtbase/lib/libQt6Core.so.6.4.0: 6300 relocations, 5343 relative (84%), 318 PLT entries, 1 for local syms (0%), 0 users
$ size qtbase/lib/libQt6Core.so.6.4.0
text data bss dec hex filename
6019871 75896 16952 6112719 5d45cf qtbase/lib/libQt6Core.so.6.4.0
$ ninja libQt6Core.so
[6/6] Creating library symlink qtbase/lib/libQt6Core.so.6 qtbase/lib/libQt6Core.so
$ ~/bin/relinfo.pl qtbase/lib/libQt6Core.so.6.4.0
qtbase/lib/libQt6Core.so.6.4.0: 6276 relocations, 5319 relative (84%), 318 PLT entries, 1 for local syms (0%), 0 users
$ size qtbase/lib/libQt6Core.so.6.4.0
text data bss dec hex filename
6020091 75672 16952 6112715 5d45cb qtbase/lib/libQt6Core.so.6.4.0
Pick-to: 6.3
Change-Id: I60749953f1a63d23d696a5a547cd924ec259ead3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Factor common code into a separate macro to DRY.
The immediate paractical consequence is that we now have a way to
reliably get a const char[] from the SIGNAL or SLOT macros, e.g. for
storing in a QOffsetStringArray, without causing compile errors in
debug mode or running the danger of causing runtime initialization via
qFlagLocation, which is of limited value in this circumstance, anyway,
because qFlagLocation only stores the last two strings.
Pick-to: 6.3
Change-Id: I67401858e94eedc1200fdd08e695fd56d10f8560
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
QDoc interprets a sequence of special characters as something to auto-
link to; Escape the underscore character to prevent this.
Fixes: QTBUG-100562
Pick-to: 6.3
Change-Id: I61a10d7ea6878ef93197b0d329e16b8867d8ad30
Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
ANDROID_NATIVE_API_LEVEL is an alias for ANDROID_PLATFORM and the
Android's CMake docs [1] uses directly ANDROID_PLATFORM so let's use
that as well. Also, NDK r23b seems to have removed the part of code from
android.toolchain.cmake that handles ANDROID_NATIVE_API_LEVEL to set
the correct value to ANDROID_PLATFORM.
With this change, CMake will pass the value from the configure argument
-android-ndk-platform as -DANDROID_PLATFORM instead of
-DANDROID_NATIVE_API_LEVEL. Otherwise, if if -DANDROID_NATIVE_API_LEVEL
is passed directly to CMake, it should work as before.
[1] https://developer.android.com/ndk/guides/cmake#build-command
Pick-to: 6.3
Task-number: QTQAINFRA-4837
Change-Id: I5c21af53ac91e11a27c4b033313d22d1115c1abc
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
When a QDockWidget's dock areas are restricted by setAllowedAreas(...)
and a second QDockWidget is hovered over it, the first QDockWidget can
be docked to any dock area of the main window. Area restrictions will
be ignored.
That is due to the first QDockWidget being implicitely mutated into a
QDockWidgetGroupWindow upon hovering. By definition, the latter has no
docking restricitons.
This fix adds a check if a QDockWidgetGroupWindow has a single QDockWidget child.
In that case, the single child's area permissions will restrict docking.
Fixes: QTBUG-100670
Pick-to: 6.3 6.2 5.15
Change-Id: I903b074739953791634f482c9cf4b9a95a1d93d3
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Use "The default value is \c xxx" instead of "Default \c xxx".
Pick-to: 6.2 6.3
Change-Id: Id75b45499c7fc0e9d42e66fa2b8b3515c863c61c
Reviewed-by: Nicholas Bennett <nicholas.bennett@qt.io>
It broke drive-less (no C:\ prefix) paths passed to configure.
Invoking configure on Windows with the following args
qtbase/configure --
-DCMAKE_INSTALL_PREFIX=\Users\qt\work\install
called CMake with
-DCMAKE_INSTALL_PREFIX=\\Users\\qt\\work\\install
saying
Qt will be installed into '//Users/qt/work/install'
and while the build succeeded, installation would fail with
CMake Error at cmake_install.cmake:41 (file):
file cannot create directory:
//Users/qt/work/install/lib/cmake/Qt6BuildInternals. Maybe need
administrative privileges.
Note the double slash in the beginning is likely interpreted as a
Windows share URI / UNC path.
The same would happen when passing -prefix '\Users\qt\work\install'
As a reminder, we want to support drive-less prefix paths because
that's what Qt's Coin CI uses passes to ensure DESTDIR installation
works correctly.
Amends cb7f4030bc
Pick-to: 6.2 6.3
Fixes: QTBUG-94366
Change-Id: I9267b6f784babfbdaeafc65267ba96c75fa24112
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
Previously we used sh $* for passing parameters of various calls like
cmake / configure. This did not properly preserve quoted arguments,
leading to potential issues.
For example when configuring qtbase with
cmake -DQT_QMAKE_DEVICE_OPTIONS="DISTRO_OPTS=hard-float boot2qt"
the 'boot2qt' option would be passed as a separate argument to cmake,
leading to the QT_QMAKE_DEVICE_OPTIONS cache var containing only
'DISTRO_OPTS=hard-float'.
Use "$@" to preserve the quotes.
Inspired by
https://wiki.bash-hackers.org/scripting/posparams#all_positional_parameters
Amends e9b8837c31
Pick-to: 6.2 6.3
Change-Id: Ib67d4bc138c65f7430457cb2a2baa55bff72e549
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
The -mno-direct-extern-access tells the compiler and linker that
references to symbols outside this ELF module mustn't be direct and must
instead always go through the GOT or PLT (the PLT can additionally be
disabled with -fno-plt). The ELF protected visibility tells the compiler
and linker that this symbol is present in the dynamic symbol table as an
export, but it cannot be interposed by another ELF module.
This option is required for user code to link properly to Qt, otherwise
they will get linker errors (assuming GNU binutils >= 2.39) or runtime
failures (glibc >= 2.35). Both versions of glibc and binutils are older
than GCC 12, so it's a safe assumption they are in use and downgrading
the toolchain or libc is not supported. Adding this option to the
compilation is assured for CMake and qmake-based projects.
For example, all accessess to QCoreApplication::self in QtCore, after
this change and with GCC 12 are relocation-free and direct:
000000000013ebf0 <QCoreApplicationPrivate::checkInstance(char const*)>:
13ebf0: cmpq $0x0,0x4f73d0(%rip) # 635fc8 <QCoreApplication::self>
13ebf8: setne %al
13ebfb: je a90fe <QCoreApplicationPrivate::checkInstance(char const*) [clone .cold]>
13ec01: ret
Meanwhile, accesses to the same variable in other modules are indirect
via the GOT:
66650: mov 0x876e1(%rip),%rax # edd38 <QCoreApplication::self@Qt_6>
66657: cmpq $0x0,(%rax)
This replaces the -Bsymbolic and -Bsymbolic-functions (broken)
functionality that Qt has been using or attempting to use since ~2006.
See https://gitlab.com/x86-psABIs/x86-64-ABI/-/issues/8#note_606975128
Change-Id: Iad4b0a3e5c06570b9f5f571b26ed564aa0811e47
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
And also remove check for DtlsV1_2OrGreater for negotiated
session protocol, since it must have been resolved to a specific
protocol by this point.
Fixes: QTBUG-100154
Pick-to: 6.3 6.2
Change-Id: I3aec31faed8b9cb22be0062da057c62864eba34f
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
The data scope was wrong, it needs to live beyond the attribute strut
Change-Id: If1ceb4967fc1755d4968a69bcd9d82b234bd871d
Done-with: Vincent Rouillé
Fixes: QTBUG-101551
Pick-to: 6.3 6.2 5.15
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Reviewed-by: David Skoland <david.skoland@qt.io>
QObject's cache the binding status pointer to avoid TLS lookups.
However, when an object is moved to a different thread, we need to
update the cached pointer (as the original thread might stop and thus no
longer exist, and to correctly allow setting up bindings in the object's
thread).
Fix this by also storing the binding status in QThreadPrivate and
updating the object's binding status when moved. This does only work
when the thread is already running, though. If it is not running, we
instead treat the QThreadPrivate's status pointer as a pointer to a
vector of pending objects. Once the QThread has been started, we check
if there are pending objects, and update them at this point.
Pick-to: 6.2 6.3
Fixes: QTBUG-101177
Change-Id: I0490bbbdc1a17cb5f85044ad6eb2e1a8c759d4b7
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
QComboBox is included because it works like a button when it is not
editable. QGroupBox is included because it has a checkbox and QCheckBox
is a subclass of QAbstractButton.
Change-Id: Iad89259314e77f78c915dce83ec601df94c88941
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
The q_toPercentEncoding() overload without percent parameter and the
q_normalizePercentEncoding() function are nowhere used. Although they
were extern symbols, they were not declared in a header. Thei names
mark them as Qt-internal. So removal should be safe.
Change-Id: If6cece20796a80d98a9af4e764443f3ab8c555c9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Qt Creator crashes when max is INT_MAX and min is -1, see bugreport.
Change-Id: I441e76c0ff87052083ed3d77e6085b186402e5d8
Fixes: QTBUG-101581
Pick-to: 6.2 6.3
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
There seems to be lot of timeouts on testing where qemu is not able to
start at current 60 seconds period.
Pick-to: 6.2 6.3
Change-Id: Icbc47b75a8288e672237789cb273ef5a644c08ba
Reviewed-by: Dimitrios Apostolou <jimis@qt.io>
Rename isLocked in preparation for a future commit. Rename m
as well for consistency.
Change-Id: I1c8d040bca6825a698ec804ea142d208abacd5cc
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
From Clang 13:
qlocale.cpp:854:161: error: expression with side effects has no effect in an unevaluated context [-Werror,-Wunevaluated-expression]
Pick-to: 6.3
Change-Id: Ibf4acec0f166495998f7fffd16d6c75ef1e04262
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Required for the API symmetry between QStringView and QLatin1String.
[ChangeLog][QtCore][QStringView] Added an overload of
QStringView::count() for QLatin1String.
Change-Id: Ic49a4b31e8f6f0969eff0f792654d23a60e06c49
Task-numer: QTBUG-98431
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Due to some unfortunate shadowing
Pick-to: 6.3 6.2 5.15
Change-Id: Ib2660516f9ba9974c84a043bd2677b7890fc76f9
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
In static member function 'static QQnxAbstractVirtualKeyboard::EnterKeyType
QQnxAbstractVirtualKeyboard::qtEnterKeyTypeToQnx(Qt::EnterKeyType)':
warning: control reaches end of non-void function [-Wreturn-type]
Pick-to: 6.2 6.3
Task-number: QTBUG-101382
Change-Id: If3b0eda5d36257b0fbed54fb0a032c3b9d7ff989
Reviewed-by: James McDonnell <jmcdonnell@blackberry.com>
Also change qt_safe_read to use correct return value.
warning: format '%d' expects argument of type 'int',
but argument 3 has type 'size_t' {aka 'long unsigned int'} [-Wformat=]
warning: format '%u' expects argument of type 'unsigned int',
but argument 3 has type 'ssize_t' {aka 'long int'} [-Wformat=]
Pick-to: 6.2 6.3
Task-number: QTBUG-101382
Change-Id: I1ee42b84a477451a98838c8cea3cca7c73f7cbaa
Reviewed-by: James McDonnell <jmcdonnell@blackberry.com>
Patch 13399bd54d084ed837ec061ca9315dbd173f3b48 removed the accept
handler on QQuickFileDialog, which was triggering setSelectFiles on
android.
So changed qandroidplatformfiledialoghelper to also emit currentChanged
which will trigger the QQuickFileDialog to setSelectFiles since there
is a connect to that signal. Emitting currentChanged signal is also the
signal used in others QPlatformFileDialogHelpers.
Fixes: QTBUG-101013
Pick-to: 6.3
Change-Id: I22f2d583f4be26a83e1c19190458fb5011e40095
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
libjpeg's internal putenv() function uses system setenv(), but that is
not found when building for webassembly. Just disable the entire
putenv function, since it is not used anyway.
Pick-to: 6.3 6.2 5.15
Change-Id: I1eb60f31562ef4e33c656ff3b3752bef6f88fcb8
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Reading the kernel sources, I was sure we'd get an ECHILD if the child
hadn't exited yet, but that's not the case. We only get ECHILD if the
current process has no child processes. But if we do have one and the
one we're waiting for hasn't exited, waitid() returns 0.
So let's not attempt to correct it with forkfd_wait() or forkfd_wait4().
Those have "wait" in the name, so they should behave exactly the same
way. The man pages say:
waitpid(): if WNOHANG was specified and one or more child(ren)
specified by pid exist, but have not yet changed state, then 0 is
returned.
waitid(): returns 0 on success or if WNOHANG was specified and no
child(ren) specified by id has yet changed state
This was found while studying QTBUG-100174.
QProcess does not use this code path (blocking mode forkfd only).
Matching OpenDCDiag PR:
https://github.com/opendcdiag/opendcdiag/pull/62
Pick-to: 6.2 6.3
Change-Id: Ibf4acec0f166495998f7fffd16d6de6853a6e5a8
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Specify that it should not be called until the internal
socket engine has been created.
Given that most usages of this function will be on QUdpSockets
and that people will likely want to call bind() on those
anyway, we just document this rather than implement some
caching mechanism.
Pick-to: 6.3 6.2
Fixes: QTBUG-67576
Change-Id: Ia5d3ade95460b7c5685681ee098f1c00bff43a90
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
By changing it to unique_ptr.
Pick-to: 6.2 6.3
Change-Id: I91abb69445b537d4c95983ae735341882352b29d
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
We always enable directories, so that the user can navigate into them,
so we should do the same for symlinks and aliases to directories.
This is the same behavior the native dialog has when not implementing
shouldEnableURL and relying purely on allowedFileTypes.
Fixes: QTBUG-28379
Pick-to: 5.15 6.2 6.3
Change-Id: I7ae4eb8120aa87cb685f3561d5e1c7257b0c9349
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Also contains some fixes which fix the Windows build, amending
e1b8257dee.
Pick-to: 6.3
Fixes: QTBUG-101294
Fixes: QTBUG-101304
Change-Id: I779f50fc705ed32f0314daf28b39b477a7fe925d
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>