Commit Graph

10020 Commits (df62cefdcb0ea6f644f1560285598ed179bb2bb2)

Author SHA1 Message Date
Assam Boudjelthia e5d591a0d0 Android: Add facilities to handle more content URIs operations
Use DocumentFile and DocumentsContract to support more operations
on content URIs, such as:
* listing files and subdirectories with usable content uris
* mkdir, rmdir
* creating non-existing files under a tree uri
* remove

And since dealing with content URIs require some level of user
interation, manual tests were added to cover what's been implemented.

Note: parts of the code were from from BogDan Vatra <bogdan@kdab.com>.

Pick-to: 6.4 6.2
Task-number: QTBUG-98974
Task-number: QTBUG-104776
Change-Id: I3d64958ef26d0155210905b65daae2efa3db31c1
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2022-12-14 12:15:38 +02:00
Thomas Senyk ad2aca113d eglfs-kms/gbm: fix segfault and add qScopeGuard
As framebufferForBufferObject has a code-path which returns a nullptr,
it's vital to check on that and return early in that case.

As this is the third segment in this function that does gbm_surface_release_buffer,
a qScopeGuard was introduced to reduce code duplication.
This also makes this function saver/easier to maintain long term.

The platform on which this segfault was reported is QEMU

Pick-to: 6.2 6.4 6.5
Change-Id: I5ee1ad4073712349b7475bce3a7978961fea2344
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2022-12-13 21:07:51 +01:00
Yuhang Zhao 67284763e7 HiDPI: fix wrong window size after DPI change
Current code doesn't take the custom margins into account,
it will cause windows with custom margins have wrong size
after DPI change.

Amends commit 2cfca7fd19

Pick-to: 6.5 6.4
Change-Id: I80b01c030a63d02cf66f105785df7c3f590481b5
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-12-14 02:33:26 +08:00
Tor Arne Vestbø faffaa7292 macOS: Don't set cursor for non-key windows
The system behavior when using NSTrackingArea with
NSTrackingCursorUpdate is that cursorUpdate is called whenever
the mouse enters a key window. In response, we use [NSCursor set]
to apply the QWindow's cursor that was set earlier though
QCocoaWindow::setWindowCursor().

As a QWidget can manage a hierarchy of child widgets, each with
their own cursor, we may see multiple calls to setWindowCursor()
when hovering the mouse over a window.

In ae8e96d4c2 we worked around an
AppKit bug where an override cursor would prevent our call to
invalidateCursorRectsForView from resulting in a cursorUpdate
call. But, in doing so, we ignored one of the documented behaviors
of invalidateCursorRectsForView, namely that the cursor is only
updated immediately if the window is currently the key window.

As a result, we would call [NSCursor set] for non-key windows,
which creates an inconsistent behavior. As long as we're not
consistently supporting cursor updates for non-key windows
we should align our workaround behavior with the existing
behavior.

Task-number: QTBUG-96374
Change-Id: I36e4c7802b177230a7e81133cd38557590f041b7
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-12-13 17:21:13 +01:00
Tor Arne Vestbø 53b413f1c5 Rename QMessageDialogOptions::Icon to StandardIcon
To clarify its use as a pre-defined standard icon, which is a separate
use-case from providing a user-defined QIcon.

Change-Id: I187ce2e5f125a7392b1279c9bd1e871790c8065f
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-12-13 13:41:28 +01:00
Bartlomiej Moskal 4ceee3911a Android: fix Android assets handler not listing dirs with only sub dirs
It looks like AAssetDir_getNextFileName is not enough.
Directories that contain only other directories (no files)
were not listed.

On the other hand, AAssetManager_openDir() will always return a
pointer to initialized object (even if the specified directory does not
exists), so we can't just leave only it here.

Using FolderIterator as a last resort. This approach should not be too
time consuming.

As part of this fix, add some unit tests to cover/ensure assets
listing/iterating works as expected.

Fixes: QTBUG-107627
Pick-to: 6.4 6.2 5.15
Change-Id: Id375fe8f99f4ca3f8cad4756f783ffafe5c074df
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-12-13 12:04:40 +00:00
Piotr Mikolajczyk 9ce8d4890f Add handling of screen hotplug
When a display is connected to an Android device
a notification is sent to the platform layer of the
application. The QAndroidPlatformIntegration will create
a platform screen and add it to QWindowSystem.

Task-number: QAA-1257
Change-Id: Id2cf6b47363630c3b5c93c0bc778e2058d8372b3
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-12-13 07:49:22 +00:00
Volker Hilsheimer 54f7cd34a1 iOS: initialize font traits
Silences build-breaking compiler warning and probably fixes a bug.

Pick-to: 6.4 6.2
Change-Id: Ice48657831ac1f8406f33ca7e3afa70556831274
Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-12-12 20:10:11 +01:00
Laszlo Agocs 6e3170b674 eglfs_kms: Prevent drm errors with more than one window during the screen's lifetime
The QML Live Preview tool exercises the problematic case of having a
QQuickWindow, then closing it, then showing another, then destroying
that, ..., and so on.

It seems that the eglfs_kms backend does not handle this gracefully:
if there was a page flip issued for a window that is then closed, the
new window will result in drm errors (like -22 EINVAL) because the
logic gets confused due to holding on to surface buffers from the old
window.

To remedy this, make sure the same cleanup is performed on a failing
atomic commit as it is done on the non-atomic code path. In addition,
reset more things in resetSurface().

Change-Id: I7e13dbbf4d74b4ed9beaf71472680a0daafb4f95
Fixes: QTBUG-82104
Reviewed-by: Christian Strømme <christian.stromme@qt.io>
2022-12-12 19:25:44 +01:00
Friedemann Kleint 2d20406f59 Vista Style: Use correct action icon pixmaps matching the device pixel ratio
Extend change 5911335756 to the Vista
style (using the paint device's ratio).

Pick-to: 6.4
Fixes: QTBUG-108440
Task-number: QTBUG-85885
Change-Id: Ib0b5fcc943a18896b770b382b39bbb684238a618
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-12-12 18:40:54 +01:00
Tor Arne Vestbø da754d5b65 macOS: Use NSStatusItem.menu to manage system tray menu
Using [NSStatusItem popUpStatusItemMenu:] to manually show the menu is
deprecated, and was causing various issues when right clicking the menu,
such as not unhighlighting the menu item when dismissing the menu, or
worse, not quitting the application if a 'Quit' item was triggered from
a right click.

The reason we were using popUpStatusItemMenu instead of the menu
property of NSStatusItem was that the latter prevented us from seeing
the action message of the NSStatusItem button, which we used to emit
the system tray's activated signal, but this can be solved by listing
for the menu's tracking state starting.

Fixes: QTBUG-103515
Pick-to: 6.4
Change-Id: I686550ebac7d94d8d11b2e3c49ed16a8240cb214
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-12-12 15:14:21 +01:00
Axel Spoerl 6a3627b6c5 Set geometry property in QXcbWindow after checking minimum size
QXcbWindow::create() bound the window's size to windowMinimumSize(),
after its size had been inherited from parent().
QPlatformWindow::setGeometry() was called before that sanity check.

When a fullscreen window is re-mapped from a deactivated screen to the
remaining screen, the call to QPlatformWindow::setGeometry() assigns
an invalid QRect to QPlatformWindowPrivate::rect
The negative int values x2 and/or y2 cause
QXcbBackingStoreImage::flushPixmap to address unmapped memory and
crash.

This patch moves the call to QPlatformWindow::setGeometry() from
before to after bounding to a minimum value. That assures a valid
rectangle to be assigned in all cases.

Fixes: QTBUG-109226
Pick-to: 6.4 6.2 5.15
Change-Id: I349a0f3c721059a9013a275de5b4cb147fbdd7a1
Reviewed-by: Liang Qi <liang.qi@qt.io>
2022-12-12 09:47:03 +01:00
Alexey Edelev a02750d12f Isolate freetype feature
If freetype feature is not enabled we don't deliver its header
files as part of Qt. The freetype font database was used
as the generic fontdata base for unix platforms. This uses
QPlatformFontDatabase as the generic one if neither fontconfig
nor freetype features are enabled.

Fixes: QTBUG-109270
Change-Id: I9e935fd1557db417eb94d44b6a0d88818d567fbe
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2022-12-10 11:44:39 +01:00
Assam Boudjelthia f3c998510d Fix infinite loop when iterating content uri sub-files/dirs
make QAbstractFileEngineIterator::currentFilePath() virtual
and implement it under AndroidContentFileEngine to return
current fileName because content uris shouldn't be constructed
manaully like normal file paths.

Pick-to: 6.4 6.2
Fixes: QTBUG-104776
Change-Id: I4643a73a3bd4019bedaa056c35468117bcec18dc
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2022-12-10 07:40:11 +02:00
Edward Welbourne 2f440169c0 Adapt to QTimeZone replacing Qt::TimeSpec usage
In the process actually handle all time-spec cases in various places
that only handled UTC or LocalTime, or at least note that they don't
where that's not practical. Also tidy up header ordering and ensure
QDateTime's header is included wherever it's used, while adding the
include for QTimeZone where needed.

Task-number: QTBUG-108199
Change-Id: Ic1a5cdf0aaf737bf1396aa8ac58ce2004cef7e19
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-12-10 06:39:44 +01:00
Volker Hilsheimer 074a4e16a3 Windows: Enable dark mode system palette by default
Can be overwritten by setting the "darkmode" parameter of the QPA
platform to 0 or 1. The Windows Vista style (which is the
default on Windows) will overwrite the platform theme's palette with the
light system palette (see a2518b4140), but
styles that support rendering in dark mode will just run with the dark
palette.

More work needed in qtdeclarative to make the Qt Quick native style for
Windows also overwrite the palette, and to handle palette changes in Qt.

[ChangeLog][Windows] Qt applications that use a style that supports
dark mode rendering (such as the classic Windows or Fusion styles) will
respect the dark appearance setting on Windows. Applications that use
the Vista style, which doesn't support rendering in dark mode, will
use the light system palette. On dark mode systems, the window frame
will be dark if the palette is dark.

Task-number: QTBUG-72028
Change-Id: I416b4fd59eb3f64701b403984c7ac2359536abbe
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-12-10 06:39:05 +01:00
Piotr Mikolajczyk 4f0272befb Add possibility to retrieve displayId for Android
When handling multiple screens in Android system it is needed
to have the information about the display's Id. This patch
provides this possibility.

Task-number: QTBUG-105325
Change-Id: Id91aeaa59b17d5a098b672e220a5182b97320703
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-12-09 16:16:48 +01:00
Timur Pocheptsov 10b5b4cbba QCocoaFileDialogHelper: protect against dangling pointers
NSSave/Open panel is a shared object, that can outlive Qt's counterpart.
While its delegate is a weak property, somehow it can outlive Qt-object,
which _owns_ this delegate, as a result an attempt to emit a signal
on m_helper results in a crash. QPointer can help with such problem.

This is a speculative fix, since we don't have a realible reproducer.

Fixes: QTBUG-109287
Change-Id: Iccc4a063a24e33e0a5c0fd07b3c203d0c17317ad
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-12-09 16:16:48 +01:00
Mårten Nordheim 4af5f0b983 TLS[openssl]: Bump minimum warning level to Critical on Win/macOS
On these platforms there is a platform-native plugin that can be used
instead. If, as has happened, a developer uses the OpenSSL backend
without OpenSSL being available they may be confused by the output of
OpenSSL without it being of any concern.

Leave the warning level low on other platforms since they have nothing
to fall back to.

Pick-to: 6.4.2 6.4 6.2
Change-Id: Ic36a0429a9e8eed728aa59ec9e028626d6579de1
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-12-09 16:16:48 +01:00
Yuhang Zhao 0c173cc8bc Windows QPA: fix indentation
Amends commit a94dcc3125

Change-Id: I1a84ee520ce698e0581a77a15f5f3f381dfa3ede
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-12-09 14:22:38 +08:00
Christian Ehrlicher 84613e0e4c SQL/MySQL: add connect option MYSQL_OPT_LOCAL_INFILE
Add the connect option MYSQL_OPT_LOCAL_INFILE to be able to specify the
client-side LOCAL capability for LOAD DATA operations

Fixes: QTBUG-104916
Change-Id: I9914250059e7dc1a705941d3b409fa624e105ecd
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2022-12-08 21:17:41 +00:00
Christian Ehrlicher 4091d73af8 SQL/MySQL: don't use deprecated defines, cleanup
Replace plain int with enum 'enum_field_types' and don't use deprecated
MySQL type names.

Pick-to: 6.4
Change-Id: I8a629ac1b4ad7d6d78604ff641b5b35397cd769c
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2022-12-08 23:17:41 +02:00
Volker Hilsheimer a2518b4140 Overwrite dark system palette in Vista style
The Vista style uses system assets for controls, and those are never
dark. Because of that we cannot support dark appearance with that style,
and applications using the Vista style should always use the light
system palette. Override QStyle::polish(QPalette &) in the vista style
to do that.

To make that palette available, move the code reading the light palette
into QWindowsApplication, and call that method from both the platform
theme (if the system is running in light mode) and from the Vista style
(only if the system is running in dark mode).

If the system is dark mode and another style is used (e.g. Fusion, which
works well with a dark palette), then the palette returned by the
platform theme gets used without any modifications.

This requires duplicating some small inline helper functions in
QWindowsTheme and QWindowsApplication. We can clean this up once the
implementation is complete for both Qt Widgets and Qt Quick.

Change-Id: Ia13f59a2d8414642603f9708926718daf9e8954d
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Santhosh Kumar <santhosh.kumar.selvaraj@qt.io>
2022-12-08 17:56:48 +01:00
Volker Hilsheimer c62c2aac75 Revert "Let styles indicate that they support dark mode"
This reverts commit 3ee7a9f85c.

Styles that don't support dark mode can overwrite the palette in
a QStyle::polish(QPalette &) override instead.

Change-Id: I8b84d822d91be5b3f67f76f791a1330bba7ea546
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Santhosh Kumar <santhosh.kumar.selvaraj@qt.io>
2022-12-08 17:56:48 +01:00
Volker Hilsheimer 9bc36308c7 Windows: regenerate systray icon when screen resolution changes
When the screen resolution or scale factor changes, then we have to
recreate the system tray icon so that it doesn't get blurry. Such
changes generate a WM_TASKBARCREATED message, which we already handle
through a self-registered message ID to re-add the icon when the task
bar/explorer crashed. So call updateIcon there to recreate the HICON
before adding it again.

For this to work, we have to actually store the QIcon in the already
present (but so far unused) m_icon member, and reset that member before
calling updateIcon, which would otherwise be a no-op.

Fixes: QTBUG-108641
Pick-to: 6.4 6.2
Change-Id: If3dd042416b7f61bbb3b43f7d563e52b406136a2
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-12-08 13:28:43 +01:00
Mikolaj Boc 4673f00277 Resolve the ownership problems in qClipboardPasteTo
A deleted mMimeData instance might be referenced if more that one file
item is present in the clipboadData. This fix uses a continuation
mechanism to only run the actual qWasmClipboardPaste when all the
data has been collected. The ownership of QMimeData is then transferred
to the global QClipboardData q_clipboardData.

Fixes: QTBUG-108841
Change-Id: I16def48d70ebbffc68462ed74ccd9ee8ee8053de
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-12-08 03:37:03 +01:00
Mårten Nordheim a94dcc3125 Work around missing wait_for declaration
Certain older SDKs don't declare the specific wait_for overload but
still uses it. So, we declare it.

Also add the factorycacheregistration include to wipe out any factory
that may be created and cached in the TU.

Change-Id: I778ab1b8724306b17bb6a2daa0b7364f268ded83
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2022-12-07 14:03:03 +01:00
Mikolaj Boc 4d07f84307 Fix the coordinate problems in wasm windows
The QWasmScreen's top left coordinate does not precisely translate
to correct page coordinates, especially when fixed position is used
and page margins are set. Also, this is wrong in complicated setups
with e.g. multiple nested elements.

Therefore, to get the correct coordinates in pointer event handlers,
we have to assume the local coordinates of the screen, and translate
those to the (possibly incorrect) coordinates that QWasmScreen thinks
it has in page.

It is another problem to fix the wrong coordinates QWasmScreen thinks
it has in the page.

This has been checked with complicated setups with screens in scroll
containers, screens with fixed position, screens with relative position,
with and without body margins etc.

Change-Id: I749f2507fec7ae278b6f9d7d13ae288e65472dba
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-12-07 13:03:03 +00:00
Mikolaj Boc 310aecc94a WASM compositor, clear last mouse target if it is the removed window
m_lastMouseTargetWindow pointer may be kept even though the window
has been removed. This leads to memory access problems.

Change-Id: Ie83b607bf5a815540605671dd1d1ad37288074c5
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
2022-12-06 23:15:02 +01:00
Mikolaj Boc 71c722c4a8 Fix the canvas element replacement for screen
The deprecated path in QScreen still allows to provide a
canvas as the screen element.

The order of parameters in replaceChild call was wrong there,
though.

Change-Id: Id499967e3c9cdc1652e2dc251e352b9564c99f70
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
2022-12-05 23:14:06 +01:00
Mikolaj Boc e50bc60e87 Resize wasm windows using a div outline
Introducing a div outline which handles the resize events by itself.
Manual computations in wasm compositor are no longer needed.

The outline reacts to setting css variables (border-width,
resize-outline-width), it sets the correct cursors using css and
always keeps the correct size.

Fixes: QTBUG-107498
Change-Id: I6b0564632af5e17e464fe93a3dfa20820c624292
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-12-05 22:26:59 +01:00
Tor Arne Vestbø a62f49e736 Windows: Avoid triggering QPlatformWindow creation when setting app badge
Calling QWindow::winId() will create the platform window if it hasn't
been created yet, which is not what we want.

Change-Id: I9d4ecb863f961fd3cef6d13e27bf175bf55eabcf
Reviewed-by: Mikołaj Boc <Mikolaj.Boc@qt.io>
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
2022-12-05 16:05:39 +01:00
Tor Arne Vestbø 8eab4e4850 macOS: Remove shadowed variable in handleKeyEvent
Change-Id: Icf9f9ecf673a10a15a2d0156bcd5c1da3688b591
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-12-05 15:58:29 +01:00
Tor Arne Vestbø b2e5d54726 macOS: Don't pass on key event text for function keys when IM is disabled
On macOS function keys such F1-F16 and the arrow keys result in NSEvents
with a character in the 0xF700-0xF8FF range of the private use area:

 https://unicode.org/Public/MAPPINGS/VENDORS/APPLE/CORPCHAR.TXT

We used to filter these out for all key events sent from the platform
plugin (4dbce2a469), but this had the side effect of breaking the
Unicode Hex Input keyboard's ability to explicitly input these
characters.

As of 705665957b we started trusting the
macOS text input system on whether a key event should include text or
not, which fixed both the hex keyboard and Russian keyboard input when
the key included the ^⌥ modifiers.

Unfortunately this didn't account for the case of non-IM enabled input,
so we started sending key events with text for arrow and function keys.
And since Arial Unicode MS provides glyphs for these code points, we
would end up with confusing characters in input fields when pressing
the arrow keys.

In general a client can not assume that the text() of a QKeyEvent is
printable, and the logic to determine if a character should be filtered
out or not depends on the font matching, since all code points can in
theory have a font that provides a glyph for it, but since we know that
the function key range on macOS is not supposed to have associated
glyphs we filter them out explicitly.

Note that we only do this for non-IM enabled text input, and otherwise
leave it up to the macOS text input system to determine if a event
should result in text insertion or not.

Task-number: QTBUG-106393
Pick-to: 6.4 6.4.2
Change-Id: I5498fbedee21b0720c56e99b26924959ade897bf
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-12-05 15:58:26 +01:00
Yuhang Zhao 732d073351 Windows QPA: Always apply system background color for top level window
This is a follow-up patch of commit 2991c66b75

We can unset the window background brush and always draw the background
ourself. Qt always paint all pixels anyway when blt'ing the backingstore,
so it should be safe to do this.

Since a theme might not provide a palette (e.g. when desktop setting
awareness is disabled), always use the default application palette.

Change-Id: I4fdc2467b3cc3999dd1acfe9411cec077ca66bd3
Reviewed-by: Yuhang Zhao <2546789017@qq.com>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-12-05 15:55:53 +01:00
Volker Hilsheimer b3dbfdd597 Windows: Reduce warning output when creating a new window
Amends f32aa06f4f, which called
setDarkBorderToWindow with false when creating a window if windows is
not running in dark mode. This generates warning messages on Windows 10.

We don't have to call the setter at all unless we want dark mode frames,
so skip it if we'd call it with 'false', as that is the default anyway.

At the same time, use categorized logging for these messages; they are
not the result of application developers doing something wrong, and are
only interesting when analysing specific issues.

Change-Id: If80028d71cc2cd9d6dd380976e00b736741287cb
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-12-05 15:55:53 +01:00
Christian Ehrlicher 9d27c07e28 SQL/MySQL: fix handling of json column
Add handling for MYSQL_TYPE_JSON by treating it the same as
MYSQL_TYPE_BLOB (which is used by current MariaDB Server for a json
column)

Pick-to: 5.15 6.2 6.4
Fixes: QTBUG-101680
Change-Id: I4d4b0cdad73cd12e0db4df4021fddbd6a649c8ed
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-12-05 01:56:45 +00:00
Tor Arne Vestbø 31973f3ff3 Teach QErrorMessage to use native dialog helper if available
And implement for macOS. The default modality of the QErrorMessage
on macOS now depends on whether the dialog has a parent or not.

The QErrorMessage must be hidden and re-shown again after each message,
so that the native dialog has a chance to recreate itself.

Change-Id: I474ed35d6271118834fac8e97f6f540a6fb89b8c
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-12-04 19:15:37 +01:00
Timur Pocheptsov 8a18466e38 qsslsocket_shared_mac: add more logging into certificate parsing
On macOS we observe strange CA certificates that are coming from
Security framework and which it cannot later parse from the DER
format we feed it in. Add some more debugging in order to understand,
which certificate gives such result.

Pick-to: 6.4 6.2
Task-number: QTBUG-109135
Change-Id: I75cf4591e33c85db6fe80d37d84ede1456c56231
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-12-04 15:06:58 +00:00
Cristian Adam 6da057d811 networklistmanager: allow building with LLVM-MinGW
At https://github.com/mstorsjo/llvm-mingw/issues/307 we can see that
LLVM-MinGW is able to build qtbase with winrt headers and cxx20 feature.

Change-Id: Ib4b5df7481f684ebdb26cbc4246bdf86ff3dd648
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
2022-12-03 18:32:03 +01:00
Axel Spoerl 4ca8a68408 Re-implement palette, standardPixmap, file icons, fonts in QGtk3Theme
Read theme colors from GTK3 style context and build platform theme
palettes in Qt.
React to runtime theme changes.
Re-implement methods to retrieve GTK3 styled standardPixmaps, fonts
and file icons.

Task-number: QTBUG-62510
Change-Id: Ib58d1614850764f2e88cca33883fd6c426b35aee
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
2022-12-02 15:57:11 +01:00
Timur Pocheptsov 96628b1254 Stop using deprecated constants and use suggested replacement
Pick-to: 6.4 6.2
Change-Id: I3686d896267d219501f8eeec74729c17d9c2b42d
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-12-02 15:55:30 +01:00
Tor Arne Vestbø 7e4c7d50a7 Add QGuiApplication API to set a number-badge in the Dock/task bar
The API is supported on macOS, iOS, and Windows. On Android no official
API exists for badging the application icon, and we don't want to take
on dependencies like ShortcutBadger [1].

The macOS and iOS implementations are trivial. The same goes for
the WinRT based implementation on Windows, but this API is only
available for applications that have a so called "package identity",
and does not seem to be stable for Windows 10.

To cover the cases where this API is not available we fall back to
drawing the badge manually, and set it as an overlay icon on the task
bar using ITaskbarList3. The look of this badge has been tweaked to
match the Windows 11/10 styles, and will pick up the user's choice of
dark/light mode and accent color if available.

[1] https://github.com/leolin310148/ShortcutBadger/

[ChangeLog][QtGui] Added QGuiApplication::setBadgeNumber() to inform
the user about e.g. the number of unread e-mail or queued tasks.
The badge will be overlaid on the application's icon in the Dock
on macOS, the home screen icon on iOS, or the task bar on Windows.

Task-number: QTBUG-94009
Change-Id: I6447d55177f9987b0dfcd93caf63c6167f7224c7
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-12-02 15:53:37 +01:00
Doris Verria dbe433f6d0 iOS plugin: Support picking folders for native file dialog
Fixes: QTBUG-104375
Change-Id: Idbc9eb44abed5e3cd0dd768a08bf8132aba58f43
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-12-02 11:42:58 +01:00
Doris Verria 443af8cd45 iOS plugin: Add native font dialog
[ChangeLog][iOS] Added native font dialog support for iOS.

Task-number: QTBUG-109059
Change-Id: If38e990e1c5e9fc1a303fce3e79c09c2d45daaa0
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-12-02 11:42:37 +01:00
Mikolaj Boc 9bc74d14f3 Avoid a null pointer deref when openGL windows are present
m_context2d in QWasmWindow might be null if the window uses OpenGL
for rendering. It is dereferenced nevertheless in ::paint(), which
should be avoided.

Change-Id: Id817f3663bb475d55dfc916b4b7eb255a88cea9d
Reviewed-by: Aleksandr Reviakin <aleksandr.reviakin@qt.io>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-12-01 09:25:44 +01:00
Doris Verria 715a6c3908 iOS plugin: Add native color dialog
[ChangeLog][iOS] Added native color dialog support for iOS.

Task-number: QTBUG-109042
Change-Id: I04187315d396d2f07b15eb4bd66b50253d873477
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-11-30 20:05:10 +01:00
Mikolaj Boc 1ebdd7130a Remove the OpenGL compile guards around QWasmBackingStore
This is no longer needed as OpenGL is no longer necessary for the
backing store on WASM.

Change-Id: I3eaa8094558947da2d1cc5526533f9f3fc8afeab
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-11-30 20:05:10 +01:00
Mikolaj Boc a812d1eb66 Don't tie compositor's enabled state to last added window
Currently, the compositor gets enabled/disabled based on the last
constructed window's surface type. This causes non-OpenGL windows not to
be displayed if any OpenGL window is created last.

The compositor should scan for any non-openGL windows on any change
to the window set to decide if it needs to be disabled or not.

Change-Id: I037470e39a3fbae50fd3a4e29cb6615130d7b114
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-11-30 20:05:10 +01:00
Mikolaj Boc a38fe10fff Fix typo in QWasmOffscre*e*nSurface
Change-Id: I34a84e11c7e2eb37e2f66d7c96fd1c2bdd77a351
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-11-29 21:05:51 +01:00
Mikolaj Boc 391e21d23d Avoid a crash on pasting files to text edits
The mime data object fed to qWasmClipboardPaste in qClipboardPasteTo
might have empty formats. We unconditionally check the first format
nevertheless, which leads to a crash. Avoid feeding empty mime data
to the widget system.

Fixes: QTBUG-108840
Change-Id: If874e973b742d35c16cb8a87194d9d4b8f470801
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-11-29 11:52:36 +00:00
Volker Hilsheimer f32aa06f4f Windows: Reevaluate dark frames if the application palette changes
Since 5ea7e3a811 we are using dark window
frames if the default palette is dark, unless applications explicitly
override dark frame support.

If the palette changes during runtime, we didn't reevaluate that
setting. Do that by handling ApplicationPaletteChange events in
QWindowsWindow. We still have to respect an explicit opt-out.

Simplify the code at the call sites of setDarkBorder(), we don't need
to check all the time whether the application has opted out of dark
frame support.

Pick-to: 6.4
Task-number: QTBUG-72028
Change-Id: I94e7d33cd21f9656ca210b43e775f487abc25b54
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-11-26 14:07:23 +00:00
Santhosh Kumar 3ee7a9f85c Let styles indicate that they support dark mode
Add a style hint that allows styles to indicate that they support
dark mode. The macOS and Fusion styles support dark mode, the other
styles, in particular the Windows Vista style, do not.

Task-number: QTBUG-72028
Change-Id: I02cac2e19a21898663f50f09a4ef419a613a73ec
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-11-26 15:07:07 +01:00
Mikolaj Boc 72bff530f9 Fix the assert in QWasmClipboard::writeToClipboardApi
The assert condition should be negated.

Change-Id: I901b61012ffaf893744dfb9f762b009f267b629d
Reviewed-by: David Skoland <david.skoland@qt.io>
2022-11-26 11:23:13 +01:00
Mikolaj Boc fa27a59ec3 Use the browser compositor for drawing windows on WASM
Make the browser compositor draw the window non-client area (using css
+ html). Get rid of OpenGL usage in non-OpenGL windows and use canvas
2d context instead to blit the texture (QImage).

Also, as part of the change, remove the deprecated canvas element support
in QScreen.

Fixes: QTBUG-107116
Fixes: QTBUG-107219
Change-Id: I65f0d91831c806315685ca681ac0e416673f5cd5
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Reviewed-by: Aleksandr Reviakin <aleksandr.reviakin@qt.io>
Reviewed-by: David Skoland <david.skoland@qt.io>
2022-11-26 11:23:13 +01:00
Ilya Fedin 58f885bb3c IBus: Use portal in snap
Snap supports the IBus portal for two years, but Qt applications
don't take its advantage in snap without setting IBUS_USE_PORTAL

Change-Id: I26a044d657c4b7040a21a8510116c0c7af7aaa52
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-11-26 08:57:56 +04:00
Timur Pocheptsov 4332cb3134 qnsview_drag: only ignore key modifier while dragging 'within the application'
We return a mask containing several supported DND operations and if modifiers
were ignored, an external application can select a 'wrong' operation (not the
one we wanted when pressing a modifier). Saying that, the old logic of ignoring
still applies if we are dragging 'within the application'.

Fixes: QTBUG-99471
Change-Id: I67c9a656960e95d6d2298f4b3bdd2052faedb263
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-11-25 14:40:36 +01:00
Phan Quang Minh 95b4cfb1af ibus: check object validity before honoring `inputMethodAccepted()`
`inputMethodAccepted()` always return false if there is no current focus
object. This means QIBusPlatformInputContext will fail to send the
necessary `FocusOut` request to the input context, causing IBus to not
send the appropriate content type information to the panel service when
the application regains focus and issue a `FocusIn` request.

This results in issues like
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5346, which can
happen when a Qt application is in foreground as the IBus daemon fails
to propagate the content type information to GNOME Shell, which acts as
the panel service on GNOME systems.

Fix this by checking for the validity of `object` before honoring the
result of `inputMethodAccepted()`.

Pick-to: 5.15 6.2 6.4
Change-Id: I6b79ffc7c5f03ffc05527c29e52a0859f3594bfa
Reviewed-by: Liang Qi <liang.qi@qt.io>
2022-11-25 09:55:39 +00:00
Yuhang Zhao acf3f063ef Proper clearing of WinRT factory cache in QWindowsTheme
I've checked the whole qtbase code base, this is the only
one that's left from the previous commit.

Amends commit ffb9dee1b0

Task-number: QTBUG-103611
Pick-to: 6.4 6.2
Change-Id: I76a9130654819d1336c27dac350f5ad56915ad81
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
2022-11-25 12:12:54 +08:00
Lorn Potter c2e6e9d02c wasm: fix build of wasm accessibility
Some platforms need extra help finding includes

Change-Id: I4f18b183cea780067dd9269e07dfb7db75606406
Reviewed-by: David Skoland <david.skoland@qt.io>
2022-11-25 12:42:58 +10:00
Tor Arne Vestbø 554ba2c39b macOS: Don't send posted events via runloop observer
The logic was added in b0016ea9a6b225757e3ee06b50e8f7d05463ddf7,
but the test-case in the bug report works fine without this logic.
As sending events from a runloop observer is dubious, and causes
problems since it's not tied to the quite complex machinery of
the general event processing, it's better to remove it.

The original issue is already tested by sendEventsOnProcessEvents
in tst_QCore/GuiApplication.

Task-number: QTBUG-4521
Change-Id: I857519a09a13a72b7434727c0229606403be7ed3
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-11-18 19:25:20 +01:00
Mikolaj Boc 626ec74359 Migrate to using the constructor of QtLoader
Wasm shell used to call the function QtLoader instead of constructing
a new QtLoader. Change this.

Also change the doc to recommend using the constructor.

Change-Id: I57c52eab389aa82449c7db3f4c646ffb234df778
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-11-18 18:02:21 +01:00
Liang Qi a823366f77 Add QPlatformTheme::MouseCursorTheme and MouseCursorSize
Also implement in QGenericUnixTheme/QKdeTheme/QGnomeTheme/QGtk3Theme.

On Wayland, there is wl_cursor_theme_load() and etc in wayland-cursor.h.

On X11/xcb, cursor theme and size are common, either in XCURSOR_THEME
and XCURSOR_SIZE envs, or in gsettings for gtk/gnome world.

On Windows, cursor theme is part of theme file, see SetWindowTheme in
https://learn.microsoft.com/en-gb/windows/win32/api/uxtheme/nf-uxtheme-setwindowtheme .
For system settings, for example on Windows 10, Mouse Settings,
Additional mouse options, Pointers Tab, Scheme.

On macOS, it looks like cursor theme is deprecated.

Change-Id: I5821377d966c281fb8330da1f5baa7f0ddf86a9f
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-11-18 16:19:34 +01:00
Mikolaj Boc 3b423f0e9e Do not allow an empty rect to become a window rect on WASM
For regular windows, the size should not be allowed to be empty. This
emulates system-wide minimum size setting on various operating systems.

Change-Id: I515fff8c9bfd14762dcfe88fb923ab10d8edd5c1
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-11-18 08:51:18 +01:00
Mikolaj Boc 15b528dec3 Null-check for window when handling pointer events
There might not be a window at the pointer event position on a WASM
screen, especially when the main window is not fullscreen.

Change-Id: I29aac8c410fdf2bf97cd1ed12433d87e18b4a354
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-11-17 12:52:12 +01:00
Ilya Fedin 7ea689c613 Fix QIBusPlatformInputContext leaks
QIBusPlatformInputContext re-creates various objects on ibus restart,
but never deletes them.

Sometimes this leads to multiplied input
(the same character entered multiple times).

Pick-to: 6.4 6.2 5.15
Change-Id: I34a898bfe56b19f9d76752c649e3aa64c77ae11a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-11-17 06:17:45 +04:00
Volker Hilsheimer 649dccf57b Reintroduce converter APIs for supporting native clipboard formats
In Qt 5, QWin(dows)Mime and QMacMime lived in the respective Extras
modules, which were removed and partially folded into the relevant
modules in Qt. QWindowsMime and QMacMime continued to provide the
abstraction for implementing built-in support for native clipboard
formats and UTIs within Qt, but only as private APIs.

After the recent clean up of those APIs and respective infrastructure,
we can now bring them back as public converter interfaces. Application
developers can subclass those and instantiate an instance of their
implementation to add support for platform or application specific
data formats.

These interfaces are not in the QNativeInterface namespace, as
applications don't call into Windows or macOS using those interfaces.
I.e. there is no class on which an application would call

  auto *converter= nativeInterface<QWindowsMimeConverter>();

Also, since applications override those converter types, we do want to
guarantee binary and source compatibility.

[ChangeLog][QtGui][QWindowsMimeConverter] Reintroduced to allow
applications to add support for conversion from and to Windows-native
clipboard formats to MIME-encoded data.

[ChangeLog][QtGui][QUtiMimeConverter] Reintroduced to allow
applications to add support for conversion from and to clipboard data on
macOS and iOS to MIME-encoded data.

Fixes: QTBUG-93632
Change-Id: Iebd909c3970015d203f59d5ab15e306b3d312f6e
Reviewed-by: Yuhang Zhao <2546789017@qq.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-11-16 22:14:00 +01:00
Tor Arne Vestbø e5f777638b Plumb QMessageBox::iconPixmap() to QPlatformMessageDialogHelper
For now this plumbs the QPixmap directly, but as a follow up we should
teach QMessageBox to deal with QIcons instead, and rejig the plumbing
correspondingly.

Change-Id: I51dee4240082abf0acb33b6ade553327295a99bd
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-11-16 15:17:19 +01:00
Yuhang Zhao bd7fa4a537 Windows: centralize how we handle error messages
Currently QtBase contains multiple implementation of how to get the Win32
and COM error messages, and they are almost exactly the same, what's worse,
Qt already has a private QSystemError class to do such things, so we are
re-inventing the wheel in many places. This patch removes all other custom
error message implementations besides the QSystemError one. And since there
are a lot of places need the COM error message, move the implementation to
QSystemError so that it can handle both Win32 error and COM error.

Since I'm touching these lines anyway, break them into short lines if they
are above the length limit.

Change-Id: I1067c874011800303f0f114b5cb8830ac6810fc0
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-11-16 19:44:43 +08:00
Tor Arne Vestbø a47c7a9826 macOS: Add dialog helper for native message boxes
The native implementation uses NSAlert, making a best effort to map the
QMessageBox properties to the native dialog, falling back to the cross
platform non-native dialog if the discrepancy is too big.

The initial implementation focuses on the current state of the
native dialog helper "protocol", but there's room for improvement
here, which would allow even more dialog types and properties to
be native.

[ChangeLog][macOS] Message boxes such as QMessageBox now follow
the platform look and feel by using native dialogs if possible.

Change-Id: I4da33f99894194a7b301628cd1fbb44d646ddf18
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-11-15 20:36:17 +01:00
Mårten Nordheim da0587c43a QNetworkInformation[win]: Capture another potential exception
As reported by a user.

Fixes: QTBUG-108382
Pick-to: 6.4
Change-Id: Ic94c65d533edd84c8fda5d713d9579a9492b88ae
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2022-11-15 17:12:33 +01:00
Morten Sørvig 64bb83f882 win: resolve theme fonts at 96 dpi
This code became out of sync with the changes to the
LOGFONT_to_QFont() implementation introduced in edb00660.

After that, LOGFONT_to_QFont() on longer adjusts the font size
according to the DPI for the primary display. This means that
the the code should also not get font metrics from the first
display, but instead get metrics at 96 DPI.

Fixes: QTBUG-105857
Pick-to: 6.4 6.2
Change-Id: I5974a77593e1944d889a45a352923fb9aa9a0dec
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-11-15 14:57:57 +00:00
Santhosh Kumar 2991c66b75 Apply system background color for top level window
Repaint top level window with system background color when it shows up
first time. The system background color will be affected by dark or
light mode settings in windows

Fixes: QTBUG-106583
Pick-to: 6.4
Change-Id: I9205335540e74e90bb068e30fc3d4db037fd580f
Reviewed-by: Yuhang Zhao <2546789017@qq.com>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-11-15 12:28:50 +01:00
Tor Arne Vestbø 27f0854813 macOS: Ensure NSApp initialization without relying on event processing
When processing events without QEventLoop::EventLoopExec we can not rely
on [NSApp run] for running the native run loop. This can happen e.g. when
running a dialog, or when processing events manually via processEvents().

Unfortunately, AppKit relies on at least one call to [NSApp run] for doing
critical initialization of NSApplication, so when we end up spinning the
native runloop via other means, we still need to ensure we pass through
[NSApp run] at least once.

Doing so in a way that relies on our own runloop sources firing and
interrupting the NSApp run is fragile though. For example, the logic
added in bffbfc5b33 to avoid live locks
in CFRunLoop by skipping out event runloop source when processEvents()
is called manually will also result in the [NSApp run] never being
stopped.

To fix this we use a dedicated runloop block instead, where we
explicitly call [NSApp stop:] when first entering the runloop.
In addition we ensure that none of our sources will process
events, so that we don't end up recursing into a runModal
or similar call until after we've initialized NSApp.

Change-Id: I137df46d5fa4105cdc39fe74b6c12275cfd46127
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-11-15 12:27:33 +01:00
Mikolaj Boc c56bd31f23 Always export and link in JSEvents and specialHTMLTargets
The two symbols are linked in & exported by using a publicly
visible symbol emscripten_set_wheel_callback. To actually link it,
but avoid calling it, a volatile false boolean flag is used in a
guarding if.

This should ideally be done by setting DEFAULT_LIBRARY_FUNCS_TO_INCLUDE,
but a cmake bug (see QTBUG-108444) is preventing this.

Fixes: QTBUG-108423
Task-number: QTBUG-108444
Change-Id: I6b0406d1059dcec63b3942468e210c53292ffe90
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-11-15 12:19:47 +01:00
Lorn Potter a9f94d078a wasm: unblock virtual keybaord
QtVirtualKeyboard can be used for non touch apps as well. We were not
taking this into consideration and only allowing touch devices to
access it.

Pick-to: 6.4
Change-Id: I17fcb360b6655ace4fba7447eb85561ba75338a5
Reviewed-by: David Skoland <david.skoland@qt.io>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-11-13 15:19:29 +10:00
Mikolaj Boc 2fd4d0586f Call qtUpdateApi on module as expected
The qtUpdateDpi function is a module function, not a scope function
(regardless of it being window-scope self or QtLoader-scope self).
Therefore it should be executed with module as this.

Fixes: QTBUG-108112
Pick-to: 6.4
Change-Id: Ib4604a43dbdd0caa114d3d892ea97b5ee4c9a9a8
Reviewed-by: Aleksandr Reviakin <aleksandr.reviakin@qt.io>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-11-11 19:31:30 +01:00
Thiago Macieira 28d9f05fa1 Gtk3: fix stack smashing on mismatch between bool and gboolean
Glib is written in C and predates C99 (though not really, glib 2.0 was
released in 2002), so it defines gboolean as int, a 4-byte type. C++'s
bool is a 1-byte type, so this caused a buffer overflow.

Problem introduced in 2b77e779ce
("QGtk3Theme: implement appearance function to detect dark themes").

Pick-to: 6.2 6.4
Change-Id: Ieba79baf5ac34264a988fffd172650701fa54da8
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
2022-11-11 06:44:26 -08:00
Volker Hilsheimer b58876c296 Windows: Inform accessibility system about the focused child item
When a complex object (i.e. one with children that are themselves not
fully exposed objects) gets focus, then we need to inform the
accessibility system about which child object actually has focus. This
was only done for item views, but not for other complex widgets.

An editable QComboBoxes is the focus proxy for its line edit. The line
edit never gets focus itself (QComboBox forwards relevant events),
and is the accessible child item with index 1. So when an editable
combobox gets focus, it needs to raise the automation event for the
line edit child.

Implement QAccessibleComboBox::focusChild to return the interface to the
lineedit for editable comboboxes so that the UI Automation bridge can
correctly notify about the focus being moved to an editable text input
field.

Fixes: QTBUG-107572
Pick-to: 6.4 6.2
Change-Id: Id60e2791ec859365255baa9bfd01547979cd2b44
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
2022-11-11 10:21:32 +00:00
Jan Arve Sæther 6707efcb97 a11y: Add support for Tables in macOS bridge
For a11y purposes, a table needs to be mapped into a logical
accessibility hierarchy.  There are several ways of doing this mapping,
and unfortunately macOS expects something different than what
QAccessibleInterface does.

So suppose we have a a 2x2 QTableView with both horizontal and vertical
header like this (the names reflect the QAccessible::Role names):

  +-----------+--------------+--------------+
  |           | ColumnHeader | ColumnHeader |
  +-----------+--------------+--------------+
  | RowHeader | Cell         | Cell         |
  +-----------+--------------+--------------+
  | RowHeader | Cell         | Cell         |
  +-----------+--------------+--------------+

In order to be presented to the screen reader on a platform, it goes
through two rounds of mapping:

QAccessibleInterface will have all headers and cells as direct children of the table:

 - Table
   +- ColumnHeader
   +- ColumnHeader
   +- RowHeader
   +- Cell
   +- Cell
   +- RowHeader
   +- Cell
   +- Cell

macOS expects a deeper hierarchy:

 - AXTable [QAccessible::Table]
   +- AXRow     [Qt:no eqiuivalent]
      +- [QAccessible::Cell] (The content of the cell, e.g. AXButton, AXGroup or whatever)
      +- [QAccessible::Cell] (The content of the cell, e.g. AXButton, AXGroup or whatever)
   +- AXRow
      +- [QAccessible::Cell] (The content of the cell, e.g. AXButton, AXGroup or whatever)
      +- [QAccessible::Cell] (The content of the cell, e.g. AXButton, AXGroup or whatever)
   +- AXColumn (this seems to just store the geometry of the column)
   +- AXColumn (this seems to just store the geometry of the column)
   +- AXGroup   (this represents the column headers)
      +- AXSortButton (clicking a header cell will trigger sorting)
      +- AXSortButton (clicking a header cell will trigger sorting)

It's unclear to me how RowHeaders are mapped (they are rarer than
ColumnHeaders, I expect to find them in e.g. spreadsheet applications).
I haven't found any native usage of them. So this patch simply ignores
them.

Notice that macOS have a three layer deep hierarchy to represent a table
(Table->Row->Cell), while QAccessibleInterface has a two-layer deep
hierarchy (Table->Row/Cell).

In the macOS bridge we therefore need to "inject" the Row/Column element
to be "between" the table and the cell.

The table will take ownership of all row and column elements that are
children of the table. These elements are not inserted into the cache
(it would be pointless, since the cache is basically just a mapping
between the QAccessibleInterface -> QMacAccessibilityElement, and the
row and column elements does not have a corresponding
QAccessibleInterface to be mapped from).

The rows and columns are therefore also created as soon as the table
element is initialized, and they are stored in two NSMutableArray
members of QMacAccessibilityElement.

A table is constructed like any other accessibility element, with a
valid axid and synthesizedRole set to nil.
Each child row and column element is constructed with the same axid as the
parent table element, and they will have the synthesizedRole set to
either NSAccessibilityRow or NSAccessibilityColumn.
With the synthesizedRole member we can then identify if we are a row,
column or the actual table, and implement their respective behaviors.

Notice that the child row/column is created with the parent's table axid
in order for them to have a way of finding their parent table element.
(there is no 'parent' member variable in QMacAccessibilityElement)

This glorious scheme isn't pretty, but seems to work.

Fixes: QTBUG-37207
Change-Id: I7c2451e629f5331b9a0ed61dc22c6e74a82cc173
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-11-10 19:50:14 +01:00
Mårten Nordheim 7898de4258 QNetworkInformation[Win]: Fix potential use-after/during-free
The WinRT NetworkStatusChanged callback may happen during or slightly
before we unregister our token, which we usually follow up by destroying
the object. So we have to avoid potentially doing work on a deallocated
object.
Do this using the old QPointer-trick. Neither me nor reporter can
reproduce it locally, so this is only a best-measure.
Further problems may be that the storage for the lambda has already
been destroyed and repurposed, in which case the pointer may be valid,
but junk, which would lead to another crash. But this is unavoidable as
long as MS does not synchronize callbacks with (un)registering new
callbacks. To attempt combatting this we hold our own lock around
unregistration and the "meat" of the callback.

Pick-to: 6.4 6.4.1
Fixes: QTBUG-108218
Change-Id: Iacf8b8f458cca3152ff395e9a38e8df193534f46
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-11-09 15:14:54 +01:00
Volker Hilsheimer 7cc0a8741c Make QMacMime::canConvert a non-virtual helper for other virtuals
Implementors are expected to return whether the converter can convert
both ways between a mime and a uti. However, this is implied in the
mimeForUti and utiForMime functions, and almost all converter implemented
canConvert by returning mimeForUti(uti) == mime.

A notable exception is the QMacMimeTypeName implementation, which can
only convert from from mime to uti using hard-coded special format names
and dummy data to provide place holders for drag'n'drop operations that
originate in Qt. That converter returned always false from canConvert,
but mapped the special "application/x-qt-mime-type-name" mime type to
the special "com.trolltech.qt.MimeTypeName" uti. Since nobody ever
requests data as "com.trolltech.qt.MimeTypeName", we still always ignore
that converter. The uti is then special-cased in the QMacClipboard code.

Lower-level code where only mime type or UTI are known can still call
the virtuals directly and check whether the returned string is empty,
which indicates that the converter does not support the conversion.

As a drive-by, fix coding style and variable naming.

Change-Id: I3d5d60faa82f8b31d9873c9da0097a308b9eeb50
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-11-09 13:22:30 +01:00
Volker Hilsheimer 2bdc027f5c macOS: delay initialization of small font
During construction of a QStyle, QApplication might not yet be
initialized, e.g. when calling QApplication::setStyle("macOS") before
constructing QApplication. In that case, we cannot access the platform
theme.

We don't just want to skip initializing the small font either though.
Store the smallSystemFont as a std::optional so that we can initialize
it once, when the first widget gets polished.

As a drive-by, remove the unused miniSystemFont variable.

Fixes: QTBUG-108047
Pick-to: 6.4 6.2
Change-Id: Id750770a563611fdbc6c7031fe102a99ea692be7
Reviewed-by: Samuel Gaist <samuel.gaist@idiap.ch>
2022-11-09 13:22:29 +01:00
Morten Sørvig 25b07371e1 wasm: add accessibility logging category
Use it for logging TODO items.

Change-Id: If3218effcc7f044269defd5187ec080d4132d674
Reviewed-by: David Skoland <david.skoland@qt.io>
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
2022-11-08 16:54:36 +00:00
Morten Sørvig af987e0f66 wasm: tidy up qwasmcclipboard.cpp/h
Use private class functions and data. Move static paste
function out of the class, next to the other static event
handlers. Remove writeToClipboard()'s unused argument.

Change-Id: I9098290a3885dc540ea29a989fe3e83f8f4d5396
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
2022-11-08 18:54:35 +02:00
Bartlomiej Moskal 153a3245dc Android: Do not override app_pal by AndroidPlatformTheme
It may happen that other styles (especially QtQucik styles) apply
different palette for applications. In such case AndroidPlatformTheme
should not override it when Light/Dark mode is changed

Task-number: QTBUG-83185
Pick-to: 6.4 6.2
Change-Id: I6a3b7ee047fcd729be03271a7202cd260360f83b
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-11-08 13:26:33 +00:00
Jan Grulich c0b0c7bebb Gtk3Theme: set XCURSOR_SIZE and XCURSOR_THEME for wayland sessions
GNOME doesn't set these for Wayland session and without those env
variables set users might experience broken cursor with Qt apps
as QWayland reads them to setup QWaylandInputDevice.

There is no cursor protocol available on Wayland yet, see also
https://gitlab.freedesktop.org/wayland/wayland-protocols/-/issues/58

Qt Wayland QPA plugin still tries to load from those two envs.

Fixes: QTBUG-67579
Fixes: QTBUG-87778
Pick-to: 6.4 6.2 5.15
Change-Id: I4e7f6871b56599170b12e796858238b1df6d47d1
Reviewed-by: Liang Qi <liang.qi@qt.io>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2022-11-08 13:42:27 +01:00
Volker Hilsheimer de0ff0d428 macOS: clean up clipboard code
Replace flavor with uti, remove unused parameters, remove unused
hasOSFlavor function. Hide QMacMimeData as an implementation detail, it
is generally undefined behavior to cast an object to a type it is not an
instance of (even if related and without new data members).

Apply const, fix coding style.

Task-number: QTBUG-93632
Change-Id: I3bc05a72bc47c78958f26211211e734387fbb024
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-11-07 09:31:18 +01:00
Volker Hilsheimer 2c54086317 QMacMime API cleanup: use uti instead of flavor
Update documentation.

Task-number: QTBUG-93632
Change-Id: I69a57608ba2a06211e89fcf511bc582509c00dc4
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-11-07 09:31:13 +01:00
Volker Hilsheimer 9f35db2a8a Standardize QMacMime and QWindowsMime
Make name of virtual functions explicit, following the QWindowsMime
API.

Task-number: QTBUG-93632
Change-Id: I7ada2b1aa86bc6e28b47383a32ab9cbaf9ad93e5
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-11-07 09:31:08 +01:00
Volker Hilsheimer bf08aac46a macOS: Make QMacMime's handler scope type-safe
The value indicates for which systems the handler is relevant, e.g.
clipboard and/or drag'n'drop. Rename the enum from "MimeType", which is
something else already, to "HandlerScope".

Make the enum a scoped enum to avoid implicit conversion to uchar, and
to allow for better value names. Use the type in APIs and only convert
to uchar when needed.

Make respective arguments default to both DnD and clipboard implicitly,
instead of explicitly interpreting an invalid zero-value as a default
value.

Task-number: QTBUG-93632
Change-Id: I85ab982f6c9fe78ea4d030dd0b0791c8ab866f67
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-11-07 09:31:04 +01:00
Volker Hilsheimer a1622083db QWindowsMime: port to use modern string literals
Task-number: QTBUG-93632
Change-Id: I75e780a0bf1137e99c6726fbff15be5cc68accd5
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-11-07 09:30:59 +01:00
Volker Hilsheimer 76fcd436c1 Rename QMacInternalPasteboardMime to QMacMime
We want to make it public, and there is no need for "pasteboard" since
it also coveres drag'n'drop. Add a default constructor that defaults to
supporting both clipboard and drag'n'drop, and clean up the code by
using that constructor where applicable.

Historical note: the converter interface was called QMacMime up to
Qt 4.2, when due to macOS changes it had to be replaced by
QMacPasteboardMime.

Task-number: QTBUG-93632
Change-Id: Id9712300039375aa6394598b104827e6f5d6c948
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-11-07 09:30:55 +01:00
Volker Hilsheimer fe1075332c Windows: simplify registration of QWindowsMime implementations
Register the QWindowsMime implementation instance in the QWindowsMime
constructor, and remove it again in the destructor.

Provide a convenience static method to register a mime type.

This makes it a lot easier to use the type, without having to use native
interfaces.

Since this requires adding a qwindowsmime.cpp file, move the (so far
internal) documentation there.

Task-number: QTBUG-93632
Change-Id: I3b5e45be6255bd11a576127304c4aec9d7364e69
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-11-07 09:30:48 +01:00
Volker Hilsheimer 68f097923f Fix registration of Windows-specific custom mime types
Data received by Qt from a native clipboard- or drag'n'drop-source is
mapped to a application/x-qt-windows-mime;value=... mime type, where the
"value" corresponds to the native clipboard format name, e.g.
"FileGroupDescriptor". When we register such a mime type in Qt, then we
need to get the same clipboard format number back. I.e. registering
'application/x-qt-windows-mime;value="FileGroupDescriptor"' needs to
produce the same Windows clipboard format identifier as the call to
RegisterClipboardFormat("FileGroupDescriptor").

Otherwise, a mime converter implementation has to operate on different
clipboard format values in the implementations of the different virtual
functions that are operating on FORMATETC data structures.

Task-number: QTBUG-93632
Change-Id: I0b7e3a2fc0e3f72bffc4490fc0ff4b190e0929a3
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-11-07 09:30:42 +01:00
Mårten Nordheim 35e54f9b7b QNetworkInformation[Win]: Catch potential exceptions
Some Windows SDKs seem to throw an exception (sometimes?) when
calling ConnectionProfile::NetworkAdapter.
Catch the exception and ignore it, we would return Unknown anyway.
And just in case it is needed, do the same for GetConnectionCost.

This requires enabling exceptions for the plugin.

Fixes: QTBUG-108156
Pick-to: 6.4 6.4.1
Change-Id: Ie6c5adb3715578aa94ef3391afae79d9aecdc5d3
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
2022-11-04 11:54:31 +01:00
Volker Hilsheimer 0bd46cc062 Fix spelling of converter
Primarily in the Cocoa clipboard code.

Change-Id: I39fede6144be5a0007a94e2ac2464892c958732f
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-11-04 02:13:24 +01:00
Liang Qi 71c3aab7ba xcb: Flush Display when processing xcb events
Only calling xcb_flush() is not enough when users use xlib calls
to paint with the Display, for example in QWidget::paintEvent(),
and not call XFlush().

This fixes a regression since Qt 4.x.

In Qt 4, we use XNextEvent() in x11 event dispatcher which
implicitly called XFlush(). In Qt 5 and 6, we use xcb calls.

See also https://www.x.org/releases/X11R7.5/doc/man/man3/XFlush.3.html

Most client applications need not use this function because the
output buffer is automatically flushed as needed by calls to
XPending, XNextEvent, and XWindowEvent.

Pick-to: 6.4 6.2 5.15
Fixes: QTBUG-46681
Fixes: QTBUG-100085
Change-Id: I08dc0800ad0e23f0c2293d0d4e4bd29d92155752
Reviewed-by: JiDe Zhang <zhangjide@uniontech.com>
Reviewed-by: Liang Qi <liang.qi@qt.io>
2022-11-03 21:43:57 +02:00
Liang Qi be4d339ce7 xcb: Add xlib wrapper for XFlush()
Also avoid to include xlib headers directly.

Pick-to: 6.4 6.2 5.15
Change-Id: Id60a9b39a9d8284d5d0ab3df1ed61f844f1e68e4
Reviewed-by: JiDe Zhang <zhangjide@uniontech.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-11-03 21:43:56 +02:00
Volker Hilsheimer 83d5a6ee62 Clean-up: const'ify QMacInternalPasteboardMime API
Pass parameters as const-reference, and declare member functions as
const. They have no reason to modifty the converter itself, and
converters are expected to return the same result for identical input.

Task-number: QTBUG-93632
Change-Id: I19ef799c1aca956f2cd1aaea1d4f7ecb565fc017
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-11-03 17:29:08 +01:00