Commit Graph

9555 Commits (1fe60cbcc3c476f5f4bc4bce49d4e73d99c49d3d)

Author SHA1 Message Date
Tor Arne Vestbø dde45bcefb Consult QIcon::fallbackSearchPaths() even when theme name is empty
The use of fallback icons should not depend on a theme being set.

[ChangeLog][QtGui][QIcon] QIcon::fallbackSearchPaths() will now be consulted
for fallback icons even if the current theme name is empty.

Pick-to: 6.5 6.6
Change-Id: Ia8d14062de7c53601fd9dac30f87a9e672aa2207
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
2023-06-18 20:28:57 +02:00
Tor Arne Vestbø f4dca7c512 Consult QIcon::fallbackThemeName() even for themes with explicit parents
We would previously only use the fallback theme for themes that did
not exist, or for themes that did not declare any parent theme.

We now unconditionally use the fallback theme, even for themes that
declare their own parent themes, so that a QIcon::fromTheme("foo")
that doesn't exist in the current theme, nor any of its parents,
nor in "hicolor", will still be looked up in the fallback theme.

The reason this seemed to work in the existing tests was because
our test themes inherit system themes such as crystalsvg and gnome,
and we didn't provide a hicolor theme. Any of these themes missing
would lead us into the code path where we use the fallback theme
for a missing theme, masking that fact that we had not added the
fallback theme to the list of fallbacks for the theme that had
explicit parents declared.

The logic has been moved out of the theme parsing and into an
accessor in QIconTheme, so that we're not caching the fallback
theme lookup.

[ChangeLog][QtGui][QIcon] QIcon::fallbackThemeName() will now be
used as fallback even for themes that declare a parent theme.

Pick-to: 6.5 6.6
Change-Id: Ib0ce1dfe97030f23893460ed624073a719a3ebd1
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
2023-06-18 10:49:14 +02:00
Tor Arne Vestbø ae36c1dc9c Invalidate QIconLoader cache when setting fallback theme
Setting a fallback theme will affect the lookup strategy, so we need
to invalidate earlier lookups.

Pick-to: 6.5 6.6
Change-Id: I962245ddb3a20b7798d5ce831ed8a369b0ab76b4
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
2023-06-18 00:05:18 +02:00
Tor Arne Vestbø 4dacaaf15a Skip clearing the QIcon cache on QIconLoader theme key change
QThemeIconEngine takes care of creating a new icon engine when
the icon theme key changes, so we don't need to invalidate the
entire QIcon cache.

Pick-to: 6.6
Change-Id: Ie3bca00a9146d1f429b2a6f8ab0b39e15834d158
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
2023-06-17 22:13:36 +02:00
Tor Arne Vestbø a452e22546 Unify QIcon theme icon loading and cache invalidation
The logic for invalidating a theme QIcon when the platform theme
changed, or when the user set an explicit icon theme, was tied
to QIconLoaderEngine, so any platform theme implementing
QPlatformTheme::createIconEngine() with a custom icon engine
would not take part in this cache invalidation.

As we want users of QIcon::fromTheme to be agnostic to where the
icon is actually coming from, and have a consistent behavior for
the various QIcon APIs for setting explicit themes, the logic
for invalidating the themed icon has now been moved up one
layer, to a new QThemeIconEngine, that is responsible for
lazily creating the actual engine based on the name. The
engine proxies the actual icon loading through to the
real engine via a new QProxyIconEngine helper class.

Pick-to: 6.6
Change-Id: I474589981f751d7467e3073533cba542182f2d36
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
2023-06-17 17:52:01 +02:00
Tor Arne Vestbø e9276d7497 QIconLoader: Invalidate cache even if system theme hasn't changed name
The platform theme's icon loading logic may still have changed, even
if the theme name has not, so we still need to invalidate the theme
cache.

Pick-to: 6.5 6.6
Change-Id: Id3635c235fadb007df86d93ce3beb5622d26b8bf
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
2023-06-16 21:54:36 +02:00
Tor Arne Vestbø 89fe108590 Use systemFallbackThemeName in QIconLoader::updateSystemTheme()
The fallback logic in QIconLoader::updateSystemTheme() has been
updated to match QIconLoader::ensureInitialized(), by using the
systemFallbackThemeName() directly, rather than the possibly
user set QIconLoader::fallbackThemeName().

Pick-to: 6.5 6.6
Change-Id: Ib5aab62bbfb22683d3bddf87c4e798eca4a5af62
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
2023-06-16 21:54:36 +02:00
Tor Arne Vestbø 883c3dc8c8 Update QIconLoader system theme unconditionally on ThemeChange
We cache the system theme name in QIconLoader, so when a theme change
comes in we need to update the system icon theme name regardless of
whether a user theme has been set.

The updated system theme name will not be reflected through the
QiconLoader::themeNamed() unless the user theme is cleared/unset.

Pick-to: 6.6 6.5
Change-Id: Id949e55e2fa12e40818ba54cf2a10ce48fe10815
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
2023-06-16 21:54:36 +02:00
Laszlo Agocs 684070bc34 rhi doc: Fix a repeating typo
Pick-to: 6.6
Change-Id: I2025d559be357a6825cdcae4cb0f0931a89864ab
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2023-06-16 19:42:12 +02:00
Ilya Fedin 3025dc597f Update QIconLoader system theme names on QWSI ThemeChange
The GTK platform theme (and possibly others) emit theme change
when the named icon theme changes, but that was not propagated
to QIconLoader.

We now call QIconLoader::updateSystemTheme(), but note that
if a user theme has been set we ignore the system theme update
and will end up with a stale value, even if the user theme is
later cleared. This will be fixed in a follow up commit.

Pick-to: 6.6 6.5
Change-Id: I40b537f3618f44d396db0c7ca67e515dfcdfba44
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2023-06-15 21:20:53 +02:00
Wladimir Leuschner f5206b3812 Skip generation of glyphs for control characters
QFontEngine tries to generate glyphs for ASCII control characters. Those
characters have no glyphs and should therefore not be generated.

Task-number: QTBUG-113848
Change-Id: Ib15a50c642d8bc92bc007ab5522aebc5a7b2993d
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2023-06-15 14:55:07 +03:00
Tor Arne Vestbø f3c2cf47fc De-inline QIconLoader::themeName()
The method is more than a plain getter, so keep it with the other
logic of the class.

Pick-to: 6.5 6.6
Change-Id: I34aa185a51f04e3db3c1918f9723e53f33e5e9e1
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2023-06-15 13:42:39 +02:00
Venugopal Shivashankar 4af07d6e54 Doc: Mark QRasterPaintEngine as \internal
Most of the QWS (Qt Windowing System) classes from
the Qt 4 times are cleaned up in Qt 6. Any existing
QWS API documentation should be marked \internal.

Pick-to: 6.2 6.5 6.6
Task-number: QTBUG-35605
Change-Id: I24201406114feaf8af21403b09375a2ee9a4709e
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2023-06-14 10:21:31 +00:00
Laszlo Agocs dbaa4fd082 rhi: metal: Fix a leftover version check
Pick-to: 6.6
Change-Id: I907d4d312f03658d6f04a626a7df96f7e2b4955a
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2023-06-13 14:48:10 +02:00
Laszlo Agocs 67f1c360b6 rhi: Add missing enum to QShader docs
Task-number: QTBUG-113331
Pick-to: 6.6
Change-Id: Ibc792c1d30518efbae5f946360e7470aecc00d9f
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2023-06-13 14:48:10 +02:00
Eskil Abrahamsen Blomfeldt 0ed324314b doc: Remove bogus step in font resolution algorithm
This is a left-over from when setFamilies() and setFamily() were
setting two different properties, for compatibility reasons.
There is no longer a special step for the singular family, and the
sentence is also a bit obfuscated, so we just remove it.

Pick-to: 6.2 6.5 6.6
Change-Id: Ia3c244d41f550a5062de8de63053770258dcacba
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2023-06-13 13:48:05 +02:00
Tim Jenssen 195c893424 QMacCGContext::initialize: Handle QPixmap without platform pixmap
Regression after 585150e3d9.

Pick-to: 6.5 6.6
Change-Id: Ie728904736dd41fb8dfa6ecc9f843beea95b4604
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2023-06-12 21:55:37 +00:00
Paul Olav Tvete de9e978532 Fix for QQuaternion normalize when length > 1
If the length of the quaternion was slightly larger than 1,
the resulting quaternion would be invalid, causing
getAxisAndAngle() to fail.

Fixes: QTBUG-114313
Pick-to: 6.5 6.6
Change-Id: I8f0616e74590dd6cfee0ce913d214c8e280c4df4
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2023-06-12 15:46:07 +02:00
Marc Mutz b209f943d2 Replace {add,sub,mul}_overload with q{Add,Sub,Mul}Overload
These APIs started out as private APIs in qnumeric_p.h, but have since
been made pseudo-public in qnumeric.h. The qnumeric_p.h versions just
forward to the qnumeric.h ones, so just use the latter.

This is in preparation of removing the {add,sub,mul}_overflow
versions, which, despite being defined in the unnamed namespace, don't
sport the q prefix, so potentially clash with global symbols.

The change is a simple textual search and replace, manually excluding
qnumeric_p.h.

Picking to 6.5 to avoid cherry-pick conflicts going forward.

Pick-to: 6.6 6.5
Change-Id: Ic0f7c92f7c47923317109e8a9dc06fa66bdff2c2
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
2023-06-12 13:11:26 +00:00
Tor Arne Vestbø 5ea0256b07 rhi: Don't check m_format in QRhiSwapChain::hdrInfo()
The HDR info is independent of the current format anyways.
Removing the format check allows code to use hdrInfo() as
a signal for whether to set a HDR format, instead of having
to set the format, then query hdrInfo(), and then setting
SDR again if needed.

Pick-to: 6.6
Change-Id: I99b57335003d06af227f2a7078560c2a483b049b
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2023-06-11 08:50:04 +02:00
Tor Arne Vestbø 5302fb64af rhi: Only report HDR as supported if maxPotentialColorComponentValue > 1
Pick-to: 6.6
Change-Id: I4c951e8c651b2bee41aba8ff69f481a08d6a3561
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2023-06-11 08:49:58 +02:00
Tor Arne Vestbø 183629e3ef rhi: Add QRhiSwapChainHdrInfo::maxPotentialColorComponentValue
Knowing the maximum potential component value can be useful
to potentially (sic) opt out of an HDR code path if the maximum
color component value will be too low to make the additional
processing overhead worth it.

Pick-to: 6.6
Change-Id: Ib1e1b7a745b236e1d137a1e7daf1248f1572e184
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2023-06-11 08:49:53 +02:00
Tor Arne Vestbø 74319d05b1 rhi: Pick up HDR maxColorComponentValue from UIScreen if available
Although QRhiSwapChainHdrInfo uses 'max' for this value, it's used
by Qt Multimedia's QVideoWindowPrivate::render() as the current
maximum, so we need to reflect UIScreen's currentEDRHeadroom
rather than potentialEDRHeadroom (the absolute max), the same
way we reflect maximumExtendedDynamicRangeColorComponentValue
and not maximumPotentialExtendedDynamicRangeColorComponentValue
from NSScreen.

As we don't support HDRExtendedSrgbLinear on < iOS 16 there
is no point in providing a heuristic fallback based on the
iPhone 12 spec.

Pick-to: 6.5 6.6
Change-Id: If071bb64f269ce16886206df05eb9f27d260bf15
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2023-06-11 08:49:47 +02:00
Marc Mutz 78cdd9a64d QPixmapCache: deprecate replace()
The replace() implementation overwrites the passed Key key with a new
version, const_cast'ing away the const from the key passed by
reference-to-const. This is UB if the Key was originally declared
const.

Deprecate the function.

Also inline the const_cast, so compilers can readily detect the UB
even if users don't enable deprecation warnings. Due to the severity
of the issue (UB), immediate deprecation is warranted. There appear to
be no in-tree user of the API outside of tst_qpixmapcache.cpp.

[ChangeLog][Deprecation Notice][QtGui][QPixmapCache] The `replace(key,
pixmap)` function has been deprecated, because passing a `const Key`
to it results in undefined behavior. Use `remove(key, pixmap)`
followed by `key = insert(pixmap)` instead.

Pick-to: 6.6
Change-Id: Ic5060ce3271f2a1b6dc561da8716b452a2355d4c
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2023-06-10 00:29:06 +02:00
Topi Reinio 17ddf2a6a5 Doc: Fix documentation issues
The Qt Widgets Application example was moved to manual tests,
and no longer contains the snippet identifiers. Fix \snippet
and \quotefile commands to quote similar code snippets from
other examples or snippet files.

Fix also the following documentation warnings:

* No such parameter 'parsingMode' in QUrl::fromEncoded()
* Missing image: rsslisting.cpp

Pick-to: 6.6 6.5
Change-Id: Ibc989e83abc49837db08628facaf8e5f72b2f123
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2023-06-09 18:24:15 +00:00
Volker Hilsheimer bd29b03368 Remove links from the Text Object example
It's an example in Qt SVG that is to be removed.

Pick-to: 6.5 6.6
Change-Id: I6e8cf38885649ca10f70a70b8400873c97bf1698
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2023-06-09 14:32:48 +02:00
Marc Mutz 588ca25e4a QPixmapCache: add a comment on how failed insert() invalidates cacheKey
It wasn't obvious to me, at least, and I only found out about it when
I failed to construct a test failure based on this.

Pick-to: 6.6 6.5 6.2 5.15
Change-Id: I339132d7bb2cb8a76f0f1feec37891d6131c4d7b
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2023-06-09 14:32:48 +02:00
Michael Weghorn c7b925757f a11y atspi: Report correct char code point when it's > 65535
QString uses UTF-16 encoding and thus "unicode characters with
code values above 65535 are stored using surrogate pairs,
i.e., two consecutive QChars.". [1]

When the character inside of text is retrieved using the
GetCharacterAtOffset method of the AT-SPI Text interface,
use QStringIterator to retrieve the character's actual
codepoint instead of returning an invalid/incorrect one.

[1] https://doc.qt.io/qt-6/qstring.html

Pick-to: 6.6
Fixes: QTBUG-113438
Change-Id: I07108481716329fd23a92c88892eaedd3f9defc6
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2023-06-09 07:20:13 +03:00
Tor Arne Vestbø 95d10ae682 rhi: Enable HDRExtendedSrgbLinear for iOS
Pick-to: 6.5 6.6
Change-Id: Iaff3c0d18c07cc0cd4ed57a8e6fa7fb07b130a58
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2023-06-09 00:24:20 +02:00
Tor Arne Vestbø f341f75c8c Align QKeySequence behavior between macOS and iOS
External keyboards for iOS/iPad devices have the same Macintosh based
keyboard as Macs have, with Command (or Cmd) ⌘; Option (or Alt) ⌥;
and Control (or Ctrl) ⌃ keys.

We were already declaring the QPlatformTheme::KeyboardScheme as
MacKeyboardScheme on iOS.

[ChangeLog][iOS] Keyboard shortcuts now follow the same scheme as on
macOS, with their native representation expressed via the ⌘, ⌥, and ⌃
modifiers. Use Qt::AA_MacDontSwapCtrlAndMeta to override this.

Pick-to: 6.6
Fixes: QTBUG-113165
Change-Id: Ia1856ee1718dab9f2f2512ffffc8b4d3cc5adecc
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2023-06-08 18:25:59 +02:00
Axel Spoerl 203550cf76 QPalette Fix documentation typo
compliments -> complements

Pick-to: 6.6
Change-Id: I5457582299d9cd7d39c8f17ad445cdb796bc8e59
Reviewed-by: Andreas Eliasson <andreas.eliasson@qt.io>
2023-06-08 13:04:45 +02:00
Eskil Abrahamsen Blomfeldt 1dc88a1b5f Avoid infinite loop when loading huge files
QTextDocumentLayout could get into an infinite loop when the
contents exceeded QFIXED_MAX.

Specifically, QFIXED_MAX is used as meaning "one infinite page"
which means that newPage() will just return when it sees this
page height. If the page actually grew larger than this, though,
we would treat it as a page break and enter a loop where we try
to call newPage() to create new pages and never return.

The layout engine cannot support documents this large, so we detect
the case and then just finish the layout loop early when it is
encountered.

Pick-to: 6.5 6.6
Fixes: QTBUG-112968
Change-Id: I485303d714d112119a971c43e0086bf6d3d23e9f
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
2023-06-08 08:00:06 +00:00
Eskil Abrahamsen Blomfeldt 90e3f0bd73 Freetype: Don't do image transform for translations
In 6ba003f732, we added support
for transforming bitmap fonts in Freetype by rotating the rendered
glyphs as images rather than using FT_Set_Transform(). However,
we enabled this for all transforms, even the ones that were only
doing translations, which is unnecessary and also caused some
issues. We restrict the condition to only cover rotations, scales
and shears and let translations be handled as before.

[ChangeLog][Text][Freetype] Fixed an issue where setting a
translation matrix on text using a bitmap font would cause
rendering artifacts.

Pick-to: 6.5 6.6
Fixes: QTBUG-114229
Change-Id: Ib3f2870e57c881364c85432a7937f15f3664eda7
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
2023-06-08 10:00:06 +02:00
Laszlo Agocs 526744ba65 rhi: vulkan: Fix swapchain format check
Fix the treatment of the sRGB flag. That is independent from the value
of format(), and should be checked regardless of wanting a HDR swapchain
or not. On Android for instance Display P3 with RGBA8 or RGBA8_SRGB is
one of the formats offered. While we do not support this right now,
it is an example of a "HDR" format that still uses a color buffer
format where a dedicated sRGB format is available and must be
chosen according to the specified swapchain flags.

Pick-to: 6.6
Change-Id: I2d97689fa5af7c08486702ae690f2230d06db469
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2023-06-07 14:42:58 +02:00
Laszlo Agocs dc341ea284 rhi: d3d12: Fix swapchain format check
Pick-to: 6.6
Change-Id: Ie2c19ce0aa2c30997a682ed25bc69b2b8e9f7ee0
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2023-06-07 14:42:56 +02:00
Laszlo Agocs 8a1915e04e rhi: d3d11: Fix swapchain format check
...to only return true for HDR formats that are sensible for
Direct 3D. There are currently no other formats, but new ones
may get added in the future.

Pick-to: 6.6 6.5
Change-Id: I4fc6d605da8f6bf2644a4e5c355ab8f1c62ad68d
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2023-06-07 14:42:54 +02:00
Laszlo Agocs bee7d2c610 rhi: metal: Fix a swapchain debug print crash
When enabling the logs, printing hdrInfo() to qDebug
in Qt Quick is something that is done before calling
createOrResize() on the swapchain. (logically since
this is still at the point of configuring the swapchain
settings)

Thus the correct thing to do is to only access m_window,
not the backend data's window.

Pick-to: 6.6 6.5
Change-Id: I3004b0c4a4fdb09cb07a9c0e3c503f79c699c562
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2023-06-07 11:39:42 +00:00
Laszlo Agocs ec27b99c2a rhi widget compositor: Use Nearest filtering
To stay compatible what the OpenGL-based code did before Qt 6.4.

Pick-to: 6.6 6.5
Fixes: QTBUG-113811
Change-Id: I80d89b21dcace9b5c361b964d56f29e996940c24
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2023-06-07 13:39:42 +02:00
Laszlo Agocs 6ec01168d1 rhi: gl: Switch back to Nearest filtering when resolving
...for Qt 5 compatibility. It seems both Qt Gui and Quick calls
the QOpenGLFramebufferObject helper for blitFramebuffer with
the default GL_NEAREST argument for the filtering. In Qt 6 we
must use the same if we want to ensure pixel-perfect compatibility.

Pick-to: 6.6 6.5
Task-number: QTBUG-113811
Change-Id: I03c69448265e7b0d73f021d71135a1725e96fcbc
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2023-06-07 13:39:42 +02:00
Fabio Falsini 211b54ea47 Add flag to hide eye dropper button from QColorDialog
There are cases where this eye dropper control is useful and other
cases where it is useless. In case of an application connected with
graphics it's useful because it allows to select a precise color in
a very simple way. But in the case of a simple app where the user
only has to choose a color for, example, a graph this control is
useless and risks confusing the user (this kind of control is only
present in graphics software, not all "normal" users know what it
is for or understand its use). This patch add a flag to hide the
button.

As a drive-by change, the internal screenColorPickerButton pointer
is renamed to eyeDropperButton to be more consistent with the
qml ColorDialog.

[ChangeLog][QtWidgets][QColorDialog] Added a NoEyeDropperButton
option to hide the eye dropper button.

Change-Id: Ib29d5343383af97c1f488f9e33749517181aead7
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2023-06-06 19:49:06 +00:00
Marc Mutz 6ab0d25a09 QPixmapCache: fix leaking of QStrings and Keys on clear()
QPixmapCache maintains a mapping from QString to QPixmapCache::Key, in
the form of the cacheKeys QHash, but QPixmapCache::clear() didn't
touch it, leading to the string data (as well as the Keys) being
retained after any possible use. This can lead to memory slowly being
eaten up, as reported in QTBUG-112200, and prevents a periodic calling
of QPixmapCache::clear() from being a work-around for the issue in the
bug report.

Fix by clearing cacheKeys in QPixmapCache::clear().

This is designed as a low-risk enabler of a work-around, not a fix for
the issue. The work-around enabled by this is periodic calling of
QPixmapCache::clear().

[ChangeLog][QtGui][QPixmapCache] Fixed QString key data not being
freed on clear().

Pick-to: 6.6 6.5 6.2 5.15
Task-number: QTBUG-112200
Change-Id: Ica6fa0e27e1b47b8df58d5e996378a2ececa5f9c
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2023-06-06 16:29:27 +02:00
JiDe Zhang 71bf2a3a32 Fix can't create rhi if VkInstance is not enable VK_KHR_surface
The VK_KHR_surface is not need if we not using QRhiSwapChain, such as
using QQuickRenderControl on QtQuick, it's using "beginOffscreenFrame"
without QRhiSwapChain.

It's useful if you using a custom VkInstance to QVulkanInstance, and the
VkInstance is not create by other library and isn't enable the
VK_KHR_surface extension.

Pick-to: 6.6 6.5
Change-Id: I7623630adea9c933f38c180d4d73044b0e88f5b8
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2023-06-06 14:09:02 +00:00
Ahmad Samir 8d77ee0f2b Misc.: fix narrowing conversion warnings with explicit cast to int
And using qsizetype in some places.

::pathconf() returns long.

Found by using -Wshorten-64-to-32 clang compiler flag, or adding that
flag to the flags clangd uses.

Change-Id: I9f9abd3d4d6fe73f525eec869ceabc799317f3d6
Pick-to: 6.6 6.5
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
2023-06-05 23:35:20 +03:00
Ahmad Samir 3ee289e40d Misc.: fix narrowing conversion warnings
Using:
- range-for and iterator-based loops
- QList constructor that takes a pair of iterators

Found by using -Wshorten-64-to-32 clang compiler flag, or adding that
flag to the flags clangd uses, e.g. adding this to clangd's config file
(see https://clangd.llvm.org/config):
CompileFlags:
    Add: [-Wshorten-64-to-32]

Pick-to: 6.6 6.5
Change-Id: I13ae65e09ab59a59f9e5c189ea27e4e16527df2d
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
2023-06-05 23:35:20 +03:00
Axel Spoerl 8a9e3c7869 Default to WindowText color in QTextDocumentLayoutPrivate::drawBlock()
When a block is drawn in a text document, drawBlock is checking,
whether the block has a BackgroundBrush property defined. If none is
defined, the color used to draw lines around the block defaults to
QPalette::Dark. This was implemented, assuming a light color scheme.
In a dark color scheme, the lines become hardly or even not visible.

This patch changes the default to Inactive/WindowText of the underlying
QPalette. This provides contrast to the document's text content and
is dark/light sensitive.

Fixes: QTBUG-113990
Pick-to: 6.5
Change-Id: Ie855852f441a0efb11c318c7edb27395151cbcce
Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
2023-06-04 13:51:54 +00:00
Axel Spoerl eda71105ff Move widgets Application example to manual tests
With 6e77da640aa84c1efe330d4a5224c9c7425ece57, the documentviewer
demo's TxtViewer plugin has been fully documented in order to replace
the Application example.

This patch moves the application example to manual tests.

Pick-to: 6.5
Change-Id: I67d975e478c7bc840613c8af1301a4eafe8f1a42
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2023-06-04 01:18:19 +02:00
Tor Arne Vestbø ea1af6b7ed Only consider QScreen virtual siblings that have been added
If a platform builds up a list of QPlatformScreens, and then adds
them incrementally, while at the same time implementing virtualSiblings
in QPlatformScreen to return the full list of screens, the virtual
sibling QScreens will contain nullptrs for each non-added screen.

It could be argued that this is the fault of the platform plugin,
since it's reporting a virtual sibling that it hasn't added yet,
but we can easily work around it in QScreen as well.

Fixes: QTBUG-113977
Pick-to: 6.5
Change-Id: I4b9472646a5cc10b6fd35c606e3ae15941da1587
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2023-05-31 16:37:26 +02:00
Matthias Rauter b8b34544d0 Add uniformCellWidths and uniformCellHeights to QGridLayoutEngine
Some users wish to make layouts with uniform column widths or
uniform row heights, ignoring the sizeHints of individual items.
This patch enables this mode in the QGridLayoutEngine, used
by the QuickLayout.

The sizeHints are aggregated and their average preferred size
and extreme minimum and maximum sizes are respected in the
layout.

Change-Id: Ibb9409eb0a11a1ce8bb305f44a4cb0071c871ec9
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
2023-05-31 11:04:22 +02:00
Vlad Zahorodnii fb86c5a470 QGuiApplication: Remove .desktop suffix in setDesktopFileName
The desktop file name should not contain ".desktop" suffix, but some
applications still specify it anyway because of the ambiguity in the
documentation that was fixed in
0c5135a9df.

This change makes setDesktopFileName remove ".desktop" suffix so
desktopFileName always returns a desktop file name with correct format
and its users don't need to chop ".desktop".

Pick-to: 6.5
Change-Id: If5abccaf3bf976449cada8891fff887870e45b5f
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2023-05-30 23:51:56 +03:00
Laszlo Agocs 09597d05f7 rhi: avoid backends modifying the frontend depth and arraySize
Buffer and texture sizes (size, pixelSize) may get increased, if needed,
but those actual sizes calculated by the QRhi backends are not written
back to the QRhiBuffer m_size or QRhiTexture m_pixelSize.

In contrast, both m_depth and m_arraySize are clamped in QRhiTexture
by most backends (to ensure a lower bound of 1 and 0, respectively).
This is not great since it means the getters for depth() and arraySize()
may return values different from what the user has provided. To avoid
confusion, do not modify the m_* variables.

Change-Id: I2cc5b9abf41ea108549ffd7f2403306e6e8ebba2
Reviewed-by: Jonas Karlsson <jonas.karlsson@qt.io>
2023-05-30 10:29:55 +02:00
Laszlo Agocs afe0bf0914 rhi: vulkan: expose the instance in the nativeHandles query
Mainly for completeness, but it has practical uses: someone retrieving
a QRhi instance from somewhere should be able to tell the
QVulkanInstance, and so the VkInstance, used by that QRhi without
resorting to investigating other objects (e.g. retrieving the instance
from the QWindow). This provides symmetry to other 3D APIs and QRhi
backends where just a single QRhi instance is sufficient to get the
MTLDevice, ID3D11Device/Context, etc. i.e. all that is needed to
work with the 3D API directly.

Change-Id: I5a8b9871a543ea648c76b868bf6ff7be5f2098f2
Reviewed-by: Jonas Karlsson <jonas.karlsson@qt.io>
Reviewed-by: Hatem ElKharashy <hatem.elkharashy@qt.io>
2023-05-30 10:29:51 +02:00
Topi Reinio 1cd35cff4d Doc: Fix documentation warnings for Qt Gui
* Fix file quoting in RHI Window example
* Add missing \inmodule commands for QRhi Classes
* Add missing dependency to qtshadertools
* Remove documentation for non-existent overload of
  QRhiGraphicsPipeline::setTargetBlends()

Other fixed warnings:

src/gui/rhi/qrhi.cpp:
* warning: clang couldn't find function when parsing
  \fn void setUsage(UsageFlags u)
* warning: clang couldn't find function when parsing
  \fn virtual bool QRhiSwapChain::isFormatSuported(Format f)

Change-Id: I73ff7896c3d5c8bb491368e941b32c8026a47191
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2023-05-30 08:29:26 +00:00
Andre Hartmann 2297056221 QPainter: Fix missing variable in drawPixmap snippet
Fixes: QTCREATORBUG-29216
Pick-to: 6.5
Change-Id: If055e7b4d6ba7734bc29da29db68b3224fc734c1
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2023-05-29 19:51:14 +02:00
Volker Hilsheimer 2d9f7633bf Doc: use [since] tag for enum values added in Qt 6.6
Remove the manual "This enum value has been introduced..." text. Doing
that only for 6.6 to avoid unnecessary cherry-pick conflicts and general
code churn.

Change-Id: I89a6fd313582fd0c5d6209608a3740f19f91bd01
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
2023-05-26 18:48:24 +02:00
Eskil Abrahamsen Blomfeldt baba1f1b39 Change QFont::fontFeatures() -> QFont::features()
The 'font' is redundant here, and we don't prefix any other
properties like that.

Change-Id: Iee1f492b232e5bbcae399b472d7478406d8a81ef
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2023-05-24 13:05:02 +02:00
Volker Hilsheimer 8e46ac8d05 Doc: fix warnings from parameters not matching the documentation
Change-Id: I6588336e12db0a3af9b9dfd2ab22a3e1b7c54238
Reviewed-by: Safiyyah Moosa <safiyyah.moosa@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2023-05-24 07:04:31 +02:00
Eirik Aavitsland 2385d66923 Image IO: increase the default allocation limit
Time passes, Moore's law is working.

As a drive-by, make the doc more informative.

Fixes: QTBUG-113637
Pick-to: 6.5
Change-Id: Ic388b8850ace02c429d4d8175d31db86912d3afe
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2023-05-23 14:29:58 +02:00
Shawn Rutledge 8d11e05f8f doc: Reduce expectations for QInputDevice::devices()
I was hoping we could get the list mostly correct and complete on most
platforms; but in practice, it's proving difficult on most platforms.
Hopefully we can find ways to improve it over time.

Task-number: QTBUG-101648
Task-number: QTBUG-101875
Task-number: QTBUG-112432
Task-number: QTBUG-113706
Task-number: QTBUG-113711
Change-Id: I16b6900cddb54197fb7b833a513e36996de72d51
Pick-to: 6.2 6.5
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2023-05-23 10:36:35 +02:00
Axel Spoerl 980a499ad0 Implement color role AccentColor in QStyleSheetStyle and QCssParser
The color role AccentColor has been added to QPalette.

This patch implements the new color role in QCssParser and subsequently
in QStyleSheetStyle.
The QBrush variable names used to populate brushes, have been changed
into speaking names for better code readability.

tst_QCssParser has been adapted accordingly.
The test function accentColor() has been added in tst_QStyleSheetStyle.

Documentation has been updated.

Change-Id: Ib09ddc1b61868f2bb8f70f654e83ea1c35276d30
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2023-05-22 14:45:26 +00:00
Axel Spoerl 227b639499 Make Gnome theme react to color theme changes without GTK
Qt doesn't react to color theme changes on systems running Gnome
without GTK.

This patch adds support for such in QGnomeTheme, following
https://blogs.gnome.org/alexm/2021/10/04/dark-style-preference/

Pick-to: 6.5
Change-Id: I1f6252d4f394b810b9e4aebe00f2715c8fec3b56
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2023-05-22 16:43:02 +02:00
Axel Spoerl 17c589df94 Shoehorn AccentColor into QPalette and keep existing 64bit resolve mask
It is necessary to add an AccentColor role to QPalette.
QPalette currently has 21 color roles and 3 color groups, which
require 63 bits to resolve. The resolve mask is implemented with a
qint64, which doesn't provide spare bits for another color role.

The color role NoRole is used as a default value, marking that a role
has not (yet) been defined. The enum value does not represent a valid
brush, even though it can theoretically be stored in QPalette's shared
data.

This patch adds the enum value AccentColor to QPalette::ColorRole,
increasing the available color roles to 22.
To keep the resolve mask at 63 bits, AccentColor is mapped to NoRole
in static constexpr bitPosition.

As the enum range would exceed 64 bits without this tweak, 3 additional
bits are substracted in the respective static assertion.

With NoRole having no bit in the resolve mask, the following adaptions
have been implemented:
- QPalette::resolve() is adapted to explicitly ignore NoRole.
- QPalette::isBrushSet() always returns false for NoRole.
- tst_QPalette::setAllPossibleBrushes() to verify the latter
- operator== ignores NoRole (documentation updated)

AccentColor is added in tst_QPalette::roleValues and enum documentation
is adapted.

In QPalette's default constructor, the AccentColor brush is defaulting
to the Highlight brush, it this is available. Otherwise it is made 30%
darker or lighter than the Base brush, depending on dark/light mode
heuristics.

QPalette's data stram functions have been extended from QDataStream
Version Qt_6_6. If earlier versions are de-serialised, the AccentColor
defaults to Highlight. An autotest function dataStream() has been added
to tst_QPalette.

The QDataStream Version Qt_6_6 has been bumped to 21.
tst_QDataStream has been adapted to the new version and the new
color Role.

Change-Id: I98bbf9de95fb83bda921e9614a0db3a3c0ebdf75
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2023-05-21 18:36:37 +02:00
Axel Spoerl 0328e4297e QGenericUnixThemes: Make DBus listener configurable
The DBus locations and signals QGenericUnixThemesDBusListener has
listened to, were hard coded.
While these hard codings were in line with the signals emitted by the
Linux systems officially supported by Qt, this approach has made it
impossible for Qt to react to (color) theme changes when they are
announced by other DBus signals.

This patch replaces hard coded signals with a QFlatMap member.
The member is populated with the DBus locations/signals currently
supported.

If the environment variable QT_QPA_DBUS_SIGNALS_SAVE contains a valid
file name, the default configuration is stored in a JSON file.
If the environment variable QT_QPA_DBUS_SIGNALS contains a valid file
name, the default configuration is replaced with its content.

While the patch doesn't change existing behavior, it adds the
possibility to customize alternative DBus signals to listen to.

Task-number: QTBUG-103093
Pick-to: 6.5
Change-Id: I37e085c74bf53eed5cda7ec0dd7105562df0ed21
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2023-05-21 18:18:20 +02:00
Laszlo Agocs 1dd8b5ceec rhi: Make it a QPA-style private but semi-public API
qrhi.h, qshader.h, qshaderdescription.h (and qshaderbaker.h from
shadertools; done separately) become "RHI APIs", following the concept
of QPA APIs.

Mirror completely what is done for QPA headers, but using the "rhi"
prefix for the headers. This involves updating syncqt to handle the
new category of headers. (a note on the regex: matching everything
starting with "qrhi" is not acceptable due to incorrectly matching
existing and future headers, hence specifying the four header names
explicitly)

There is going to be one difference to QPA: the documentation for
everything RHI is going to be public and part of the regular docs, not
hidden with \internal.

In addition to the header renaming and adding the comments and
documentation notes and warnings, there is one significant change
here: there is no longer a need to do API-specific includes, such as
qrhid3d11[_p].h, qrhivulkan[_p].h, etc. These are simply merged into a
single header that is then included from qrhi.h. This means that users
within Qt, and any future applications can just do #include
<rhi/qrhi.h> (or rhi/qshader.h if the QRhi stuff is not relevant), no
other headers are needed.

There are no changes to functionality in this patch. Only the
documentation is expanded, quite a lot, to eliminate all qdoc warnings
and make the generated API docs complete. An example, with a quite
extensive doc page is added as well.

Task-number: QTBUG-113331
Change-Id: I91c749826348f14320cb335b1c83e9d1ea2b1d8b
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2023-05-21 15:42:58 +02:00
David Edmundson 0c5135a9df Clarify documentation about QGuiApplication::setDesktopFileName format
Whislt the documentation says "base name" there are lots of examples in
the wild of clients using the wrong name here. Writing it explicitly
might help.

Task-number: QTBUG-75521
Pick-to: 6.5
Change-Id: Ic17ca161cf58449e85e25d9b6b8ace44fe14f18a
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2023-05-16 18:09:38 +00:00
Volker Hilsheimer 322387ce7b Accessibility: call update handler even if not active
Update handlers should get informed about accessibility updates even if
the platform's accessibility bridge is not activated. E.g. an analytics
or test framework (like Qt Insights) might want to use the handler to
record relevant events.

While many events are only delivered if QAccessible::isActive returns
true to avoid spending computing time on creating the relevant event
data (e.g. in item views that can be expensive), the most important
events are still delivered. And requiring activation of accessibility
before events can be recorded through a handler has side effects on
performance, which we want to avoid.

Change-Id: I896b873574f6ad2527f755912d4950aa1f898097
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
2023-05-16 13:36:20 +02:00
Fabian Kosmale fd565750f3 qoffscreensurface.h: Add module to Q_MOC_INCLUDE
Depending on the build configuration, just using <QScreen> will not find
the header.

Pick-to: 6.5
Fixes: QTBUG-113619
Change-Id: Iaaf6f75ce82f8e32a1b1835614accd898b45824e
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2023-05-16 10:47:21 +02:00
Tor Arne Vestbø 798456c0a3 Add QIconLoader debug logging to aid fallback logic investigation
The icon loader machinery is a bit opaque, so let's add some logging
to understand the interactions.

Pick-to: 6.5
Change-Id: Ic400b6043607795ad92771f9d9f189699f185366
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
2023-05-12 16:20:29 +02:00
Tor Arne Vestbø af8e75f54f Revert "QIconLoader: use system fallback theme as the first fallback option"
This reverts commit 4710fb3528.

The theme it responsible for defining a set of good fallbacks,
and we should respect that order. We should also respect any
override the application developer does of the fallback theme,
and not unconditionally fall back to the system fallback theme.

Change-Id: I77f1a74c71a2a7db70464666b1a96a00fb4a1d8f
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
2023-05-11 14:59:58 +02:00
Eirik Aavitsland aaccd50224 Add QBezier methods for computing a quadratic curves approximation
Useful for operating on QPainterPaths with algorithms designed for
quadratic, and not cubic, curves.

Change-Id: I1af2d6e4f2b66ce675cde863f67d65fbf9db7d39
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2023-05-11 12:38:33 +02:00
Jan Grulich 4710fb3528 QIconLoader: use system fallback theme as the first fallback option
When searching for an icon, we either use the system theme or the theme
set as a fallback through QPlatformTheme, it's only one or the other.
It can easily happen that the fallback theme we pick as a parent theme
will not fit into the application style (color-wise). For example using
KDE apps on GNOME, where we use "Adwaita" icon theme, we would always
fallback to "Breeze", however, using dark theming, we want to fallback
to "Breeze-dark" and this can be easily set through QPlatformTheme
integration, but it's not going to be used when the system icon theme
is valid and in such case the fallback theme will be ignored.

This change makes the system fallback theme used as the default fallback
by putting it to the list of parent themes.

Pick-to: 6.5 6.2 5.15
Change-Id: I966cd8ddd0e5576e3593d349fe7ee7139136bfdf
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
2023-05-11 10:46:58 +02:00
Mårten Nordheim 86a0e70d65 QDataBuffer: decrease size on shrink()
Having the size potentially be larger than the capacity can't
be considered anything other than a bug.

Pick-to: 6.5
Change-Id: Id059c0f2c7320f992d897011d7aa944c5cb86058
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2023-05-10 16:53:13 +02:00
Jaishree Vyas 8f6ec8cea2 Clarify module changes in Qt6
Changed Briefs for better understanding

Fixes: QTBUG-109324
Pick-to: 6.5
Change-Id: I15b0c0dc12b1bf96626fb8ea4ad16d04b2b118ca
Reviewed-by: Kai Köhne <kai.koehne@qt.io>
2023-05-09 22:36:06 +00:00
Eskil Abrahamsen Blomfeldt 6160ea45b6 Implement API for enabling / disabling OpenType features
Similar to the font-features-settings in CSS, this is a low-level
API that allows you to pass the information to the shaper in order
to enable or disable specific font features by name.

[ChangeLog][QtGui][Text] Added an API to QFont which makes it
possible to enable and disable specific typographic features
in OpenType fonts.

Change-Id: Ib48c678f3b97a5a562b08ae34dc895800c8885c0
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
2023-05-09 23:39:41 +02:00
Eike Ziller 9f0b4e18cd QTextMarkdownImporter: Fix performance for non-trivial documents
While parsing the markdown document, each addition of text and
formats was triggering a relayout of the so far existing document,
leading to quadratic behavior and very bad performance for any
non-trivial markdown document.

Guard the changes while parsing with a begin/endEditBlock to
avoid these intermediate updates.

The performance impact can for example be observed with the
markdown editor in Qt Creator (11+).

Pick-to: 6.5
Change-Id: I5f89441ea41bc3c6281b616f0c5528b49b48e432
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
2023-05-09 22:30:29 +02:00
Allan Sandfeld Jensen 7b7a01c266 Fix specific overflow in qtextlayout
Adds qAddOverflow and qMulOverflow definitions to QFixed

Fixes: QTBUG-113337
Pick-to: 6.5 6.5.1 6.2 5.15
Change-Id: I13579306defceaccdc0fbb1ec0e9b77c6f8d1af9
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2023-05-08 18:29:22 +00:00
L. E. Segovia 6136b92f54 Windows: implement retrieval for missing QScreen metadata
This commit implements the manufacturer, model, and serialNumber
properties of QScreen for the Windows operating system. These were not
available previously because the Display Devices API allows piecemeal
access to the EDID fields, and the GDI API only returns the i-th device
name, e.g. "\\.\DISPLAY1".

Accessing the EDID of a given screen is possible by, given a
WindowsScreenData instance storing the device path, pivoting from
SetupDiOpenDeviceInterfaceW and then extracting the corresponding blob
from the Registry through a key handle retrieved with
SetupDiOpenDevRegKey. This blob can be parsed just like in Linux with
the QEdidParser class. The resulting metadata is applied to
the WindowsScreenData instance.

Additionally, this commit implements support for clone groups by making
getPathInfo return a list of the matching DISPLAYCONFIG_PATH_INFO
instances, and then concatenating the monitorFriendlyDeviceName
and the EDID manufacturer, model and serialNumber properties.

This commit makes the Windows and Direct2D QPA plugins dependent on
setupapi, and extends the QEdidParser class availability condition to
include these platforms.

Pick-to: 6.5
Change-Id: I56886b035a3d15e6f90aad5d797aeda21f99ff74
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
2023-05-06 00:09:43 -03:00
Piotr Wierciński fb2fccc534 wasm: Add DOM accessors functions through NativeInterface
Expose document and clientArea emscripten objects through
NativeInterface.
This is required by WebView implementation for wasm platform.

Task-number: QTBUG-75183
Change-Id: I6f2f084a9dbceb80d2186c7395c008f268a91e39
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Mikołaj Boc <Mikolaj.Boc@qt.io>
2023-05-05 12:27:36 +02:00
Allan Sandfeld Jensen 178c123a6f Match deadcode elimination with cpu feature check
We check for Haswell, so don't just check for AVX2 when removing
possible dead-code.

Pick-to: 6.5 6.2 5.15
Fixes: QTBUG-113315
Change-Id: Id341aebcef99065f4b6a96ad0f60b9de40ed55ab
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2023-05-04 10:33:26 +02:00
Laszlo Agocs c5e0c2e3f8 rhi: gl: Skip useless glEnable for point sprites in core profiles
Might fail with invalid enum in core profile contexts. The behavior
is the same regardless.

Pick-to: 6.5 6.2
Fixes: QTBUG-113289
Change-Id: I5e5764494be3c5f37537f5f9b3b5311d9c49def4
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
2023-05-03 13:22:21 +02:00
Jan Grulich 03cbcba7b2 OpenFile portal: do not use O_PATH fds
Using O_PATH requires correctly specifying whether the fd is writable or
not. Stating that the fd is writable without it actually being writable
results into rejection on xdg-desktop-portal side. Other implementations
like xdg-open or gtk have also moved away from O_PATH fds so this will
make a matching implementation and avoid possible rejections from xdp.

Fixes: QTBUG-113143
Pick-to: 6.5 5.15
Change-Id: Icc171752d73ee091282b7c655f71da3cb59179b1
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2023-05-03 07:22:52 +02:00
Morten Sørvig 827e010233 QGuiApplication: Propagate wheel event accepted state
Propagate the accepted state from the QtGui event to
the QWindowsSystemInterface event. This makes it possible
for the platform plugins to propagate rejected wheel events
to the native OS.

Pick-to: 6.5
Task-number: QTBUG-107441
Change-Id: Ifa90ed2430e56120a1a04b6a5872a153d26aa6bc
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2023-05-02 12:54:19 +00:00
Thorbjørn Lund Martsum 29b2506e8c Allow disable native messagebox dialog
The native style may not match the program style and it
makes sense to give an option rather than forcing native style.

Before it could only be done with setting AA_DontUseNativeDialogs
on the app, but it is reasonable to use native file dialogs and
Qt styled messageboxes - and it is extremely cumbersome - especially
since messageboxes often can start save dialogs.

It can look a bit strange that these introduced options has just one
option (DontUseNativeDialog) and four functions, but this way it works
similar to QColorDialog, QFileDialog and QFontDialog.

[ChangeLog][QWidgets][QMessageBox] Added options functionality to
QMessagebox. The currently only option available is DontUseNativeDialog.

Change-Id: I70282fcfaa66f245f7e679b8897c607bcaff333f
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2023-05-02 10:37:17 +02:00
Yuhang Zhao 53a4f02b01 Fix compilation warnings
When compiling with clang-cl 16.0.2, it gives me some warning like:
warning: use of bitwise '|' with boolean operands [-Wbitwise-instead-of-logical]

Change-Id: I2a1e80fa94b617c0f8fc6561c326c8ae98cada45
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
2023-05-01 09:15:23 +08:00
Tor Arne Vestbø 4160817050 macOS: Don't leak QEventDispatcherUNIX during event dispatcher creation
During QCoreApplication initialization, we create the main thread's event
dispatcher, which for a GUI app happens via QGuiApplicationPrivate's
createEventDispatcher() override. This in turn relies on the platform
integration to create the event dispatcher, but to do that it needs to
create the platform integration first. And this might result in calling
APIs that themselves initialize the main thread event dispatcher, such
as QEventLoop, which non-lazily creates an event dispatcher for the thread.

We already had a check to catch the platform integration setting the
QCoreApplictionPrivate::eventDispatcher member, but not anything for
checking the current thread data.

On macOS this resulted in a leak of QEventDispatcherUNIX because
QCocoaDrag contained a QEventLoop member. We now track the event
loop temproarily via a pointer instead, like we do in other places.

An alternative fix would be to defer the initialization of QCocoaDrag
until QCocoaIntegration::drag() is called, but that would run the
risk of something calling the function during platform initialization
and we'd be back to the same problem.

It's unclear why QEventLoop is not lazily ensuring the event dispatcher,
and this might be a wider fix for similar issues.

Pick-to: 6.5
Change-Id: I643010ddb09945936ce9b0b94de0df96f6fe218f
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2023-04-29 13:25:24 +02:00
Laszlo Agocs fdb287e620 rhi: gl: Introduce a fourth code path to query the max vertex outputs
Three is not enough, need four. This is because in core profile contexts
querying GL_MAX_VARYING_COMPONENTS may apparently be an error (this is
enforced in macOS with 4.1 core contexts for example), so we need to
use something else: GL_MAX_VERTEX_OUTPUT_COMPONENTS.

Change-Id: I005c30e5798b0bf8bb7666bd732aaf996d123db9
Pick-to: 6.5 6.2
Fixes: QTBUG-112985
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-04-28 12:07:34 +02:00
David Edmundson 4863810065 Call into platform hooks for start and end frames
This closely matches QPlatformOpenGLContext which in turn, where it can
be used by backends to guard low level resources.

Change-Id: Ia44cebced6cdf94497279c47d3c35c0e02e4cb0e
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2023-04-28 08:37:10 +01:00
Tasuku Suzuki 7b9e73a921 Doc: add darkmode=0 explicitly
Task-number: QTBUG-72028
Pick-to: 6.5
Change-Id: Ia73dbd4f203ce654e5221f69a65b8c82c2af7d79
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2023-04-28 03:53:03 +09:00
Laszlo Agocs 2d3cdcce59 rhi: Add enablers for testing reducing the resource update pools
...which comes at the expense of performance. Therefore this is
currently an environment variable-based opt-in solution.

Change-Id: If884de041f619fef0929ac2cfbdd035092723d51
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
2023-04-27 16:21:46 +02:00
Laszlo Agocs 7a79302e4e rhi: Properly squeeze in trimOpLists
...and improve the comments since it is not directly obvious why
things are done the way they are.

Pick-to: 6.5
Change-Id: I6aa5f09b1b2f7f3fc18f74a4af2977d24278aae6
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
2023-04-27 16:21:42 +02:00
Laszlo Agocs 3d2eb6c191 rhi: Improve nextResourceUpdateBatch docs
Mention something some parts of Qt Quick rely on: that the update
batch objects stay valid across frames.

Change-Id: I2a21c19ceaa0c73a95062cc9b5cc3f4d1020e8a5
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2023-04-27 16:21:39 +02:00
Mitch Curtis 2cd7e34fa0 Add more shortcutmap categorized logging output
Show more detail about the checks made against each entry to show why
a shortcut might not get delivered. Specifically, it's useful to know
if the contextMatcher returned true. In the case of Qt Quick Controls,
it can return false if the Shortcut is blocked by a modal popup, or
a popup with a CloseOnEscape policy.

With this patch, combining qt.gui.shortcutmap with
qt.quick.controls.shortcutcontext.matcher makes it possible to see
which popup blocks a shortcut. With only the former enabled, it's
already quite useful:

qt.gui.shortcutmap: Possible shortcut key sequences: QList(QKeySequence("Ctrl+N"))
qt.gui.shortcutmap: - checking entry 0 QKeySequence("Ctrl+N")
qt.gui.shortcutmap:   - matches returned 2 for QKeySequence("Ctrl+N") QKeySequence("Ctrl+N") - correctContext()? false
qt.gui.shortcutmap:   - matches returned 0 for QKeySequence("Ctrl+N") QKeySequence("Ctrl+O") - correctContext()? false
qt.gui.shortcutmap: Found better match ( QList(QKeySequence("Ctrl+N")) ), clearing key sequence list
qt.gui.shortcutmap: Added ok key sequence QList(QKeySequence("Ctrl+N"))
qt.gui.shortcutmap: Returning shortcut match ==  0
qt.gui.shortcutmap: QShortcutMap::nextState(QKeyEvent(ShortcutOverride, Key_N, ControlModifier, text="N")) = 0

Change-Id: I6e96c94a8b62823553837eda3ef2764ca21775c4
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2023-04-27 09:38:15 +08:00
Laszlo Agocs d587d3fecd rhi: Improve deferred delete docs
Change-Id: I533e44d73ad1aebf72ef2e28c90c51f5effb8977
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2023-04-26 15:47:43 +02:00
Marc Mutz b85a9d0ee1 Move QZipReader/Writer from QtGui to QtCore
These classes depend only on Core, not Gui.

This allows dropping the dependency of tst_qxmlstream and tst_qzip on
QtGui, and prevents a tst_qxmlstream FTBFS when building with
QT_NO_TEXTODFWRITER.

Symbols move from QtGui to QtCore, but the classes are private API, so
not under BC constraints.

The classes are not used outside qtbase, so no other in-tree users
need porting.

Task-number: QTBUG-3897
Change-Id: Ifa148f43ec139d7f9ac1f3893e2fcf4640e3c60c
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2023-04-26 12:01:05 +02:00
Mikolaj Boc d09855ae7b Copy memory to buffer when saving files on wasm with threading on
wasm heap uses a shared array buffer, which cannot be fed to
FileSystemWritableFileStream.write due to security limitations.
Heap memory has to be copied to a temporary buffer for the operation to
succeed.
This is only done if __EMSCRIPTEN_SHARED_MEMORY__ is on to optimize the
non-threading path.

Fixes: QTBUG-112881
Pick-to: 6.5
Change-Id: I0d117a8703caf4c17abc67b30df5248a53406d5f
Reviewed-by: Aleksandr Reviakin <aleksandr.reviakin@qt.io>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2023-04-25 19:24:33 +02:00
Ahmad Samir 0d26db5737 QEvent: fix a narrowing conversion warning
By using an iterator-based for loop.

Change-Id: I9ae12f16bc2a5c2d74c8557a0324438102fec5b1
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2023-04-25 06:15:47 +02:00
Ahmad Samir 4538bbf4a6 Misc.: Fix some narrowing integral conversion warnings
Drive-by change: use QByteArrayView instead of allocating a QByteArray.

Change-Id: Iaf7acbbdb4efbb101b73b30061ce38dd1fa99ca3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2023-04-25 06:15:36 +02:00
Wladimir Leuschner 787038bb1d Change to darkmode is prevented at runtine in Vistastyle
Task-number: QTBUG-112965
Task-number: QTBUG-113036
Pick-to: 6.5
Change-Id: I0049e68bbd8e83025f9f576dcd712d03206859d0
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Santhosh Kumar <santhosh.kumar.selvaraj@qt.io>
2023-04-24 12:25:22 +00:00
Mårten Nordheim 7a92304040 FontDatabase[win/freetype] implement population of aliases
We rely on this function discovering extra fonts if we cannot find any
or only find poor matches for our font request. Whether that be because
we had only partially populated the fonts of a given family or because
the user specified a font using a localized name.

It's a copy-paste of the implementation in qwindowsfontdatabase

Fixes: QTBUG-111854
Pick-to: 6.5
Change-Id: I0dd97b68d84417a26ce82a46f39804b36602ed67
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2023-04-20 13:17:25 +00:00
Andrey Butirsky d76e1d9cbd qxkbcommon: Amend comment for Qt::Key upper-case transformation
This should make it clear enough that the issue here is a quirk of
Qt::Key and not something otherwise special about case-change affecting
whether a character is in Latin-1 (for all that this is the root cause
of the quirk in Qt::Key).

Pick-to: 6.5
Change-Id: I80fa6b78a0d0c431401a3fea18edf6149de08b92
Reviewed-by: Andrey Butirsky <butirsky@gmail.com>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2023-04-20 09:34:37 +00:00
Mario Roessel 298c950912 QXkbCommon: set Qt::KeypadModifier when keypad button is pressed
Pick-to: 6.5
Task-number: QTBUG-111503
Done-With: Liang Qi <liang.qi@qt.io>
Change-Id: Ic7ca48ea8709d38aa83c95a9b5a7d39ff82f08c7
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2023-04-20 06:14:58 +00:00