Added new API setDocumentXmpMetadata/documentXmpMetadata and
addFileAttachment
[ChangeLog][QtGui][QPdfWriter] New API to provide external document XMP
metadata and attach files to PDF.
Fixes: QTBUG-78651
Fixes: QTBUG-78764
Change-Id: Ic0b37e8d12899f907001db469080594c14c87655
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
It wasn't tested and behaves in a very particular way.
Change-Id: I60a31681e5b221cf9a86df77e410a76ee4c10864
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
Don’t reset highDpicaleFactorRoundingPolicy in the
QGuiApplication destructior. This is a static property,
independent of the application object lifetime.
Change-Id: Ibf55e2a6ea1ae6429fce3f0e9d58323111aac374
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Qt 5.14 introduced QApplication::scaleFactorRoundingPolicy,
where the default policy rounds the scale factor to
an integer, which matches Qt's behavior on Windows and X11.
However, Qt has never rounded scale factors on Android.
Restore the historical behavior and document the platform
difference.
Change-Id: I0f8e8fb65e3874338ea290bbb12da350da22f099
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Otherwise the expose event that AppKit triggers will be delivered before
we've propagated the theme change, and we fail to draw the UI using the
new theme.
Change-Id: I502122a2bf02a866d136106d831f0c2a0dfe26f2
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
The result of createAlphaMask was mostly overwritten and then inverted,
we can write the right values directly instead.
Change-Id: I3cdddcc74218a4058bddd20178733688607c8a01
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
clang-cl errors out with an unknown #pragma on the scope turning
off optimization for MSVC2012. Remove it since MSVC2012 is no longer
supported.
Change-Id: I46610885e10158bc5b3666b7698dc1162dbac8a7
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
This method should not ignore accessibility objects without
corresponding widget. The widget may have parts with their own
QAccessibilityInterface and these can be also focused.
VoiceOver ignores them if they are not returned by focusChild().
QAccessibleTabBar::focusChild() has been implemented to demonstrate
the concept and make tab titles of QTabBar readable by VoiceOver.
Task-number: QTBUG-78284
Change-Id: Id7c62d86154bbd5d47d6bbee8cb7d05268c2e151
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
for QCursor::swap and QOperatingSystemVersion::currentType.
Fixes: QTBUG-80854
Fixes: QTBUG-80891
Change-Id: Ia256fa0d3ad4665f44b933f5a4a8d4ee87e9fc13
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Apply some minor fixes to the widget docs
- use nullptr
- use c++11 initializer list
- properly delete widget when cleaning the layout (QTBUG-29471)
- rework CardLayout example to make it work with Qt5
Fixes: QTBUG-29471
Change-Id: Ie2ee9f75eb8faf97d2bbd2c25e7013d4f30d8dd0
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
The auto-detection Xcode has for whether GPU capture should be enabled
always enables it for our projects, which adds up to second to the
startup time when debugging. There's no need to pay this cost unless
you're actively debugging Metal code.
Change-Id: I4a76c4e7afedad4bb43395ae64bc0f8d62eca6be
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
After aa8d3f90a4 the default width of the
spinbox buttons is calculated from the spinbox width. This is wrong
because the initial width (e.g. when the spinbox is not yet shown) is
640 pixels which results in a too long width.
Therefore fall back to the old hard-coded value version but instead
using 20 pixels, use 16 to be in sync with the stylesheet style value
and honor the dpi of the screen by using QStyleHelper::dpiScaled().
Fixes: QTBUG-79806
Fixes: QTBUG-80814
Change-Id: I45786684575273f940e498df3b7639e626f00a7e
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
There's no reason to use a class-static mutex object here.
Use a namespace-static QBasicMutex, port to qt_scoped_lock.
Change-Id: Ia9bd3c2fadbf1da25ef79bb393c899b678cbc182
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Some versions of GNOME 3 would set Xft.dpi with fraction though that
is technically not valid.
Change-Id: Ib1027283cc78fd5d9869cd337864a92e28cd7e88
Fixes: QTBUG-64738
Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
If moc is invoked with the --output-dep-file option, it will generate
a "moc_<source_file_name>.d" dep file which contains dependency
entries that can be consumed by a Makefile / Ninja build system.
This is useful for build tools (like CMake) to know when moc should be
re-ran.
In the future, it might also be useful for ccache (teach ccache not to
re-run moc when not necessary).
The dependency list contains: the original source file, the passed
--include files (like moc_predefs.h), the include files that
were discovered while preprocessing the source file, and the plugin
metadata json files listed in Q_PLUGIN_METADATA macros.
The file paths are encoded using QFile::encodeName, so using the local
8-bit encoding.
The paths are also escaped (so ' ' replaced by '\ ', '$' by '$$',
etc) according to the Make-style rules as described in
clang's dep file generator
https://github.com/llvm/llvm-project/blob/release/9.x/clang/lib/Frontend/DependencyFile.cpp#L233
For reference, the equivalent Ninja depfile parser source code can be
found at
https://github.com/ninja-build/ninja/blob/v1.9.0/src/depfile_parser.in.cc#L37
Additional options that can be passed:
--dep-file-path - to change the location where the dep file should be
generated.
--dep-file-rule-name - to change the rule name (first line) of the
dep file (useful when no -o option is specified, so output goes to
stdout).
Encoding story.
Note that moc doesn't handle non-local-8-bit characters properly when
processing include directives at the preprocessor step. Specifically
the content of the main input file is read as a raw byte array (which
can be UTF-8 encoded) and then each include directive is resolved via
Preprocessor::resolveInclude(), which calls QString::fromLocal8Bit().
Because moc uses the QtBootstrap library, only a limited set of codecs
are available: various UTF 8 / 16 / 32 codecs and
QLatin1Codec (ISO-8859-15).
This means that on Windows, if the source input file is UTF-8 encoded,
and contains include names with UTF-8 characters (like an emoji or any
character >= 127 that is not in the QLatin1 codec), moc will fail to
resolve and process that include, and thus no dep file entry will be
created either.
On macOS / QNX / WASM the main locale is UTF-8, so file content
and paths will be processed correctly (hardcoded via QT_LOCALE_IS_UTF8
in src/corelib/codecs/qtextcodec_p.h).
On Linux it will depend on the current locale / encoding set,
and if that encoding is one of the ones supported above. UTF-8 should
work fine.
[ChangeLog][QtCore][moc] moc can now output a ".d" dep file that can
be consumed by other build systems.
Task-number: QTBUG-74521
Task-number: QTBUG-76598
Change-Id: I5585631ff1bbbae4e2875cade9cb6c20ed018c0a
Reviewed-by: Leander Beernaert <leander.beernaert@qt.io>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
The two static setPalette methods in QApplication and QGuiApplication
should have the same behavior in terms of what signals and events
they emit.
Change-Id: I54579d490e31f3783e2d4fea689ca799a070ff1d
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
After 8fb881900c it's tracked by AA_SetPalette. Since the latter
is publicly observable we remove the internal flag instead.
Change-Id: Ie69799f1b45d68017cb9eaab2a9986cc9ac9ca38
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
This change provides a way to disable the automatic showing of the native
Windows on-screen virtual keyboard when a text editing widget is
selected on a system without a physical keyboard, by enabling the new
AA_MSWindowsDisableVirtualKeyboard application attribute, allowing
applications to use a custom virtual keyboard implementation.
Fixes: QTBUG-76088
Change-Id: Id76f9673a2e4081e5325662f3e3b4b102d133b9a
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Even though each line in the array passed to drawLines() should be
rendered as an independent line, some state was kept in the cosmetic
stroker from one line to the next. This could result in visible
rendering errors.
Fixes: QTBUG-80834
Change-Id: Ief7bf78eab83ae34459802bff5a57d6beec4a5e5
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Remove documentation about QMIN, QMAX and QABS - they were removed
during Qt4 -> 5 porting.
Change-Id: I24e12e4f2bba635ff412e73dd1d0134bbab5247a
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
QStringListMode::moveRows() had an issue when the destination was before
the source row.
Change-Id: Icf64e5b4cdd6a39faf3ba4ccc3883196b247ccbd
Reviewed-by: Luca Beldi <v.ronin@yahoo.it>
Reviewed-by: David Faure <david.faure@kdab.com>
The implementation of QTextDocument::print() is not available when
QT_NO_PRINTER is defined but the declaration was so when someone is
using this function (and QT_NO_PRINTER) a linker error will occur.
Fixes: QTBUG-56916
Change-Id: I49aaaa643c4d8587a66fc95733060cea11994872
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Make sure that when we call $$qtConfEvaluate("features.shared")
early, the result is not cached via the available key, so that
the value is properly re-evaluated further on when all features
are processed.
Fixes the error message when reconfiguring an Android build
"Unknown feature object shared in expression '!features.shared'."
Amends 4ac872639e
Task-number: QTBUG-79639
Task-number: QTBUG-80096
Change-Id: Ic1cbadac15c34468a9115cc8ec5ea07630185772
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
QListModel::moveRows() had an issue when the destination was before the
source row.
Change-Id: I4ce8b425451f2f53c7eb3b211e9590753dec618a
Reviewed-by: Luca Beldi <v.ronin@yahoo.it>
Reviewed-by: David Faure <david.faure@kdab.com>
Since commit 9ab043b6 we're checking for invalid file paths passed to
Qt's file system engine. When initializing the deployment tool for VS
projects we accidentally passed a file path containing '\0'. Fix that by
using an infix QString, not QChar.
Change-Id: Ieae066d20ac290354febd420abce68f28649b365
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
This is not to be taken as supported and is still undefined behavior,
but I prefer we do not crash.
Change-Id: Icf4f3398bfd57fcbdc611a5a821a1f2de0838330
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
Requires a third definition for the source-compatible but deprecated
version.
Change-Id: I260ae79f4547f99eed701b10e0b25222f81cd5ff
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Emscripten version 1.39.0 and above are based upon upstream LLVM, which
does not contain BINARYEN_TRAP_MODE
Fixes: QTBUG-80691
Change-Id: I6129f84a31a607c202e13847b50705ef1c809630
Reviewed-by: jian liang <jianliang79@gmail.com>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
The previous implementation was *extremely* expensive. It
relied on loading a binary JSON file from resources (which
involved decompressing it), then extracting information out of
it to build a gradient. Already-loaded gradients were kept in
a local cache, which had to be mutex protected.
Instead, this patch extends the gradient generator to build
static arrays filled with the web gradient data, sitting in
.rodata.
These arrays are used when building QGradient objects with a
web gradient. No explicit mutex protection is necessary, since
accesses will just read from the arrays.
As benefits, this patch removes:
* the binary json representation from QtGui's resources (~4KB
compressed, ~50KB uncompressed)
* the overhead of reading from the JSON for each used web
gradient;
* the startup costs of registering the webgradients in the
resources;
* all the overhead of mutex locking when building such
gradients;
* all the runtime memory allocations to load, parse and cache
the web gradients (including the memory + CPU spike on first
load due to the uncompression of the JSON data, as well as a
couple of deep copies).
Change-Id: If5c3d704430df76ce8faf55ee75ebd4639ba09c4
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
QItemSelectionModel::columnIntersectsSelection() should honor the parent
according to the docs. For rowIntersectsSelection() this was fixed a
long time ago but columnIntersectsSelection() was forgotten.
Sync the both functions and use range-based for loops as a drive-by.
Fixes: QTBUG-80644
Change-Id: Iaf08f85e2225204d1e6564fa4bb0bc826352ed53
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Fix the links, remove section about Q_ODBC_VERSION_2 - it wasn't there
since Qt5.0.
Change-Id: I571f5c2cf0f0e2df38638299c26814b510d1a8af
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
When an existing item is replaced with a new one in
QStandardItemModel::setItem() then the persitent index is invalidated
which leads to some unexpected behaviors (like e.g the header size and
resize mode are reset).
Therefore we have to make sure that the invalidation does not happen.
This can be achieved by delaying the call to QStandardItem::setModel()
for the old item until the new is properly added. After this, the old
item no longer gets a valid QModelIndex from the model and therefore
can't invalidate the persistent index anymore.
Fixes: QTBUG-13605
Fixes: QTBUG-73000
Fixes: QTBUG-80586
Change-Id: I4e45e6feb81b7287c0859f638d7ab1a576fc2f0f
Reviewed-by: David Faure <david.faure@kdab.com>
In part, this is a continuation of
https://codereview.qt-project.org/c/qt/qtbase/+/227953. It also paves
the way toward implementing the EglDisplay integration resource needed
by QtWayland.
For the code that's being moved around and modified, switch from
!QT_NO_OPENGL to QT_CONFIG(opengl).
Change-Id: I5046e8caf5df7cf326f8e697d7d41cf802250414
Reviewed-by: Dan Cape <dcape@qnx.com>
Reviewed-by: Samuli Piippo <samuli.piippo@qt.io>
The typedef "QOPENGLF_APIENTRYP" was incompatible to the one
in "src/opengl/qopengldebug.cpp" which used "QOPENGLF_APIENTRY".
Note the misisng "P " ending.
The type is meant to be a function pointer, not a pointer to a
function pointer, so remove the extra P.
Change-Id: I229b73ca8e7367f88a2b48e2728e615605f02da3
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>