Commit Graph

9909 Commits (626ec74359b87c4f471c19ec41721f8f8fc46e91)

Author SHA1 Message Date
Andreas Buhr ffb9dee1b0 Proper clearing of WinRT factory cache
If we use winrt's factories we have to make sure to to clear the factory
cache when one of our dlls is unloaded or we will run into dangling
factory entries which might result in crashes. So we have to make sure
that winrt::clear_factory_cache is called on every dll unload.

In order not to increase compile times and dependencies too much
qfactorycacheregistration_p.h needs to be included in Qt code whenever
we use winrt's factory cache. A rule of thumb being: Include
qfactorycacheregistration_p.h whenever including winrt/base.h.

Other Qt modules which use winrt's factories need to be updated too.

Fixes: QTBUG-103611
Pick-to: 6.2 6.4
Change-Id: I7ab24e4b18bffaca653c5b7f56a66ce99212e339
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-10-31 12:02:30 +01:00
Giuseppe D'Angelo fa4c8fa71a SQLite: enable default features for the built-in version
SQLite's configure enables, by default, more options than the ones that
we enabled in our bundled copy of SQLite. Add the necessary defines
to reach feature parity, namely support for MATH functions, GEOPOLY and
FTS4.

[ChangeLog][Third-Party Code] SQLite shipped with Qt now supports
FTS4, the mathematical functions and the Geopoly interface.

Change-Id: Iaed93fa1994a4c14c0990fab18d7a6e3e67af1e4
Fixes: QTBUG-108016
Reviewed-by: Christian Ehrlicher <ch.ehrlicher@gmx.de>
2022-10-30 15:00:37 +02:00
Timur Pocheptsov 6a839e0ae4 qnswindow (-backgroundColor) - return 'clear color' for Qt::Popup
That's what we initially did for borderless windows and we need it in order
to draw rounded corners for context menus.

Pick-to: 6.4 6.2
Fixes: QTBUG-106108
Change-Id: I6e4254b714ad7a094aa295546d5ac7fba5e21b13
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-10-28 23:42:39 +02:00
Tor Arne Vestbø 737011dd02 macOS: Don't include QSystemTrayIcon windows in Dock menu window list
As of 3fcdb6cb6e we now have a hidden
Window menu, which results in macOS also populating the Dock menu
with the application's windows.

But since the AppKit logic for populating the window menu happens when
the window is shown, and we create the menu after many windows have
been already shown, we had a workaround to add the shown windows
manually.

Unfortunately this workaround didn't take into account the NSWindow
excludedFromWindowsMenu property, nor did it include various other
checks that AppKit itself uses to decide if a window should be
included in the window list, resulting in adding the NSStatusBarWindow
that AppKit uses to manage the status bar items.

Instead of trying to replicate the AppKit logic, we toggle the
excludedFromWindowsMenu property back and forth, which triggers
AppKit to reevaluate the situation for each window, and add it
to the window menu if necessary.

Fixes: QTBUG-107008
Pick-to: 6.4
Change-Id: I6c7f61c1f4610fec9ce1f814fcea2b6140230602
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-10-28 19:46:47 +02:00
Timur Pocheptsov b690dcf2bd Revert "QMacStyle: paint PE_PanelScrollArea differently"
This reverts commit a43845b75a.

Reason for revert: As I can see from the pictures generated by the tests, the scroll bar now looks significantly worse and wrong.

Change-Id: I454b316b844839ebfc3f44633348e527e2a30f34
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-10-28 16:41:18 +00:00
Tor Arne Vestbø 12cf77dc48 macOS: Remove duplicated sources and headers in plugin CMakeLists.txt
Change-Id: I0a4e0e0948a535a211de9312e08c797aad968926
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-10-28 18:41:18 +02:00
Laszlo Agocs 91d1ec3589 eglfs: kms: Make screen cloning functional by default
It is not necessary to disable the thread-based drm event reading
(QT_QPA_EGLFS_KMS_NO_EVENT_READER_THREAD) anymore when using screen
cloning.

Amends 8207751661 and
14bb413309

Note that this does not work when atomic commits are enabled. (i.e.
running with QT_QPA_EGLFS_KMS_ATOMIC=1 and attempting to use screens
that clone will not function as expected, regardless of which event
reading method is used - that needs a rework of how atomic requests
are handled, and is not something we are going to invest into given
that atomic is not even used by default)

Pick-to: 6.4
Fixes: QTBUG-91882
Change-Id: Iba83688c7790d7e721db3704d422034b654a8d8a
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2022-10-28 13:47:58 +02:00
André de la Rocha 31e7790102 Windows QPA: Remove tablet->mouse synth and fix Drag&Drop with touch/pen
This patch avoids synthesizing mouse messages in the QPA for touch/pen
input, and lets the GUI do mouse event synthesis for unhandled touch/pen
events, if required, like in other platforms. This requires a workaround
to avoid breaking drag and drop with touch/pen (or making it worse). DnD
on Windows is based on the DoDragDrop() Win32 API, which does not work
with touch/pen input, which in some cases cause a DnD operation started
with touch/pen to hang until the mouse is moved. To avoid it we process
pointer messages for touch/pen and generate mouse input through
SendInput() to trigger DoDragDrop(), which then seems to work as
expected.

So now we inform QtGui that the Windows platform no longer sends
synth-mouse events after tablet events (unsetting the flag added in
f931e5e72d); this completes what was
attempted in 8ada0633cd.

Fixes: QTBUG-106368
Fixes: QTBUG-57577
Fixes: QTBUG-100788
Task-number: QTBUG-77414
Task-number: QTBUG-104594
Pick-to: 6.4 6.3 6.2
Change-Id: I46db3c74be2a95cf2d94ba930398e58dc930d2db
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
2022-10-28 10:27:11 +00:00
Yuhang Zhao 19857fda75 Windows QPA: suppress warning message when not needed
We have done the same thing when calling SetProcessDpiAwareness(),
but it's also needed for SetProcessDpiAwarenessContext(), otherwise
there will always be a warning message when the user uses a manifest
file to set the DPI awareness mode for the application (which is highly
recommended by Microsoft).

Pick-to: 6.4
Change-Id: I31894d41c89581b6edd7826cb3dabad492f6c2a8
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
2022-10-28 13:47:33 +08:00
Timur Pocheptsov a43845b75a QMacStyle: paint PE_PanelScrollArea differently
To make it look more natural (without outline and with proper colors).
Otherwise this thing looks bad in both Aqua and Dark themes -
can be seen if scrollbars always shown (this option is set in "General"
settings).

Tried so far:

- not to draw this element at all - gives a visible hole in the corner

- ask the horizontal bar to render its knob track a bit longer (resetting
  a clip properly) - gives a weird side-effect when scrolling in Dark
  mode + unfortunately outline of a track is still visible (it overlaps
  the vertical bar's track).

Alas, good old hardcoded colors/alpha values as a last resort.
PE_Frame had -1,-1 adjustment, making a frame line visible in the
corner below scrollbars, giving another strange effect.

Fixes: QTBUG-106927
Change-Id: Ie0367c3bd6f40b3fa4ca6afac09f27e446fc007d
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-10-27 17:14:51 +02:00
Rob De Reycke e39ca06dbc xcb: Fix segmentation fault on destruction of QXcbConnection
The same screen was detected twice.

Fixes: QTBUG-104319
Pick-to: 6.4 6.3
Change-Id: Id1f93d68de0306604f2e6a9104962a1d3b0db366
Reviewed-by: Liang Qi <liang.qi@qt.io>
Reviewed-by: Jonas Kvinge <jonas@jkvinge.net>
2022-10-27 08:27:42 +02:00
Bartlomiej Moskal b4a9bb1f6a Android: Handle light/dark mode changes
Update Theme's style according to current UiMode.

New style.json file for dark mode was added (stored in separate
subdirectory 'darkUiMode/'). Theme_DeviceDefault_DayNight[0] is used for
extraction for API 29 or higher. Style is updated each time when UiMode
is changed.

[0]https://developer.android.com/reference/android/R.style#Theme_DeviceDefault_DayNight

Task-number: QTBUG-83185
Pick-to: 6.4 6.2
Change-Id: Id26059231f41761d822d494ac6c641bf3cba3322
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-10-26 17:13:44 +02:00
Wojciech Błaszak fbf586db2c QGuiApplication on Android can now detect multiple displays
- Extending QtNative.java with access to DisplayManager and get
  details about available displays
- Extending Android Platform Integration with display's list
  handling
- Change QAndroidPlatformScreen to initialize itself from QJniObject
  representation of an android Display object
- Move initialization of Primary display from QAndroidPlatformScreen
  to QAndroidPlatformIntegration

Change-Id: I3d8f97f5cf9f81bbecc8716c25ff323097e57a15
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-10-26 15:32:52 +03:00
Morten Sørvig 4711f078b7 wasm: disable run-time check for specialHTMLTargets
Recent versions of Emscripten may abort if module_property()
is used to look up specialHTMLTargets, which makes run-time
checking impossible. The abort is implemented on the JS property
getter on the Module object, which means that it's not possible
to bypass this by using e.g. EM_ASM instead of the C++ API.

Disable usage of specialHTMLTargets on emsdk > 3.1.14 for now,
until we can add API (or find some other means) for opting in.

This commit also adds functions for comparing Emscripten
versions.

Pick-to: 6.4
Change-Id: Ibe5d1a82f267fa95dd62cdfc66595bc23036933f
Reviewed-by: Aleksandr Reviakin <aleksandr.reviakin@qt.io>
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
2022-10-25 14:39:24 +00:00
Jani Heikkinen 283e29e539 Revert "Android: fix Android assets handler not listing dirs with only sub dirs"
This reverts commit 89f89cedc0.

Reason for revert: QTBUG-107879

Task-number: QTBUG-107627
Fixes: QTBUG-107879
Change-Id: I31ceec5156837281b25fd17024c01e3477550ce0
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-10-25 13:38:46 +00:00
Mårten Nordheim ba4710a33f qtwindowsglobal: Fix mixed-enum operations warning
With c++20 doing operations between different enums is
warning(-as-error).
Declare operator-overloads for a particular pair of enums to make this
compile again. Requires giving one of them a name as it was previously
unnamed.

Pick-to: 6.4 6.2
Change-Id: I23296117b6d9a84273da6639582e075d631e5602
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2022-10-25 15:19:41 +02:00
Mårten Nordheim 70d2437e6f qwindowstheme: Remove unused function
Causes warnings(-as-errors).

Pick-to: 6.4 6.2
Change-Id: I77a40d9427cba277012a8343d6badd2c932798af
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2022-10-25 15:19:41 +02:00
Volker Hilsheimer b3ce494bac Windows 11: draw checked menu items with an explicit background
On Windows 11, the UXTheme API draws both MBI_PUSHED and MBI_HOT in the
exact same color as the icon grove. For menu items with icon, but with
no explicit "On" icon, that makes it impossible to see whether the item
is checked.

Work around this problem by drawing the background in a light version of
the highlight color, which simulates the style on Windows 10.

Note: In modern Windows 11 menus, checkable items with icons render both
the checkmark, and the icon next to each other.

Pick-to: 6.4 6.2
Fixes: QTBUG-98354
Change-Id: I830eca5cdb3317f69dd5c863586e0b0eaa8774d2
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2022-10-25 13:54:21 +02:00
Mikolaj Boc d553ec049d Make Qt on WASM correctly draw windows with QT_SCALE_FACTOR
The GUI scale factor was taken into account twice, once in
QBackingStore::resize and then again implicitly in
QWasmBackingStore::resize, through window()->devicePixelRatio(),
which contains it as one of its multipliers.

Fixes: QTBUG-80992
Pick-to: 6.4
Change-Id: I75ac8d85c14230207379b789834256de4254811b
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-10-25 08:08:32 +02:00
Yuhang Zhao bea5649cd1 Windows: bump NTDDI_VERSION to latest version and remove some duplicated code
We have NTDDI_WIN10_NI (0x0A00000C) in the Win11 SDK (10.0.22621)
so bump the value in Qt (currently 0x0A00000B) to it.

And when searching for _WIN32_WINNT/WINVER/NTDDI_VERSION throughout
the whole qtbase codebase, I found some duplicated code, mostly
leftovers from the legacy time. Replace them with our own windows
header can achieve the same effect: we have defined all the necessary
macros to unblock the latest features. And place the header at the
top most place to include the macros as early as possible.

Change-Id: I37d9ac40ca9748208c7b2e89f374eda362dbefd6
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
2022-10-24 13:22:24 +08:00
Yuhang Zhao 0ae36affed Remove unimplemented function from WinVistaStyle
The implementation of the "scrollBarGripperBounds" function originally
lies in the Windows XP style source code, it was totally removed during
the previous refactor commit, but the function declaration was not
removed at the same time. We need to either remove the declaration or
bring back it's implementation, but since we don't use this function
at all (otherwise there will be link errors), it's better to just remove it.

Amends commit 46f98147f4

Change-Id: I76444d63966f1007114d090837092ea11fda0ccb
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Santhosh Kumar <santhosh.kumar.selvaraj@qt.io>
2022-10-24 10:05:46 +08:00
Volker Hilsheimer a8c6958a87 Add QPlatformTheme::MenuBarFocusOnAltPressRelease
On Windows, pressing and releasing the Alt key moves focus to the
menubar. This is implemented in widgets, but not in Qt Quick.

Add a new theme hint so that we can make Qt behave natively on all
platforms, and make the common style's respective styleHint default to
the theme hint.

Change-Id: I101bec56afd51e81ebb128c288f8a1e9b7efedb4
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-10-23 13:04:02 +02:00
Timur Pocheptsov 6c2387571a QCocoaMenuBar: avoid duplication of 'special' entries in the 'Edit' menu
For this, after the app's main menu is set, we are looking for a special
menu (which is essentially translates into 'Edit') and check if AppKit
inserted 'Start dictation' magic item. If not - we apply the solution
that Volker implemented in d42cfeb84f
for 'Edit' menu - we call insertDefaultEditItems.

Pick-to: 6.4
Fixes: QTBUG-104709
Change-Id: I8fee93c43e7cf974f94d173cd53adf8097b263e0
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-10-22 19:33:28 +00:00
Eirik Aavitsland 311e508154 jpeg handler: store Grayscale16 format images as grayscale, not rgb
No point in storing multiple channels when we have single channel
data. And as jpeg anyway has only 8 bpc, information loss is
unavoidable, so just convert to Grayscale8 and store as that.

Fixes: QTBUG-107810
Change-Id: Ib62038acf07d4b875b8416825fb0095510c14b5b
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
2022-10-22 13:32:52 +02:00
Christian Ehrlicher 7d99fa8e5b SQL/MySQL: rework driver option parsing
Rework the parsing of client option to make it easier to add new
options. Add the two options MYSQL_OPT_SSL_CRL and MYSQL_OPT_SSL_CRLPATH
and deprecate the SSL_foo options without the MYSQL_OPT_ prefix.

Change-Id: Ibaf5f553d77d9c102ca2bfef2fe68be0572f594b
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-10-22 09:45:13 +02:00
Mikolaj Boc 2c8cf8eb42 Fix the workaround in ~QWasmOpenGLContext
The workaround stopped working because JSEvents is now not a global
object. Update the workaround by exporting the JSEvents object from
emscripten runtime and replacing the function that removes the
event handlers to a dummy function that does nothing temporarily, only
to revert it when the context is destroyed.

Fixes: QTBUG-107197
Pick-to: 6.4
Change-Id: Icceae884c85e04fdafcca6cf3c563094d3f6f0dc
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-10-21 18:02:34 +02:00
Assam Boudjelthia 89f89cedc0 Android: fix Android assets handler not listing dirs with only sub dirs
Amends edd983071e.

Remove redundant calls to AAssetDir_getNextFileName() in
AndroidAbstractFileEngine::setFileName(). It's enough to check
if AAssetManager_open() returns null and AAssetManager_openDir() is
valid for the provided asset file name.

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: I37ae9cb64fbbc60699bb748895f77fd6a34fae1f
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2022-10-21 16:54:29 +03:00
Volker Hilsheimer 933eb68a9d Windows: Don't force native file dialogs to index compressed files
We use QWindowsShellItem to hook into the native windows file dialog
and interface correctly with special windows folders. We create objects
of QWindowsShellItem e.g. when the user selects a file. We then probe
the shell item for various attributes, e.g. to see if it represents a
folder.

The selected item might be a compress archive of significant size, and
checking whether that archive is a folder can take significant amount
of time during which the UI is completely blocked.

To prevent that, first check whether the item is a compress item, or a
stream, and if so, don't check whether it has sub-folders.

Also, don't use the SFGAO_DISPLAYATTRMASK value, which the API
documentation [1] explicitly documents as "Don't use".

[1] https://learn.microsoft.com/en-us/windows/win32/shell/sfgao

Fixes: QTBUG-107618
Pick-to: 6.4
Change-Id: Ifcdec53ec3f8a0236d849a0b72a71afbd03d8290
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2022-10-21 14:43:21 +02:00
Christian Ehrlicher 2b35b89803 SQL/MySQL: misc cleanup
Cleanup the code a little bit and use qsizetype on some obvious places.

Change-Id: Ib9e5ec79a39c45c9fab7e21dbda70ed728025191
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-10-21 09:29:52 +02:00
Christian Strømme 5f9591bde3 Android: Fix clipboard issue with urls
Both hasUrls() and hasText() can return true when containing urls, as
hasText() checks hasUrls() as well.

Pick-to: 6.4 6.2 5.15
Fixes: QTBUG-85773
Change-Id: I91a34f151e7de17ab5b9a2f24bc0b6e6c097d7f9
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
2022-10-20 15:39:13 +00:00
Mikolaj Boc fffea48ea5 Fix typo in QWasmWindowStack's name
'Wasm' in it is duplicated.

Change-Id: Ie00e02fb7ae4d9e13f490ce2d46a4eabf3f5710c
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
2022-10-20 16:36:23 +02:00
Santhosh Kumar 46f98147f4 Refactor windows vista style for Qt widgets
Removed windows xp style and Cleanup windows vista style for Qt
widgets.

Change-Id: Ia05e8bca9bad477cec535d2288d9773546e0e116
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-10-19 17:28:13 +02:00
Assam Boudjelthia 6f418df9cc Android: properly retrieve mime type of uri to for openUrl()
Retrieve the mime type of the url regardless of whether QFile::exists()
returns true or false, because it is nonetheless required when calling
openUrl().

Pick-to: 6.2 6.3 6.4 5.15
Fixes: QTBUG-47979
Change-Id: Ia095b76d5d39addb0b115eb97ac6bbae0c18a21f
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Samuel Mira <samuel.mira@qt.io>
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2022-10-19 16:39:09 +03:00
Doris Verria 0709af1c02 QMacStyle: Set NSControlStateValueOn for selected tabs
We draw tab buttons as NSButtons of type PushOnPushOff. To draw a
selected tab, we used state ON (NSControlStateValueOn), which gives it
the accent color, and state OFF for non-selected tabs. To draw a
selected and pressed tab, we use state OFF and set highlight:
depending on isPressed.
This worked fine up until macOS 11 because when setting highlight to
true the push button would draw the accent color no matter the state.

In macOS 12, things are different. A highlighted NSButton doesn't draw
the accent color anymore, but rather a gray background.
So when we draw a selected tab using NSControlStateValueOn (blue/accent
color) and then press it (state changes to NSControlStateValueOff), the
tab will change color from accent/blue to gray. The text remains white,
so it's not clearly visible.

To fix, set the NSControlStateValueOn for selected, pressed tabs on
macOS 12, so the background color doesn't change when pressing on a
selected tab.

Fixes: QTBUG-101000
Pick-to: 6.2 6.4
Change-Id: Iaf48a7e2ae536c7c591578bb3c1065bd0e29b2e1
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-10-19 06:07:15 +02:00
Timur Pocheptsov f50f6a456a QIOSMessageDialog::exec - work around 'windowsless' exec
While the need for such scenario is arguable, we can imagine that some app
first shows some message box (by calling QDialog::exec()), and then creates and shows
the main UI/window/widget. Without such a widget, app's keyWindow is nil,
its rootViewController is also nil and no alert is presented at all.
To save the situation, we try hard and check the primary screen's uiWindow
(using QIOSScreen::uiWindow) searching for any window and using its root
view controller.

Pick-to: 6.4 6.2 5.15
Fixes: QTBUG-79977
Change-Id: I9bf38bdf540f1f1dbe42b86df94d6a1b4694e9f2
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-10-19 00:10:09 +02:00
Timur Pocheptsov 942abaae59 QMacStyle: restore control size after re-initialization
We had to re-initialize NSSlider, due to some hidden problem with
stale geometry, when just setting properties of a cached control
(the remains of another previous QSlider render, using the same NSSlider).
But -initWithFrame: also resets the control size we set earlier,
thus 'small'/'mini' becoming 'normal'.

Fixes: QTBUG-107450
Pick-to: 6.4 6.2
Change-Id: Ice42c787ec65d89c1c15f9c89462b7804aafe51c
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-10-18 18:55:32 +02:00
Timur Pocheptsov 9e5e330a09 QIosScreen: retain the right window
When initializing m_uiWindow (instead of trying to retain this window
itself, which is harmless, since it's nil, but useless, since it's
not the right window).

Pick-to: 6.4 6.2 5.15
Change-Id: I7855fd7c24ebfc28fbb912966f8010caba914fe7
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-10-18 16:15:51 +02:00
Timur Pocheptsov 46b290dda8 QIosTextResponder: stop using deprecated constants and type
Use NSWritingDirection and corresponding enumerators instead.

Pick-to: 6.4 6.2 5.15
Change-Id: Ie76ec2b8d07ab70288c7071182f215412d3e133c
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-10-17 16:46:03 +00:00
Timur Pocheptsov 6e288701e8 QIosMenu - do not check -undo: and -redo: selectors
With the latest Xcode 14 an attempt to 'Archive' and distribute an
app to the App Store Connect ends with a strange warning:
"App Store Connect operation Error The app references non-public
selectors in Payload/appname.app/appname: redo:, undo:". Googling
finds many similar reports and complains (with a bunch of different
selectors suddenly reported as non-public). We filter out undo/redo
instead, the selectors without parameters.

Change-Id: I9667dc61f650f6b6ec42c64a9aa6fbff57fe5049
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
2022-10-17 08:55:33 +02:00
Marc Mutz fc76767692 Long live Q_UNREACHABLE_RETURN()!
This is a combination of Q_UNREACHABLE() with a return statement.

ATM, the return statement is unconditionally included. If we notice
that some compilers warn about return after __builtin_unreachable(),
then we can map Q_UNREACHABLE_RETURN(...) to Q_UNREACHABLE() without
having to touch all the code that uses explicit Q_UNREACHABLE() +
return.

The fact that Boost has BOOST_UNREACHABLE_RETURN() indicates that
there are compilers that complain about a lack of return after
Q_UNREACHABLE (we know that MSVC, ICC, and GHS are among them), as
well as compilers that complained about a return being present
(Coverity). Take this opportunity to properly adapt to Coverity, by
leaving out the return statement on this compiler.

Apply the macro around the code base, using a clang-tidy transformer
rule:

    const std::string unr = "unr", val = "val", ret = "ret";
    auto makeUnreachableReturn = cat("Q_UNREACHABLE_RETURN(",
                                    ifBound(val, cat(node(val)), cat("")),
                                    ")");
    auto ignoringSwitchCases = [](auto stmt) {
        return anyOf(stmt, switchCase(subStmt(stmt)));
    };

    makeRule(
       stmt(ignoringSwitchCases(stmt(isExpandedFromMacro("Q_UNREACHABLE")).bind(unr)),
            nextStmt(returnStmt(optionally(hasReturnValue(expr().bind(val)))).bind(ret))),
       {changeTo(node(unr), cat(makeUnreachableReturn,
                                ";")),  // TODO: why is the ; lost w/o this?
        changeTo(node(ret), cat(""))},
       cat("use ", makeUnreachableReturn))
    );

where nextStmt() is copied from some upstream clang-tidy check's
private implementation and subStmt() is a private matcher that gives
access to SwitchCase's SubStmt.

A.k.a. qt-use-unreachable-return.

There were some false positives, suppressed them with NOLINTNEXTLINE.

They're not really false positiives, it's just that Clang sees the
world in one way and if conditonal compilation (#if) differs for other
compilers, Clang doesn't know better. This is an artifact of matching
two consecutive statements.

I haven't figured out how to remove the empty line left by the
deletion of the return statement, if it, indeed, was on a separate
line, so post-processed the patch to remove all the lines matching
^\+ *$ from the diff:

  git commit -am meep
  git reset --hard HEAD^
  git diff HEAD..HEAD@{1} | sed '/^\+ *$/d' | recountdiff - | patch -p1

[ChangeLog][QtCore][QtAssert] Added Q_UNREACHABLE_RETURN() macro.

Change-Id: I9782939f16091c964f25b7826e1c0dbd13a71305
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-10-15 22:11:47 +02:00
Christian Ehrlicher c3dccfef22 SQL/OCI: fix compilation
Fix compilation error introduced with
917b4d3802 and add a missing override

Pick-to: 6.4
Fixes: QTBUG-107544
Change-Id: I53571a0a113dc0f1e65f8773e66c02c1764739ee
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Sze Howe Koh <szehowe.koh@gmail.com>
2022-10-14 20:34:44 +00:00
Christian Ehrlicher 71f7a49fb2 SQL/OCI: add missing overide()
QOCIDriver::hasFeature() missed a 'override' which prevents compiling it
with '-Werror'

Pick-to: 6.2 6.4
Change-Id: I73a30134415947475e8f378fdb51bdd3f7fdd989
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-10-14 16:34:47 +02:00
Morten Sørvig 4df800d938 wasm: remove QWasmClipboard::m_isListener
Similar to isPaste (removed in previous commit), m_isListener
is set when handling external clipboard events, and is no
longer needed now that QWasmClipboard::setMimieData() is no
longer called for that case.

Change-Id: Ib44612e3bd1d59bac95b041ccffdd2ae97f5f879
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-10-14 14:34:47 +00:00
Morten Sørvig 87c3d2a3ce wasm: remove QWasmClipboard::isPaste
QWasmClipboard::setMimeData() was used to move clipboard data for
two different cases:

  1) On programatic QClipboard::setMimeData() call from application
  2) On paste event from the browser

However, we are free to not call it in case 2) above, which means
it can be used to handle programatic setMimeData() exclusively.

Change-Id: I5bb452538027ee8eab36be6e405ae416f350a08e
Reviewed-by: Mikołaj Boc <Mikolaj.Boc@qt.io>
Reviewed-by: David Skoland <david.skoland@qt.io>
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
2022-10-14 16:34:47 +02:00
Marc Mutz aa37e67ef7 Port from qAsConst() to std::as_const()
We've been requiring C++17 since Qt 6.0, and our qAsConst use finally
starts to bother us (QTBUG-99313), so time to port away from it
now.

Since qAsConst has exactly the same semantics as std::as_const (down
to rvalue treatment, constexpr'ness and noexcept'ness), there's really
nothing more to it than a global search-and-replace, with manual
unstaging of the actual definition and documentation in dist/,
src/corelib/doc/ and src/corelib/global/.

Task-number: QTBUG-99313
Change-Id: I4c7114444a325ad4e62d0fcbfd347d2bbfb21541
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
2022-10-11 23:17:18 +02:00
Doris Verria abbd9c91f5 QIOSTheme: Set appearance based on UIScreen if no windows created yet
Set the theme's appearance based on the UIScreen's, which follows the
app's or system's configuration, if no UIWindows are created yet.

The UIWindow and UIScreen will have the same appearance (the
traitCollection change is propagated hierarchically from screen to
window) unless UIWindow's overrideUserStyleInterface is explicitly
set to differ from that of the screen. In that case,
traitCollectionDidChange will be called for the window (but not the
screen) and when we update the palette calling the UIColor API, the
colors will be resolved based on
UITraitCollection.currentTraitCollection property, which follows the
window's appearance. That is why we need to set the theme's appearance
based on the window's.

Change-Id: I43207f351559fb82efc2f281eafb3cd1c96bbf75
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-10-10 15:48:16 +02:00
Mårten Nordheim 9e7f91781d WindowsKeyMapper: Fix unsigned/signed mismatch error
error C2220: the following warning is treated as an error
warning C4018: '>': signed/unsigned mismatch

Pick-to: 6.2 6.4
Change-Id: I4ba59f3aa6bbd7b37fe469e6271df207a7d11c99
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-10-10 13:06:37 +02:00
Yuhang Zhao 67c835d201 QWindowsKeyMapper: simplify the code a bit (2/2)
The default menu item will appear in bold font, and calling
SetMenuDefaultItem() can do the job for us. Use it instead of
calling SetMenuItemInfo() to save some typings.

Change-Id: Ifa834adc45f3aafd67077c089fb4e7b5d3fd3e02
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-10-08 20:35:17 +08:00
Yuhang Zhao 0d7b8a0d9e QWindowsKeyMapper: replace legacy values with new one
Replace the legacy MF_ constants with the new MFS_ constants,
MFS_ENABLED is the same (0x0), and MFS_GRAYED is equal to
(MF_DISABLED | MF_GRAYED)

Change-Id: Ib0bf166d9c7f09d38026c9bf01d8bf05982f88c4
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-10-08 20:35:16 +08:00
Timur Pocheptsov e17372e723 QCocoaWindow::windowStyleMask: make popups non-resizable
Otherwise, context menu can be resized.

Pick-to: 6.4 6.2
Task-number: QTBUG-106925
Change-Id: I409d0113fd92ca89b14f068c391dd9c0ddb79ce7
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-10-07 13:32:32 +02:00
Timur Pocheptsov b22a726f25 InputMethodQueryResult - use int as a key, not Qt::InputMethodQuery
In release mode different qHash overloads picked up for enumerators
in 2 different translation units (and this can be even affected by the
order of includes), thus resulting in one hash with which we insert
a value, and a different hash, when we are trying to extract the value,
which _is_ in QHash; getting us a default value (invalid QVariant in our case).

Pick-to: 6.2 6.4
Fixes: QTBUG-106219
Change-Id: I7cce35555d792f03e50639a8d3d25f6a74de05a6
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-10-06 08:49:16 +00:00
Tor Arne Vestbø 3b22e6a8e0 macOS: Pass on native virtual key (key code) for modifier keys
Regression after f563203f60. Unlike the
characters and charactersIgnoringModifiers properties, the keyCode
property of an NSEventTypeFlagsChanged event can be read without
causing an NSInternalInconsistencyException.

Fixes: QTBUG-69608
Pick-to: 6.2 6.4
Change-Id: Id3679a468fbc609112bd8fb37aa7acc526492d19
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-10-05 09:07:03 +02:00
Mikolaj Boc 9bf689e875 Remove dead code & cull public API in WASM compositor
- Remove the manual destroy methods - destructor should handle
destruction
- Remove the unused enum QWasmStateFlag
- Make public API private where possible
- Adjust handleTouch->processTouch to keep consistency with other
process methods
- Remove dead fields in compositor
- Don't keep a dead screen entry in m_screens in qwasmintegration

Change-Id: I98caf4dbdda5ebd25c4a9c22a40140c7ed1d7aa7
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-10-05 00:36:41 +02:00
Marc Mutz df9d882d41 Port from container.count()/length() to size()
This is semantic patch using ClangTidyTransformator:

  auto QtContainerClass = expr(hasType(namedDecl(hasAnyName(<classes>)))).bind(o)
  makeRule(cxxMemberCallExpr(on(QtContainerClass),
                             callee(cxxMethodDecl(hasAnyName({"count", "length"),
                                                  parameterCountIs(0))))),
           changeTo(cat(access(o, cat("size"), "()"))),
           cat("use 'size()' instead of 'count()/length()'"))

a.k.a qt-port-to-std-compatible-api with config Scope: 'Container'.

<classes> are:

    // sequential:
    "QByteArray",
    "QList",
    "QQueue",
    "QStack",
    "QString",
    "QVarLengthArray",
    "QVector",
    // associative:
    "QHash",
    "QMultiHash",
    "QMap",
    "QMultiMap",
    "QSet",
    // Qt has no QMultiSet

Change-Id: Ibe8837be96e8d30d1846881ecd65180c1bc459af
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-10-04 07:40:08 +02:00
Johannes Kauffmann d3f748c340 plugins: use nullptr instead of 0 and NULL
Change-Id: I7f3e56db1d0db178d8a7d9eb91c09e03cae89f6b
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-10-02 12:35:08 +02:00
Christian Ehrlicher 44ac742f73 QODBC: fix handling NULL values for strings
Qt6 added a slight behavior change in QVariant - an empty QString in a
QVariant no longer results in QVariant::isNull(). This created an issue
that qGetStringData() could no longer return a NULL value. On the other
side, NULL values in Qt5 could not be distinguished to an empty string
which we now can.

Fixes: QTBUG-106607
Pick-to: 6.2
Change-Id: Iddc6f7e8b97f5abc136bbbfd02d175b80152ac90
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-10-01 03:15:24 +02:00
Yuhang Zhao 9f87939d2e QWindowsKeyMapper: simplify the code a bit (1/2)
Use HiliteMenuItem() can do the same thing but code less.

Change-Id: I53510668a9bed25bdb7db8a0225a165322b8959c
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-09-30 10:28:00 +08:00
Tor Arne Vestbø ff4e624cd6 macOS: Reflect platform settings for double click and key repeat intervals
The KeyboardAutoRepeatRate is unfortunately exposed in QStyleHints as
an int, so any rate below 1 event per second will not be reflected
accurately.

Pick-to: 6.2 6.4
Change-Id: I506762545a1838cf007320e73827def006f5f0c2
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-09-29 15:17:04 +00:00
Doris Verria 26b3a466d7 QIOSTheme: Get the appearance mode from the UIWindow's traitCollection
We were getting the appearance (light/dark) through the traitCollection
of the UIWindow's rootViewController. It looks like this does not
report the correct value when the appearance changes through
System Settings.
If we get it directly from the UIWindow's traitCollection property,
it works as it should. Also, in traitCollectionDidChange: we are
checking for changes in the traitCollection of the UIWindow's, not
of the viewController's.

Change-Id: I437e6922b268fd0069d80557a1034391ed52644b
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-09-29 17:09:08 +02:00
Martin Storsjö 11be4c5ce8 Fix building with disabled OpenGL after switching to the syncqt tool
After switching qtbase to use the syncqt tool (in
b89d63515b), these OpenGL specific
headers aren't available at all, when the build is configured
to not use OpenGL.

In one case, add a missing check for QT_NO_OPENGL, and in another
case, include the necessary <QtGui/qtgui-config.h> header to
make the potential QT_NO_OPENGL define available, to make a
preexisting ifdef actually do what it was meant to do.

Change-Id: Ie12deff2eee8e3b59193175551fbb28b7480f1f8
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
2022-09-29 17:18:55 +03:00
Christian Ehrlicher 91374bb632 QODBC: correctly fill cache when index() is called
QODBCResult::isNull() incorrectly checked for the validity of the
internal row cache which lead to wrong results when the requested
column was not yet cached.

Pick-to: 6.4 6.2 5.15
Change-Id: Ic7dcc2117e6f05b63c83f21c6a84ba7e0bda2b2d
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-09-28 18:40:38 +00:00
Mikolaj Boc 93f15f81c6 Add missing GL includes in WASM compositor
IDEs (vscode) have problems with missing includes.

Change-Id: I2618aaaf79c81a2c3566682e13caf31133ece631
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-09-27 20:59:21 +02:00
Alexey Edelev b89d63515b Replace the syncqt.pl script with syncqt tool
syncqt.pl adds an extra dependency on perl when building Qt. Modern C++
provides the convenient cross-platform way to access a filesystem and
to use regular expressions, so we may replace the perl script with C++
application. The syncqt executable is built at configure time and
installed as QtCore tool. It's running at configure time to deliver the
required header files for IDE to build a consistent code model and at
the build time to keep tracking changes in header files and generate
the missing aliases without reconfiguring. 'syncqt' only parses header
files from a CMake build tree, so the resulting Qt installation only
contains interfacing headers that belong to the platform that Qt is
built for. 'sync.profile' files are not used as the 'source of truth'
for sync qt procedure anymore, all the necessary information is taken
from either CMake files at configure time or from the module header
files while parsing them.

syncqt.pl is still in place since it's required as fallback solution
for a smooth transition to the new syncqt implementation for all qt
repositories.

This patchset only enables the C++ based syncqt for 'qtbase'
repository.

From the performance perspective C++ version works faster then perl
script, also the configure time is reduced significally on subsequent
reconfigurations - up x2 times faster when re-configuring repository,
but it also takes time to compile the tool itself the first time.
Numbers for qtbase:
           syncqt.pl  syncqt.cpp
 initial:  0m16,035s  0m20,413s
 reconfig: 0m6,819s   0m3,725s

The syncing procedure can be run separately for each module using
<ModuleName>_sync_headers targets. The 'sync_headers' target can be
used to sync all the modules at once.

Task-number: QTBUG-87480
Task-number: QTBUG-103196
Change-Id: I8c938bcaf88a8713b39bbfd66d9e7ef12b2c3523
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2022-09-27 13:12:11 +02:00
Richard Moe Gustavsen f7e4987966 iOS: send control keys to Qt, even if IM is enabled
Perhaps dating as far back as 829e421ddc (Qt 5.8), using
the arrow keys on a bluetooth keyboard to navigate the cursor
around in a TextArea/QTextEdit has been broken. Some work
was done to remedy this with 15576c9610 (Qt 6.1) it seems, but
still, using the arrow keys is broken in 5.15, 6.2 and dev.

This patch will ensure that we send control key events, such as
Qt::Key_Up and Qt::Key_Down, to Qt, also when the focus object
accepts Input Methods.

Fixes: QTBUG-101339
Pick-to: 6.4 6.2 5.15
Change-Id: I2d12438a822a607646080ab2edb17de8ea6d337c
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-09-24 13:42:40 +02:00
Richard Moe Gustavsen 9516823fce iOS, input panel: be more careful before enabling QIOSKeyboardListener
The current implementation would assume that if we get a
UIKeyboardWillShowNotification, the keyboard is about to
show, and we should therefore enable the gesture.

This is problematic on an iPad with a hardware keyboard
connected, because we do actually get get a
UIKeyboardWillShowNotification on startup, even when the
standard input panel is not showing. From speculation, this
is probably because there is a little floating menu at the
bottom of the screen that lets you start dictation mode.
And in UIKit, this is probably implemented as a UIKeyboard.

This new input panel has a zero size, according to the
UIKeyboardFrameEndUserInfoKey key in the notification.
This means that we can still trust our own implementation
of QIOSInputContext::isInputPanelVisible() to be false
when a hardware keyboard is connected.

This patch will therefore only enable the gesture if we
understand the input panel to be visible, rather than
automatically assume that it is based on the
UIKeyboardWillShowNotification alone.

This will also stop the assert inside touchesBegan
from triggering.

Fixes: QTBUG-106387
Pick-to: 6.4 6.2 5.15
Change-Id: Ia3d27864325b6efb49f03fb20b711979f2d07fbf
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-09-23 16:32:46 +02:00
Yuhang Zhao 20ae1cd486 Windows QPA: remove two unused forward declared structs
They are not used, so just remove them.

Pick-to: 6.4
Change-Id: I9b92ef97df85a1ab975bf6b6d460b5427135c301
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-09-23 10:40:46 +08:00
Yuhang Zhao 0a02022805 QWindowsKeyMapper: make one variable const
It won't change, so make it const.

Change-Id: I7ac828baca5340125be2d095ddfa69900543f002
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-09-23 10:40:36 +08:00
Laszlo Agocs 8207751661 eglfs: Add env.var. to disable the dedicated drmHandleEvent thread
Setting QT_QPA_EGLFS_KMS_NO_EVENT_READER_THREAD=1 makes it operate
like it did before 5.12.7: just calling drmhandleEvent (guarded by
a mutex) on the current (main or render, depending on the QQ render
loop) thread.

This should not be needed and is discouraged (will certainly cause
deadlocks in multiscreen setups + QQ threaded render loop on certain
embedded systems), but it seems necessary to provide a way to revert
back to the old way of functioning as there are reports about
problems with screen cloning when the dedicated event reading thread
is used.

Task-number: QTBUG-91882
Pick-to: 6.4 6.3 6.2 5.15
Change-Id: I4cddcd09149dcab9e135467b6ef0e047a2a0ecff
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2022-09-22 17:31:31 +02:00
Axel Spoerl 4973155512 Replace QPlatformTheme::Appearance by Qt:Appearance
With the introduction of Qt:Appearance, its predecessor in
QPlatformTheme has become redundant.

This patch replaces all occurrences of QPlatformTheme::Appearance with
the new enum class.

Task-number: QTBUG-106381
Change-Id: I5406f1b7c19f68571f074617c681318c96a6517e
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-09-20 22:25:59 +02:00
Tor Arne Vestbø 55a7385296 macOS: Report compound window state when state changes
Otherwise we lose the fact that the window is both maximized and
minimized, if the minimize transition is asynchronous, as it is
on macOS 13.

Task-number: QTBUG-104210
Pick-to: 6.4
Change-Id: I76199e98927e6e4a0f379d78db0603faa80aa4b0
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-09-20 16:34:57 +02:00
Tor Arne Vestbø dc1f931a91 macOS: Handle asynchronous deminiaturizing of windows
As of macOS 13 this operation is now asynchronous.

Pick-to: 6.4 6.2 5.15
Change-Id: I9431e24803c53a3fa455707b20a6814290718766
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-09-20 16:34:57 +02:00
Mikolaj Boc de56047620 Redirect resize from QSizeGrip to system resize in wasm compositor
Using two different resizing techniques (one in QSizeGrip, one in
QWasmCompositor) leads to strange behavior while resizing wasm windows.
Redirect the QSizeGrip's resize to wasm's compositor resize (which might
be considered system resize) to avoid that.

Change-Id: Idfc062643caac3ceee879bfb875d943aade28378
Reviewed-by: David Skoland <david.skoland@qt.io>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-09-20 16:34:57 +02:00
Aleksandr Reviakin aee64bbe13 wasm: capture pointer unconditionally on PointerDown event
The pointer events weren't captured previously
if, for example, mouse was pressed inside the window
and released outside of the window.

Pick-to: 6.4
Fixes: QTBUG-71948
Change-Id: Ie50e5c132fa03046f0c5b321c35a58cb9f34b67a
Reviewed-by: Mikołaj Boc <Mikolaj.Boc@qt.io>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-09-19 12:14:14 +02:00
Aleksandr Reviakin 81d9b5ada4 wasm: add DejaVu Sans as a fallback font
Add fallback font which supports emoji.
Similar logic of addding additional fallback fonts is used
for some other platforms.

Pick-to: 6.4
Fixes: QTBUG-87339
Change-Id: Iad9e7071bcc3c5bb1c11c6c745fd86f7d0f7860b
Reviewed-by: Mikołaj Boc <Mikolaj.Boc@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2022-09-19 12:14:14 +02:00
Yuhang Zhao dfabeead97 QWindowsKeyMapper: whitespace fixes
Code style fix, add some necessary whitespaces.

Change-Id: Ib6c5bf503faacec5dad804154ae992b2b0a49162
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-09-19 18:14:13 +08:00
Mikolaj Boc 38049164c3 Make the clipboard paste from the outside work correctly
During the previous refactoring, two exceptions that triggered
native copy/paste events were omitted.

Fixes: QTBUG-106668
Pick-to: 6.4.0 6.4
Change-Id: Ie61dd6a0c1d9d2fdd47bd94be055d0221feae25b
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
2022-09-18 21:44:35 +02:00
Tor Arne Vestbø 705665957b macOS: Remove hard-coded logic for determining if key event has text
The normal flow for a keyDown event when sent to a text input enabled
view (NSTextInputClient), is that it's sent through interpretKeyEvents,
which in turn goes through the input methods, and result in either
composing (marking) text, inserting text, or executing a text editing
command such as moving the cursor to the beginning of the line.

  https://apple.co/3qDhwNb

In our case, we prefer to treat "simple" text insertion (non-composed
text) outside of the Qt input method protocol, and send these as normal
key events instead. The same applies when a key event results in a text
editing command that we don't handle.

The problem is that in the latter case, the key event would contain the
text that resulted from e.g. ⌘+K, or one of the function or arrow keys,
which in many cases would not be suitable for inserting into a text
field by a naive client that trusted the text property of the QKeyEvent.

To work around this two exceptions were added; first in 4dbce2a469
to ignore text when inside the U+F700-U+F8FF unicode range (arrow keys,
function keys, etc), and second in 933fab137d to ignore text for
events that had one or both of the control or command modifiers.

Unfortunately this hard-coded logic was not taking into account that
some keyboard layouts may produce text that match these exceptions,
for example ^⌥+ю with a Russian keyboard layout should result in
inserting a period.

Instead of continuing to add hard-coded exceptions to this logic,
(for example by only filtering out single-modifier events), we
instead use the information that the text input system gives us
via doCommandBySelector to decide whether the key event should
have text or not.

Note: We have similar workarounds for detecting text that is not
suitable for text insertion in other places of Qt, for example in
QInputControl::isAcceptableInput(), but since we can't assume the
client uses QInputControl for their text input needs we need to
filter out the text earlier than that.

Fixes: QTBUG-106393
Task-number: QTBUG-36281
Task-number: QTBUG-35734
Pick-to: 6.4
Change-Id: I7769098cba1c605f6fdb6b23964eb614578724bb
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-09-17 21:37:20 +02:00
Samuel Mira 072387edec Android: Fix flickering on window resize and show keyboard
Changed to use display getMetrics which will return the size of the
application window, and use getRealMetrics to obtain the size of the
largest region accessible to the app.
I updated the fullscreen mode to use the new sizes.

Task-number: QTBUG-41170
Task-number: QTBUG-66727
Pick-to: 6.4 6.3 6.2 5.15
Change-Id: Ic25555ed2e1b910b3fdbc0f3a31e3a19763a04eb
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Rami Potinkara <rami.potinkara@qt.io>
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
2022-09-17 08:42:48 +00:00
Tor Arne Vestbø f2a2800b37 QWSI: Remove dead code for macOS-specific shortcut-override handling
The macOS platform plugin exclusively uses handleExtendedKeyEvent() these
days, never the simpler handleKeyEvent(), and always passes false for the
tryShortcutOverride argument, so the special-cased code was never executed.

No other platform passes the optional tryShortcutOverride argument, so
it can be removed completely.

If we ever need to bring back this kind of logic it should live in the
macOS platform plugin, not in the QWSI layer.

We have to keep the existing logic for qt_handleKeyEvent() though,
as that's exercised through QTest::simulateEvent(). The next step
would be to remove the QWindowSystemInterface::handleShortcutEvent()
call in QGuiApplicationPrivate::processKeyEvent() and teach existing
platform plugins, as well as the QTest machinery, to handle shortcuts
explicitly before sending raw key events.

Change-Id: I6eb3fd18c64d1619e33e79f076e25efd299a9ba7
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-09-15 15:27:09 +02:00
Doris Verria 6430d1db63 QCocoaColor(/Font)Dialog: Call makeKeyAndOrderFront asynchronously
We are calling makeKeyAndOrderFront on the NSColorPanel once when
show()-ing it and then we call runModalForWindow when calling exec(),
which also internally makes the panel key window.
The call to makeKeyAndOrderFront changes the window to key window
immediately so by the time the next event loop is run, the window is
already key. This causes problem when running the modal loop in
runModalForWindow as now the [NSApp _previousKeyWindow] already points
to the color dialog (NSColorPanel), so the application looses the
reference to any other window that was key before the color dialog,
thus, choosing the wrong window as key when the color dialog is closed.

So ideally we would avoid the first call to makeKeyAndOrderFront, but
since we don't know if exec() will be called on the dialog, or just
show() (which would need the call to makeKeyAndOrderFront in order
to set the dialog visible), we need to make the call to
makeKeyAndOrderFront in an asynchronous way, so by the time the
next event loop is run (the modal session loop in the case of
exec()), the app still has the correct reference to _previousKeyWindow
and can choose the right window after the color dialog is closed.

Fixes: QTBUG-42661
Pick-to: 6.2 6.4
Change-Id: I1b5c429c90847c48d7aa1d61b2462122c5b587f8
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-09-14 19:01:11 +00:00
Timur Pocheptsov 20d7d41a74 QMacPasteboard: check QGuiApplication is alive for a promise containing QPixmap
Otherwise, when platform integration is deleted, it triggers resolving
promises after the global instance of QGuiApplication is dead and
QPixmap in turn calls qFatal, crashing the exiting app.

Fixes: QTBUG-106472
Change-Id: Ie706d030214c33abdbc8fff86cc2eddd0c632f1b
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-09-14 08:44:22 +02:00
Lorn Potter 88fbbb422e wasm: fix native keyboard popup on iOS
misspelling of element property causing issue

Fixes: QTBUG-106397
Pick-to: 6.4 6.4.0
Change-Id: I8e8f6114bba6374381df4a1d9831ff36e3964658
Reviewed-by: David Skoland <david.skoland@qt.io>
2022-09-14 04:50:30 +00:00
Tor Arne Vestbø 27c91dbd36 macOS: Return false from set(Keyboard/Mouse)GrabEnabled
[ChangeLog][macOS] QWindow::setKeyboardGrabEnabled() and
QWindow::setMouseGrabEnabled() now returns false, as the feature is
not implemented on macOS yet. If you were relying on these functions
to make the window key (activate it), please use
QWindow::requestActivate() instead.

Task-number: QTBUG-106597
Change-Id: I86d7d806080aae98c9aec5287adfcc8cb70d372a
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-09-13 19:26:11 +00:00
Tor Arne Vestbø 11c089c67b Squash deprecation warnings about SecureTransport being deprecated
One or two of them is enough.

Task-number: QTBUG-85231
Change-Id: I8da2cd0b222eacd534255b6b5548fef9aad408d6
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2022-09-13 21:25:30 +02:00
Mikolaj Boc 9ec7cbc774 Make popup menus non-resizable on WASM
Windows that are of popup type only should not be resizable. Those that
are dialogs as well, should, provided their minimum size does not match
their non-empty maximum size.

Fixes: QTBUG-106560
Pick-to: 6.4.0 6.4
Change-Id: I76851e19949110323f949a1d17260fbd4fc35159
Reviewed-by: David Skoland <david.skoland@qt.io>
2022-09-13 18:13:00 +02:00
Mikolaj Boc 91d7dcea11 Fix QWasmWindowStack::topWindow when the stack is empty
The method should by contract return nullptr when the stack is empty,
but it crashes in this case.

Also, unit-test the case.

Pick-to: 6.4
Change-Id: If64b71e761efd9a5cd5af407cd68cba7f8dbc8e2
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-09-12 20:09:03 +02:00
Ilya Fedin 7927b05b2f FileChooser portal: set current_file only when file already exists
According to xdg-desktop-portal documentation, current_file should be set
only when such a file already exists and xdg-desktop-portal-gnome enforces
this by being totally broken when current_file is set to a non-existent path

Pick-to: 6.4 6.3 6.2
Change-Id: Ie3c80a7c6fd0cf23eea88ddec2149f5904c63394
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2022-09-10 12:37:07 +04:00
Tor Arne Vestbø a4abb0c4b7 xcb: Remove unneeded call to QHighDpiScaling::updateHighDpiScaling
QWindowSystemInterface::handleScreenAdded() already calls the function
as part of adding a new screen, and it the right place for the logic
to exist in any case.

Change-Id: If7f9d62e2de9d4ddb9a985d642ea7a5bc7388db5
Reviewed-by: Liang Qi <liang.qi@qt.io>
2022-09-09 21:23:31 +00:00
Tor Arne Vestbø ad751a0390 QOffscreenIntegration: Don't keep around removed screens
The implementation of QOffscreenScreen::virtualSiblings() uses the list
of screens maintained in QOffscreenIntegration as input, so we need to
remove screens from this list as we remove them, to avoid treating
removed screens as siblings of still remaining screens.

While we're at it, remove the screens in reverse order, so that the
primary screen is the one removed last. This avoids having to update
the primary screen and move windows for each screen removed during
shutdown.

Change-Id: I9ab09dd75dbe20f63b9154533613bc59da531fd1
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-09-09 23:23:22 +02:00
Mikolaj Boc adebdd0f9a Propagate the copy event correctly to Qt widgets on WASM
The event should be propagated when the native clipboard is available.
A recent regression caused it to be suppressed, which resulted in lack
of copy/paste capabilities.

Pick-to: 6.4 6.4.0
Change-Id: I030a31aa0951c3813ce1d38da9a6526010b3bfc8
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-09-09 19:06:40 +02:00
Mikolaj Boc ad200d4bc3 Don't browser-sniff to detect the permissions API
Instead, unconditionally attempt to query for the required permissions
and catch the exception if those are missing.
Also, removed some unused variables taking part in the browser-sniff
calculation.

Fixes: QTBUG-105129
Change-Id: I7b96d0ba78109ad59dffb23ec9e618836bf826fc
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
2022-09-09 10:12:19 +02:00
Mikolaj Boc 522a93e303 Lock the window's caption area vertically inside its screen
The current code that locks the window does not take into account
screens that don't start at non-zero y coordinate, nor does it cap the
bottom of the window.

Task-number: QTBUG-106031
Pick-to: 6.4
Change-Id: Ic22c016d32dca9d288a2a56c51ccde78144b436e
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-09-08 21:12:52 +02:00
Mikolaj Boc 809ff675c9 Take into account that pointer event's location is already global
Therefore, no translation to screen coords is needed.

Task-number: QTBUG-106031
Pick-to: 6.4
Change-Id: I0dbbc5e4df79d85f9c6ef47f09ea54f19b67d2d7
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-09-08 21:12:52 +02:00
Mikolaj Boc 06f5c9ca60 Leave exposition to invalidate() in QWasmWindow::raise&lower
The window may be in a temporary state where the window()->handle() is
not yet set up. This makes an expose event with isExposed == false being
issued, which makes the window not refresh, especially when a async expose
request follows shortly after.
invalidate() handles this case itself as it issues a request to the
compositor which exposes the window at the right moment.

Fixes: QTBUG-106159
Change-Id: Ibc84490c379774120ab65978472e35be25240164
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2022-09-08 21:12:52 +02:00
Liang Qi 2585fa7c09 xcb: fix the build of native painting
Fixes: QTBUG-106374
Pick-to: 6.4 6.3 6.2 5.15
Change-Id: I91871078a0e09cdda8db4afd236a9746c72007f7
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: JiDe Zhang <zhangjide@uniontech.com>
2022-09-08 14:15:24 +02:00
Tor Arne Vestbø a0b34a86b6 Move QPlatformScreen::deviceIndependentGeometry() logic to QScreen
Having the logic in QPlatformScreen was inconsistent with how the
high-DPI scaling logic sits on top of the platform layer, and also
made the implementation of QScreenPrivate::updateHighDpi() a bit
inconsistent in how the geometry vs available geometry was resolved.

Change-Id: I683ab34dfc8579e2c887cb8fe3059c9c9fdb71a7
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2022-09-08 12:49:30 +02:00
Ievgenii Meshcheriakov 8bada697d6 QTlsBackendOpenSSL: Early return from ensureCiphersAndCertsLoaded()
Add an atomic state variable to perform early return without taking
a recursive lock after ensureCiphersAndCertsLoaded() is complete.

Make related mutex and state variable function-local static because
they are not used anywhere else.

Taks-number: QTBUG-103559
Change-Id: I1e4c9c4f73204885bce82ba7f2b5e64548c3aac3
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2022-09-07 12:39:25 +00:00
Sona Kurazyan a6266810ae Fix compilation with clang
Amends 711105058a and fixes the following
errors:

.../qeglfsx11integration.cpp:28:36: note: non-constexpr constructor
'QBasicAtomicInteger' cannot be used in a constant expression
Q_CONSTINIT static QBasicAtomicInt running;
                                   ^
.../qbasicatomic.h:171:5: note: declared here
    QBasicAtomicInteger() = default;

And:

.../qoffscreenwindow.cpp:171:50: error: 'constinit' specifier missing on
initializing declaration of 'm_windowForWinIdHash' [-Werror,-Wmissing-constinit]
QHash<WId, QOffscreenWindow *> QOffscreenWindow::m_windowForWinIdHash;
                                                 ^
Q_CONSTINIT
.../qoffscreenwindow.h:44:5: note: variable declared constinit here
Q_CONSTINIT static QHash<WId, QOffscreenWindow *> m_windowForWinIdHash;

Change-Id: I991674826737db897e087e9e06b56b338ca61a4f
Reviewed-by: Ievgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>
2022-09-06 13:24:01 +02:00
Liang Qi 214953fad6 xcb: fix QXcbCursor build with -DFEATURE_xcb_xlib=OFF -DFEATURE_xlib=OFF
Change-Id: I2a3dbbfe6f7fd8824a64b52ff56d85479e4b428d
Reviewed-by: JiDe Zhang <zhangjide@uniontech.com>
Reviewed-by: Ilya Fedin <fedin-ilja2010@ya.ru>
Reviewed-by: Liang Qi <liang.qi@qt.io>
2022-09-06 11:21:43 +02:00
Liang Qi 012132c60d xcb: use libxcb-cursor to replace Xlib/libXcursor
[ChangeLog][Linux/XCB] Used libxcb-cursor to replace Xlib/libXcursor

Fixes: QTBUG-67373
Change-Id: I04a30e401467e48b431a5cc63984f7b70a09faf0
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Liang Qi <liang.qi@qt.io>
2022-09-06 11:21:43 +02:00