Commit Graph

9213 Commits (132d6d012701ce00a4ff82eae5b14e560632e893)

Author SHA1 Message Date
Tor Arne Vestbø ae8e96d4c2 macOS: Don't rely on invalidateCursorRectsForView when mouse is over view
Calling invalidateCursorRectsForView will normally result in a updateCursor
callback, where we then set the current cursor using [NSCursor set]. But
if an override cursor is set by AppKit, which happens for example when
hovering over a resizable window's theme frame, then AppKit ignores the
call to invalidateCursorRectsForView. And it will not consult the view
when the override cursor is unset again, which results in the cursor
being reset back to the default arrow cursor instead of the cursor
that was set when we initiated the invalidateCursorRectsForView call.

We need to hit-test to confirm that the mouse is over the view,
as there might be child views in the mix that also have custom
cursors, and we don't want to activate the parent view's cursor
unless we're actually over that view.

Fixes: QTBUG-81552
Fixes: QTBUG-96003
Pick-to: 6.2 5.15
Change-Id: I52573ab7be82f28c6a1cf686bd4b133551cfe98b
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2021-09-03 22:38:07 +02:00
Shawn Rutledge 4d8fb1bc6f cocoa: use TouchPad deviceType for trackpad
WheelHandler { acceptedDevices: PointerDevice.TouchPad }
doesn't react unless we use the right type.

Amends 69c833dae9

Pick-to: 6.2
Change-Id: I813de096b87f3af4dfcf5510abc0d0bd9c15b689
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2021-09-03 19:53:32 +02:00
Liang Qi 9a4c98e556 xcb: support xrandr(1.5) monitor setup
More information about monitor in xrandr 1.5, see
https://keithp.com/blogs/MST-monitors/

Since this change, screen is logical instead of physical.

If xrandr 1.5 and later is installed, Qt screen info will get
from xrandr monitor object instead of xrandr output if only have
1.2 to 1.4.

Users can manipulate monitor as they want, for example, a
combination for two physical screens, half of one screen and etc.

Didn't have chance to access MST monitors, but it should work
if xrandr monitor object was created automatically.

[ChangeLog][xcb] Qt screen info will get from xrandr monitor
object if 1.5 is installed.

Fixes: QTBUG-65457
Change-Id: Iad339cc0d4293b2403b4ef6bf6eb770feb3e685f
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
2021-09-01 20:32:04 +02:00
Morten Sørvig 81a7344e1d Port to QImage and QPixmap deviceIndependentSize()
Replace the “size() / devicePixelRatio()” pattern with
a call to deviceIndependentSize().

Change-Id: I9d9359e80b9e6643e7395028cd43e3261d449ae7
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2021-09-01 15:24:05 +02:00
Mårten Nordheim 522ca997d3 TLS plugins: Prefix with 'q'
For consistency with other plugins.

Pick-to: 6.2
Change-Id: I45507389a42e645c94f1ca3f32262a2181f282f7
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
2021-08-30 12:35:41 +00:00
Tor Arne Vestbø 52f635b9a0 macOS: Hide mouse cursor when initiating IM enabled text input
Fixes: QTBUG-72744
Pick-to: 6.2
Change-Id: I952710e88a11fd00498562c9011461a010f02f7b
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-27 22:41:09 +02:00
Tor Arne Vestbø 3de396590c macOS: Correctly implement attributedSubstringForProposedRange
The substring range refers to the entire text of the focus object,
not just the selection.

As there is no way to pull out the entire text via input method queries
we do the best we can via ImTextBeforeCursor and ImTextAfterCursor.

Returning the correct substring enables input method features such
as backtracking into already committed text with the Hiragana IM,
as well as the Keyboard Viewer's 'Current Text' toolbar.

Pick-to: 6.2
Change-Id: I53286ef1e8e7c5fba37858dda7317ae74d95b528
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-27 22:41:06 +02:00
Tor Arne Vestbø 9e1875483c macOS: Assume input method handles key event
When input methods are enabled for the focus object we send key events
through interpretKeyEvents, which will involve the input method in the
key event processing. The input method will get back to us with callbacks
such as insertText, setMarkedText, or doCommandBySelector.

In the case of insertText, when the inserted text matches the originating
key event's text, we opt to not send the text as an QInputMethodEvent,
and instead fall back to sending it as a normal QKeyEvent. The reason
for this is that Qt's IM protocol was designed to handle composited
text, so sending non-composited (but IM-initiated) text input as IM
events is unexpected (see 2d05d3bd28).

However, we cannot assume that the input method will always call us
back with one of the above mentioned methods. The input method can
very well eat the event as part of its own operation. This happens
for example when pressing and holding 'a' in a US English keyboard
layout, which will pop up an input panel for the various accents
available. Or it may happen when using the AquaSKK third party IM,
which uses the 'l' key to switch the input mode to latin without
producing any characters.

To allow these input methods the freedom to control the processing
of key events we need to reverse the logic for when we send key
events as QKeyEvent. We now assume that the IM will handle the
event, and only trigger QKeyEvent in two cases where we explicitly
were called back by the IM, but decided that a QKeyEvent is needed:

 - If the IM calls insertText and we consider the text simple text
 - If the IM calls doCommandBySelector and we can't find a matching
   selector for the command. We only implement insertNewline and
   cancel, so in all other cases we want to pass on the key event
   to let the focus object handle it, for example for 'Select All'
   and similar key combinations.

Fixes: QTBUG-46300
Fixes: QTBUG-71394
Pick-to: 6.2
Inspired-by: Vladimir Belyavsky
Change-Id: I9a73a8e1baa2ebe0c5df1166a9ec3d9843632bb1
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-27 22:41:03 +02:00
Tor Arne Vestbø a56b915f71 macOS: Handle replacement range during marking of text
The input method may include already committed text when marking text,
in which case the replacement range reflects the position and length
of the existing text.

We handle this the same way we do replacement ranges in insertText.

Pick-to: 6.2
Change-Id: I148e4701318a59c7e0d9441d157199d7c8606f43
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-27 19:49:55 +02:00
Tor Arne Vestbø f97e936049 macOS: Handle IM insertNewline by sending synthetic Qt::Key_Return
Depending on the input method, pressing enter may result in simply
dismissing the input method editor, without confirming the composition.
For example with Hiragana, pressing 'a', then 'Tab', and then 'Enter'.

In other cases it may confirm the composition as well, for example
with Hiragana, pressing 'a' and then 'Enter'.

And in some cases the IME will produce an explicit new line, for
example with US English, pressing '~' and then 'Enter', or with
2-Set Korean, pressing 'a', then 'j', and then 'Enter'.

Semantically, the input method has then asked us to insert a newline,
and we should probably do so via an QInputMethodEvent, either directly
or via [self insertText:@"\r"]. This is also how NSTextView handles
the command. But, if we did, we would bypass all the code in Qt (and
clients) that assume that pressing the return key results in a key
event, for example the QLineEdit::returnPressed logic.

To ensure that clients will still see the Qt::Key_Return key event,
we send it as a normal key event. But, we can not fall back to
handleKeyEvent for this, as the original key event may have text
that reflects the combination of the inserted text and the newline,
e.g. "~\r". We have already inserted the composition, so we need to
follow up with a single newline event.

Task-number: QTBUG-39125
Pick-to: 6.2
Change-Id: If1e95687e6d5b06011692175a325f457b0b8a72f
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-27 19:49:55 +02:00
Tor Arne Vestbø f563203f60 macOS: Factor out key event handling into helper struct
This allows us to share code between handleKeyEvent: and flagsChanged:
for parsing the incoming NSEvent, and allows for sending key events
from other call sites in the future without duplicating the parsing
and sending logic.

Pick-to: 6.2
Change-Id: Ic63f740523496a9432e439663a20f78b5bc234c5
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-27 19:49:55 +02:00
Tor Arne Vestbø 2945c6223b macOS: Return early from key handler if shortcut was handled
The code paths after accepting a shortcut event can never be hit.

Pick-to: 6.2
Change-Id: Ida77417adb8fcfd25a4b20c4eb86056b3769f014
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-27 19:49:55 +02:00
Morten Johan Sørvig c6362cd55c wasm: add Emscripten module accessor to qtloader.js
After enabling -s MODULARIZE=1 there is no longer a
global MODULE object. Add module() accessor which can
be used to retrieve the Emscripten module.

This does not really fit with the current state tracking
since the app transitions from “loading” to “running” before
the module object is ready. We’ll have to revisit this
at some point.

Change-Id: Ib7191cf4ce436e1de99f84b63ed4c10936fa62b1
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
2021-08-27 15:45:24 +02:00
Tor Arne Vestbø abdd524519 macOS: Check NSEvent.characters to determine dead key state
We map NSEvent.characters to text that we pass on in our QKeyEvent,
but for Qt 4 compatibility we explicitly skip function keys and arrow
keys, as the text these events produce are control characters. See
4dbce2a469.

However, these keys are not dead keys, so we can't use the resolved
text we're planning to pass on to Qt to determine if they are.

Pick-to: 6.2
Change-Id: Ib59f0489ae014379c699600f14634c55161ccc8a
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-27 00:29:08 +02:00
Tor Arne Vestbø 294e4c7aa8 macOS: Use current NSEvent to determine if IM text matches key event
Gives us one less state member to worry about in the IM machinery.

Task-number: QTBUG-35700
Pick-to: 6.2
Change-Id: Iaa06b29015f9b9594b8107b74a8931f076a26e12
Reviewed-by: Liang Qi <liang.qi@qt.io>
2021-08-27 00:29:02 +02:00
Tor Arne Vestbø e68bf3ddaf macOS: Modernize and clean up key event handling
- Pass key event type as QEvent::Type
  - Use proper type for NSEventModifierFlags
  - Use modern Objective-C property access in key handler
  - Modernize flagsChanged implementation using ranged-for
  - Use explicit Qt::Key type in key handling
  - Add FIXME comments for dubious code

Pick-to: 6.2
Change-Id: I533e0a5685108dc3cdccd2b276b4eb7a729d172e
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-26 14:53:03 +02:00
Tor Arne Vestbø 146bc0e607 macOS: Move replacement range calculations into helper methods
We're going to need this logic for marked text as well.

Pick-to: 6.2
Change-Id: I461024c3df0c4956c794f16d1cb31fc6b0efe4c5
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-26 14:53:02 +02:00
Tor Arne Vestbø bae9aeacbe macOS: Correctly compute marked and selected text range, and use for insertion
The NSTextInputClient protocol expects marked (composed) and selected
text ranges to be relative to the document, not to the current editing
block as Qt typically expects.

Luckily we can use the absolute cursor position to compute an absolute
offset that we can apply to any other positions, such as the selection.

Now that we are computing the ranges correctly we can also use them
during text insertion, when the incoming replacementRange is not valid.

We then transform and sanitize the replacement range to the format that
Qt expects for QInputMethodEvent::setCommitString().

Pick-to: 6.2
Change-Id: I4cb2f7c63adb92e407f38af05adce539c9bed7e2
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-24 13:39:06 +02:00
Tor Arne Vestbø 86d338383e macOS: Highlight selected part of preedit using platform theme palette
QInputMethodEvent::Selection unfortunately doesn't apply to the
preedit text, and QInputMethodEvent::Cursor which does, doesn't
support setting a selection. Until we've introduced attributes
that allow us to propagate the preedit selection semantically
we resort to styling the selection via the TextFormat attribute,
so that the preedit selection is visible to the user.

This allows us to remove the fallback we had for thick and double
underline styles, where we mapped those to the wiggly underline style.
This was needed to distinguish the selected cluster when composing
CJK, but looked out of place.

One disadvantage of faking the selection via text format is that
we will not update the selection color on theme change, e.g. when
switching from light to dark mode, but this is a minor issue that we
can live with until we've introduced a proper QInputMethodEvent
attribute for the preedit selection.

Pick-to: 6.2
Change-Id: I1c45c310107697962e328a4db908d29d2358f756
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-23 17:30:18 +02:00
Tor Arne Vestbø b963888b1c macOS: Handle more NSUnderlineStyles during text composition
Pick-to: 6.2
Change-Id: I2a6cf612506d19736eab007f687a03f6d6595b62
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-21 01:28:26 +02:00
Tor Arne Vestbø fa6e490374 macOS: Respect default marked text attributes
When the marked text was not an attributed string with built in styling
we used to fall back to a hard-coded underline style.

We now pick up the default marked text style via the markedTextAttributes
property of a temporarily created NSView, which by default is a yellow
background color.

The implementation in NSView respects text system configuration toggles
such as NSMarkedTextAttribute and NSMarkedTextColor, so by setting the
user default NSMarkedTextAttribute to "Underline" the marked text will
look like our old hard-coded default. This can be done in many ways,
including passing `-NSMarkedTextAttribute Underline` on the command
line, or by QSettings::setValue("NSMarkedTextAttribute", "Underline");

Pick-to: 6.2
Change-Id: Iede74836ed1449e77018c13733a675f8e9d84f7d
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-21 01:28:26 +02:00
Tor Arne Vestbø 88550e1210 macOS: Clean up code style in [QNSView setMarkedText:]
Pick-to: 6.2
Change-Id: I8a901ac81b64e6fc9bd7fe9ea4e3eaa6257118ce
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-21 01:28:26 +02:00
Tor Arne Vestbø 6c5f996974 macOS: Ensure we provide a preedit format for non-attributed strings
The logic was not taking into account that we were always adding
an QInputMethodEvent::Cursor attribute, so we would never hit the
fallback code.

Pick-to: 6.2
Change-Id: I25bd725025152241a55e3fea60444c20e27db4f9
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-21 01:28:26 +02:00
Tor Arne Vestbø 993d8025dc macOS: Simplify validAttributesForMarkedText
We don't need to condition this on IM enablement. The attributes are
only used if we are actually marking text, which only happens for IM
enabled views.

Pick-to: 6.2
Change-Id: I47377cf53cf2bf44a1d9513d317f82c73f083fa3
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-21 01:28:26 +02:00
Tor Arne Vestbø 1caa7680a1 macOS: Correct QNSPanelContentsWrapper @end marker placement
The incorrect "scoping" of q_IOObjectRetain and q_IOObjectRelease
luckily did not affect their functionality as QIOType helpers.

Pick-to: 6.2
Change-Id: I9b9c2312464c7e6f8e2d2a5856e35efa99ec0c41
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-20 15:45:39 +02:00
Richard Moe Gustavsen b7150d22c8 QCocoaTheme: add ButtonText color to standard palette
The standard palette had no value set for ButtonText. The
result was the we drew button text in QtQuickControls2
using Text color instead, which would be wrong in dark
mode, and result in a dark color instead of white.

Note: Widgets hardcode the color "white" directly
in the mac style, and was not affected by the
missing value.

Fixes: QTBUG-89177
Pick-to: 6.2 6.1
Change-Id: Ie2d99bfac9fcc70d45e5bd40ea45becf3fd70d87
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2021-08-20 14:33:16 +02:00
Morten Sørvig 7b14329d78 Check for correct "Access Denied" error
SetProcessDpiAwarenessContext() returns ERROR_ACCESS_DENIED if the
DPI awareness has already been set, and not E_ACCESSDENIED like
SetProcessDpiAwareness() does.

Pick-to: 6.2
Change-Id: I6b29214773776f31c0622a35494d98c5c9637b0b
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
2021-08-20 13:50:24 +02:00
Volker Hilsheimer 70b94eea10 macOS: close popups on mousedown within the window frame
On macOS, we close active popups when handling mouse-down events in the
NSView, but not for such events in the window frame. This allows users
to close a window that has a context menu open via the window's close
button, which then leaves open popups behind.

Factor the popup-closing code out into a dedicated method that we can
call from within the NSWindow::sendEvent implementation for mouse down
events.

Fixes: QTBUG-30522
Pick-to: 6.2 6.1 5.15
Change-Id: I9c354efc449cfefff3ed84fa34b1cd8a0da3b4a7
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2021-08-19 23:38:24 +02:00
Tor Arne Vestbø bb7fe09963 macOS: Expand QNSView complex text documentation
Pick-to: 6.2
Change-Id: Iceb146d7aafb869a80cebe50e27c3bc98e67ebe1
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-19 19:10:59 +02:00
Tor Arne Vestbø dcb4b5e7d2 macOS: Tweak method argument names in QNSView complex text implementation
Pick-to: 6.2
Change-Id: I6a7ec683ffe9c18a89326b3e53b4a907cb9a9512
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-19 19:10:59 +02:00
Tor Arne Vestbø 42573d9496 macOS: Restructure QNSView complex text implementation
For better overview of the flow and functionality of the
NSTextInputClient protocol.

Pick-to: 6.2
Change-Id: I8658405c7ff4ae762bfe3e4c11f9a157ae2b9a09
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-19 19:10:58 +02:00
Tor Arne Vestbø b601eb9c2d macOS: Reorder QNSView instance variables
Pick-to: 6.2
Change-Id: Icde9ee6744290f88eaa2ac197c40ba412543b122
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-19 19:10:58 +02:00
Tor Arne Vestbø fde6e1a18c macOS: Update QCocoaInputContext documentation
Pick-to: 6.2
Change-Id: I5ae5fe51ddc1512f2627dbc972fbb95360d7ea24
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-19 19:10:58 +02:00
Tor Arne Vestbø e42eefe044 macOS: Implement QPlatformInputContext::setFocusObject()
Instead of handling the update manually.

Pick-to: 6.2
Change-Id: Iffb28d893146f5d3f6eae8e8c43aaf7fa5281516
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-19 19:10:58 +02:00
Tor Arne Vestbø e5bebd883c macOS: Add some logging to QCocoaInputContext
Pick-to: 6.2
Change-Id: I8e28cdaf89e8b741a5047f00016e17b8916edece
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-19 19:10:58 +02:00
Tor Arne Vestbø c7ec8c0973 macOS: Fix member variable name in QCocoaInputContext
Pick-to: 6.2
Change-Id: I7e61df4e6afbfd7e962499f0cfca5739658244dd
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-19 19:10:58 +02:00
Tor Arne Vestbø f9beb3c4eb macOS: Handle input source change notifications in QCocoaInputContext
Instead of going via QNSView. Also add some logging.

Pick-to: 6.2
Change-Id: Iabed7511572ef22597651efa8047f06227b28533
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-19 19:10:58 +02:00
Tor Arne Vestbø 4ee20e3a2f macOS: Simplify string handling when handling complex text
Pick-to: 6.2
Change-Id: Ib19dab99b836fdd5a5eda5cc54c81f1fea31ce65
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-19 19:10:58 +02:00
Tor Arne Vestbø a5571ec8a0 macOS: Use helper method for querying input method parameters
Pick-to: 6.2
Change-Id: I379d4ca20101899db2dfbd8f0c5a22f423e40d6b
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-19 19:10:58 +02:00
Morten Johan Sørvig 0d0b36a184 wasm: support setting environment again
After enabling -s MODULARIZE=1 there is no longer a
global ENV. Use module.ENV instead.

Change-Id: Ic6958f52c6ceb7014f7f2c78a73f2bce5a43bf41
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2021-08-19 18:41:53 +02:00
Morten Sørvig 16e5bcb4ac wasm: add DialogExec hack back with warning
Previously, this was implemented in QEventLoop. By moving
it to the event dispatcher we can target the warning message
better and provide a suggested workaround for the dialog
case.

The behavior is the same as before: call emscripten_sleep(),
which throws a Javascript exception and returns control
to the browser while leaking the content of the stack.

Pick-to: 6.2
Change-Id: I2979fe4fe5923c27713e85b6725614b60a693e93
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2021-08-19 18:41:52 +02:00
Thiago Macieira 6feb289189 MySQL: pedantism: create and destroy the MYSQL_TIME type
This is a no-op. But take the opportunity to make a drive-by update on
the loop, which improves it.

Change-Id: I4a40ccbd3321467a8429fffd169b08590d28c928
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2021-08-18 15:39:05 -07:00
Thiago Macieira ddea7e6ce9 MySQL: implement binding output (SELECT) results to MYSQL_TIME
We already do it for inputs but weren't doing it for outputs.

Change-Id: I4a40ccbd3321467a8429fffd169afeb5730ad75e
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2021-08-18 15:39:04 -07:00
Alexandru Croitor 175e81ffbd CMake: Fix wasm top-level prefix builds
The wasm support files need to be both copied and installed in a
top-level prefix build, to ensure that leaf repos can find them in the
build dir when they are configured.

Pick-to: 6.2
Fixes: QTBUG-95806
Change-Id: I8c09f04fec51cf850299d535bdf3f26542ec4aac
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
2021-08-18 22:15:35 +02:00
Thiago Macieira 74705ae17b MySQL: don't allocate 1-byte buffers for BLOBs
We set the buffer length to 0 for blobs, as we need to do it for each
row, in bindBlobs() (apparently a workaround for MySQL 4.1.8 API). That
function was deleting the buffer and reallocating.

Change-Id: I4a40ccbd3321467a8429fffd169b06422612ca13
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2021-08-17 17:20:03 -07:00
Thiago Macieira 549ee216fd MySQL: treat the MYSQL_FIELD as read-only
The MariaDB-connector-c version 3.2 and MariaDB server version 10.6
cooperate to avoid re-transferring the query metadata, so the fact that
we were modifying it was causing it to improperly decode the DATETIME
data types into string, as we had asked. We ended up with a 7-byte
string that was actually the date binary-encoded.

References:
 - https://jira.mariadb.org/browse/MDEV-26271
 - https://github.com/MythTV/mythtv/issues/373
 - https://bugs.kde.org/show_bug.cgi?id=440296

Pick-to: 5.12 5.15 6.2
Fixes: QTBUG-95639
Change-Id: I4a40ccbd3321467a8429fffd169afdbb26cf29f6
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2021-08-17 17:20:03 -07:00
Thiago Macieira 65aca9a223 MySQL: remove left-over charset-setting code
Complements commit 472520afb9. We were
doing it twice.

Change-Id: I4a40ccbd3321467a8429fffd169b05fa5e22f204
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2021-08-17 17:20:03 -07:00
Tor Arne Vestbø d627d351be macOS: Don't wipe NSWindowStyleMaskFullSizeContentView if set manually
The NSWindow may have style masks set by the user via winId(). We don't
want to wipe those just because we're recomputing the style mask.

Fixes: QTBUG-69975
Pick-to: 6.2 6.1 5.15
Change-Id: Ibca8388d45b623f4cdfaff4b256c4eb012e2ffac
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2021-08-17 12:20:24 +02:00
Tor Arne Vestbø d4015a21a4 macOS: Add logging for keyboard and complex text input
Pick-to: 6.2
Change-Id: I098829e051d4f63950b2e35ee6dd4def8d70cf01
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2021-08-16 19:26:29 +02:00
Assam Boudjelthia dc90755541 Fix Style java code format and warnings
The code had many bad formating and syntax or API usage warnings,
as well as some unused methods or classes which are fixed with this
patch.

Pick-to: 6.2 5.15 6.1
Task-number: QTBUG-71590
Change-Id: Ib113a0dc05703afb5190ec880b27daf75274cb1e
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
2021-08-15 14:02:41 +03:00
Alexandru Croitor e599be12d6 CMake: Fix plugin target names to end in Plugin suffix
Pick-to: 6.2
Task-number: QTBUG-95731
Change-Id: I56a34dd26656613c95fbc8f081d39561cb691852
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2021-08-12 13:50:14 +02:00
Thiago Macieira 472520afb9 MySQL: properly fix setting the character set
Commit e4bd73dc54 moved the
mysql_set_character_set() call above the mysql_real_connect() but that
doesn't actually work, as there's no connection to send the "SET NAMES"
statement on.

So do it in two steps: first, by setting the charset in the MYSQL
structure, then by asking the server to match.

Pick-to: 6.2
Task-number: QTBUG-55444
Change-Id: I4a40ccbd3321467a8429fffd1699bd829f342124
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2021-08-10 10:43:03 -07:00
Thiago Macieira aa93b4835a MySQL: don't format QDateTime with timezones
Neither MySQL nor MariaDB like it. According to the documentation[1],
MySQL now accepts timezones using the [+-]HH:MM format (and -00:00 is
rejected). MariaDB does not accept timezones at all[2].

This has apparently been broken since Qt 5.0 (the "Z" suffix was
introduced in commit 2528f4ffe5), but this
issue was never noticed because the of prepared queries: when they're in
use, we transfer the time using a MYSQL_TIME structure, which does not
support timezone offsets either. We've only noticed this issue when the
code to determine if the MySQL client library supported prepared
statements broke.

[1] https://dev.mysql.com/doc/refman/8.0/en/date-and-time-literals.html
[2] https://mariadb.com/kb/en/date-and-time-literals/

Task-number: QTBUG-95071
Change-Id: I4a40ccbd3321467a8429fffd1699cc4c050ae746
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2021-08-10 10:43:03 -07:00
Thiago Macieira 211369133c MySQL: remove the version number checks in favor of actual functionality
MariaDB library version 3.2 no longer returns the server version in the
10.x range but the library version itself, which is lower than 4.x. That
meant we concluded the server did not support prepared statements.

And because of the lack of prepared statements, all QDateTime
conversions failed, because of the timezone. I don't know if this was
intended or what, but it's a side issue.

[ChangeLog][QtSql][MySQL] Fixed the detection of whether the client and
server support prepared statements. This was caused by the mariadb
connector library reporting its own version numbers (starting in version
3.2) instead of the server version.

Fixes: QTBUG-95071
Pick-to: 5.15 6.2
Change-Id: I4a40ccbd3321467a8429fffd1699bc089ba706e6
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
Reviewed-by: Fabian Vogt <fabian@ritter-vogt.de>
2021-08-10 10:43:03 -07:00
Gatis Paeglis e946e6895a xcb: implement missing bits from ICCCM 4.1.4 WM_STATE handling
ICCCM 4.1.4 says:

Clients that want to re-use a client window (e.g. by mapping it again) after
withdrawing it must wait for the withdrawal to be complete before proceeding.
The preferred method for doing this is for clients to wait for a windown manager
to update or remove the WM_STATE property.

This patch implements the required logic. Qt 4 had something similar. Without
this patch we are calling various setter functions on a native window while it
is in an undefined state.

Fixes: QTBUG-69515
Pick-to: 6.2 5.15
Done-with: Liang Qi <liang.qi@qt.io>
Change-Id: I377a66ad3d5e43f14465d0ea670b2f43f96ed7d3
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
2021-08-10 14:21:59 +02:00
Liang Qi 02248eea55 xcb: add a timeout control when reading INCR property
For the first call of QXcbClipboard::clipboardReadProperty()
inside of clipboardReadIncrementalProperty() in getSelection(),
it will get a XCB_NONE reply before the contents arrived via
property change. Then we give a chance to read more.

Manually tested with following setups:
* examples/widgets/mainwindows/application with gvim(gtk3)
* examples/widgets/widgets/imageviewer with GIMP 2.10.18(based on
gtk2) and GIMP 2.99.6(based on gtk3 via flatpak)

Fixes: QTBUG-56595
Pick-to: 5.12 5.15 6.1 6.2
Done-With: JiDe Zhang <zhangjide@uniontech.com>
Change-Id: Ib45f08464d39ad79137b1da99808c89b7dca2d08
Reviewed-by: JiDe Zhang <zhangjide@uniontech.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2021-08-10 12:21:58 +00:00
Tor Arne Vestbø ab70aa362e macOS: Fix leaked NSMutableArray in applicationActivationChanged
The +[NSObject new] method is a combination of alloc and init.

Fixes: QTBUG-95619
Pick-to: 6.2 6.1 5.15
Change-Id: I341f8a3958fb7a016cf4c346750ea6d46eeebe9f
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2021-08-08 13:54:37 +02:00
Alexandru Croitor b2f00dfb46 CMake: Rename qt6_add_plugin TYPE option to PLUGIN_TYPE
The intention is to remove TYPE as a keyword completely before 6.2.0
release, but in case if that's not possible due to the large amount
of repositories and examples, just print a deprecation warning for
now and handle both TYPE and PLUGIN_TYPE.

Task-number: QTBUG-95170
Pick-to: 6.2
Change-Id: If0c18345483b9254b0fc21120229fcc2a2fbfbf5
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2021-08-06 21:08:21 +02:00
Tor Arne Vestbø f5203eeada Add native interface for X11 application, exposing display and connection
The major use-case of the now private QX11Info from Qt X11 Extras was
getting hold of the Xlib display and XCB connection, for example in KDE:

  https://lxr.kde.org/search?%21v=kf5-qt5&_filestring=&_string=QX11Info

A new native interface for QGuiApplication has now been added that
exposes these two properties, e.g.:

  if (auto *x11App = app.nativeInterface<QX11Application>())
      qDebug() << x11App->display() << x11App->connection();

To avoid type clashes one of the enum values of QXcbNativeInterface's
ResourceType had to be renamed.

Pick-to: 6.2
Task-number: QTBUG-93633
Change-Id: I2e366a2bb88bd3965ac6172ad000ae32209f43e7
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2021-08-06 15:09:39 +02:00
Morten Johan Sørvig 6336b5350b Improve WM_DPICHANGED handling
Resize QPlatformWindow on DPI change, so that QWindow
size can stay approximately constant.

For example, a 100x100 QWindow at 100% scaling will
have a 100x100 QPlatformWindow. If the scaling is changed
to 200% then the QPlatformWindow is resized to 200x200,
while the size of the QWindow stays at at 100x100.

In practice the QWindow size will also change slightly,
due to inaccuracies in how we adjust for the size of the
non-client window area. This will be addressed in a later commit.

We can get DPI change independently of screen change,
so no resizing should happen in screen change events.
Disable the resize code in QGuiApplication for Q_OS_WIN,
and remove the WithinDpiChanged flag.

The new flow for handling DPI change is:

  1) Send screen change (if any), so that the correct
     screen will be used when calculating scale factors
     during the following resize.
  2) Resize the native window, which will trigger geometry
     change events, possibly also for the QWindow.
  3) Resize child windows; WM_DPICHANGED is sent to
     top-level windows only.

Fixes: QTBUG-89294
Pick-to: 6.2
Change-Id: I0e2d44bae72d20ebdafc3d410db7be9964ad851b
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
2021-08-06 13:02:44 +02:00
Morten Johan Sørvig f988386560 Track current window DPI
The WM_DPICHANGED event gives us the new DPI, but we
also need the current DPI in order to determine the
scale factor corresponding to the DPI change.

Pick-to: 6.2
Change-Id: Ia61388415f57aa739397d3125b8751952e8fd392
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
2021-08-06 13:02:44 +02:00
Mike Achtelik c99849d0bc Shift iOS a11y translations into C++ file
lupdate cannot parse .mm files. Therefore tr markup must be inside of
C++ files. This copies the same approach qtconnectivity uses, see
6b2fd04b7be4494767b6092a030607010d91310c

Pick-to: 6.2
Change-Id: I9853864b4b81b48da763a387c78c102857f23047
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
2021-08-04 22:22:20 +02:00
Morten Johan Sørvig ee68257b61 Fix PerMonitorV2 DPI aware NonCLientAreaScaling handling
The value returned from shouldHaveNonClientDpiScaling()
controls two related behaviors:

1) Should Qt call user32dll.enableNonClientDpiScaling()
2) Should Qt code treat NonClientAreaScaling as enabled.

Commit c35643db updated shouldHaveNonClientDpiScaling()
to account for the fact that PerMonitorV2 always enables
NonCLientAreaScaling, with the intent to disable 1)
However this also disables 2), which was not intended.

Instead, make shouldHaveNonClientDpiScaling() always
return true when PerMonitorV2 is enabled, and then also
omit calling the user32dll API in this case.

Change-Id: I1d06f36a3d06becc667351fadcb00ab28af6ec4b
Pick-to: 6.2
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
2021-08-02 14:35:33 +02:00
Tor Arne Vestbø 6e25017922 macOS: Stop relying on balanced CGDisplay reconfiguration callbacks
We were using CGDisplay callbacks to determine when a screen reconfiguration
had happened, and when it had propagated to changes in NSScreen.screens,
so that we could update our QScreen view of the world.

Unfortunately the CGDisplay callbacks were not deterministic enough to
use as a signal for when a reconfigure had completed.

Since we can't rely on NSApplicationDidChangeScreenParametersNotification
either (it comes in too late), we're now resorting to updating our QScreens
at every chance we get:

 - On every CGDisplay reconfiguration ending
 - On QCocoaWindow::windowDidChangeScreen() as a result of AppKit
   moving the window.
 - On NSApplicationDidChangeScreenParametersNotification
 - On QCocoaScreen::get() as a last resort

Since the result of these updates are only reflected as QScreen property
updates or QGuiApplication signals if a change actually occurred, it should
be safe to update early and often.

Task-number: QTBUG-77656
Fixes: QTBUG-80193
Pick-to: 6.2 6.1 5.15
Change-Id: I98334a66767736d94ad2fcb169e65f0d8bc71a30
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2021-08-02 12:16:24 +00:00
Alexandru Croitor c13b98d9bc CMake: Bump project versions
Fixes: QTBUG-95454
Change-Id: I2467d3ae27b54424e59a7a4ab00d364eaec517d5
Reviewed-by: Jani Heikkinen <jani.heikkinen@qt.io>
2021-08-02 12:42:29 +02:00
Shawn Rutledge 69c833dae9 Register mouse devices on cocoa
It would have been nice to ensure that a device is registered already in
mouseEnteredImpl(); but in that context, NSEvent.deviceID is always 0,
and we can't find out anything else about the device.
QWindowSystemInterface::handleEnterEvent() doesn't currently take a
QPointingDevice either.

In handleMouseEvent() and scrollWheel(), deviceID seems unique for each
trackpad or Magic Mouse, but 0 for any plain USB mouse. There, the first
mouse that the user interacts with becomes primaryPointingDevice():
its deviceID is assigned to systemID (except if deviceID == 0, we use
1 instead, to avoid the auto-incrementing device ID assignment in the
QInputDevicePrivate ctor.) When scrolling occurs, we update the
capabilities to have PixelScroll if theEvent.hasPreciseScrollingDeltas.

So over time, QInputDevice::devices() should build up to a complete
list, with capabilities() also distinguishing plain mice from those that
have the PixelScroll capability. And in the common case that the user
has only one Apple pointing device, it becomes primaryPointingDevice().

Pick-to: 6.2
Task-number: QTBUG-46412
Task-number: QTBUG-63363
Task-number: QTBUG-72167
Change-Id: Id9771b4dfd765e49023bd57d42a2aa4d0635a3b2
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2021-08-01 15:32:41 +02:00
Oliver Wolff 5f5c342924 Remove Windows 7, 8, and 8.1 codepaths
Pick-to: 6.2
Task-number: QTBUG-84432
Change-Id: I970d7d7e9ebdcf246a5be32d60066b4e5e948c27
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2021-07-30 08:02:56 +02:00
Yuhang Zhao 2c6bc06267 Windows QPA: Remove DwmIsCompositionEnabled() usages
According to Microsoft Docs [1], DWM composition is always
enabled and can't be disabled since Windows 8. Now that
we are cleaning up pre-Windows 10 code, this apparently
needs to be removed as well.

[1] https://docs.microsoft.com/en-us/windows/win32/api/dwmapi/nf-dwmapi-dwmiscompositionenabled

Task-number: QTBUG-84432
Change-Id: I64dc049e0741600c8d0ae4db0e9e3bc98a211339
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
2021-07-30 01:08:15 +00:00
Timur Pocheptsov 4c0f81490b Provide new code paths for OpenSSL v3
With OpenSSL v3 it would be possible to compile-out functions,
directly working with entities like RSA, DSA, DH and EC_KEY.
For this you have to define OPENSSL_API_COMPAT >= 0x30000000L.
This would break QSslKey and QSslContext.
To mitigate this potential problem, we switch to the 'generic'
API, that works with EVP_PKEY instead. All functionality
will be preserved, except inability of QSslKey::handle()
to get pointers to RSA, DSA, DH or EC_KEY.

Fixes: QTBUG-95122
Pick-to: 6.2
Change-Id: Ic85b48502421c4330cf4877b52850539c855fa74
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2021-07-28 16:24:24 +02:00
Marc Mutz 25fff849e8 QDirIterator: add nextFileInfo()
Before this change, next() was the only way to advance the iterator,
whether the caller was ultimately interested in just the filePath()
(good) or not (bad luck, had to call .fileInfo()).

Add a new function, nextFileInfo(), with returns fileInfo() instead.
Incidentally, the returned object has already been constructed as part
of advance()ing the iterator, so the new function is faster than
next() even if the result is ignored, because we're not calculating a
QString result the caller may not be interested in.

Use the new function around the code.

Fix a couple of cases of next(); fileInfo().filePath() (just use
next()'s return value) as a drive-by.

[ChangeLog][QtCore][QDirIterator] Added nextFileInfo(), which is like
next(), but returns fileInfo() instead of filePath().

Change-Id: I601220575961169b44139fc55b9eae6c3197afb4
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2021-07-28 15:16:42 +02:00
André de la Rocha 0235c02178 Windows QPA: Fix coordinates reported through UI Automation
Conversion to/from native screen coordinates was incorrect and could
fail for non-primary screens. This could cause a control's bounding
rectangle to be incorrectly reported, or a search for a control based
on its position within the window to fail, causing incorrect behavior
with accessibility tools and other software interacting with the
application using UI Automation.

Fixes: QTBUG-91459
Pick-to: 6.2 6.1 5.15
Change-Id: I5d56584ff26d977cdd34d35af46644e32aa11e7c
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2021-07-27 15:07:39 +02:00
Timur Pocheptsov b4942f7f0c doCrypt() - check the error codes
Disabled (moved into the legacy provider) DES-CBC results in a crash,
when setting key length.

Pick-to: 6.2 6.1 5.15
Change-Id: Ie0b49424f11d8042ebecebfd3b6346263f730551
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2021-07-23 15:40:47 +02:00
Alexandru Croitor 91cc4fd699 CMake: Fix incorrect default plugin conditions on Windows
The correct variable to check is WIN32 rather than WINDOWS.
This affects which plugins get automatically linked in a static
Qt build.

Amends a3b58a7844
Amends d385158d52

Pick-to: 6.1 6.2
Fixes: QTBUG-95283
Change-Id: Idf78c78a1029f4d13fb460c07bef3d2669e55b09
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2021-07-22 12:04:15 +02:00
Volker Hilsheimer fe1085e9ae Update deprecated NSAccessibility method
accessibilityEnabledAttribute is replaced with isAccessibilityEnabled.

https://developer.apple.com/documentation/appkit/nsaccessibility/1535024-accessibilityenabled?language=objc

Fixes: QTBUG-95293
Pick-to: 6.2 6.1 5.15
Change-Id: Ie88fa61ad97d6c77dcec15e63a73f64c90011497
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2021-07-21 15:53:18 +02:00
Timur Pocheptsov 5e688a7204 Fix lcTlsBackend redefined in several places (plugins, static build)
With -static build lcTlsBackend was duplicated.

Pick-to: 6.2
Change-Id: I20ee0f9c7e2027a7033c9fbae628d0d91672e719
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2021-07-20 22:08:39 +02:00
Mårten Nordheim e753eb875c Schannel: Fix ODR violation in static programs
The Q_LOGGING_CATEGORY macro defines a function, and for each backend
the function would be defined (and defined differently).

Pick-to: 6.2
Change-Id: I6522b5e3baf731e5ead0e21da009c970d580fa02
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2021-07-20 22:08:39 +02:00
Volker Hilsheimer 5d7a58ea45 Scale image with MDI icons using the correction factor
The buffer might be large than needed and contain a lot of uninitialized
pixels. Scaling it down to the requested size is wrong, we need to scale
it by the correction factor.

Amends e56b8e1e59.

As a drive-by, make the correction factor helper function static.

Fixes: QTBUG-94733
Pick-to: 6.2 6.1 5.15
Change-Id: Ia5be2a77459321e30485d330b49cf57fdbb664d2
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2021-07-20 19:34:33 +02:00
Marc Mutz 93fdd88a42 Hold QSslContext in shared_ptr
... instead of QSharedPointer.

QSharedPointer performs twice as many atomic operations per pointer
copy as std::shared_ptr, and this is private API, we're not bound by
BC constraints, so we can port to the more efficient version.

Change-Id: I2e2a02493565a7ca51c86ec0ed66b6ce7c763e41
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2021-07-18 13:49:04 +02:00
Marc Mutz 9cc0c64e08 SSL: port QSharedPointer<QSslContext> uses to std-compatible API subset
In preparation of porting to shared_ptr.

Add a few strategic moves and remove a rather pointless comment
stating the obvious.

Change-Id: Ie1c0f3431af79bdb204e00d99323bf9f2d100d0d
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2021-07-16 23:41:34 +02:00
Edward Welbourne e4670df118 Tidy up systemCaCertificates() function in OpenSSL backend
As pointed out by Marc Mutz in another review, the Android branches of
its #if-ery amounted to a complicated no-op, so simplify the #if-ery,
add a TODO and then simplify the code thereby freed of the need to
accommodate the #if-ery.

In the process, initialize a set of filenames with the two filenames
that we read certificates from after looping over the set, which might
have left those files being read twice.

Change-Id: I2ee4ee3c3cf40226ee6a50afd6127fa4a71d2834
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2021-07-16 15:01:25 +00:00
Marc Mutz 27d6314b95 QCryptographicHash: use a std::array to hold result (was: QByteArray)
The maximum size for a hash result is 64 atm. Even if, and esp when,
we'll get to 128 and 256 bytes in the future, there's no reason to use
dynamic memory, because the sizes will always be statically known.

So use, essentially, a std::array<char, 64> to hold the result
internally. Add a bit of convenience API on top to limit impact on the
rest of the code and add a few static_asserts that ensure this is large
enough. Then give users access to the internal buffer by adding
QByteArrayView resultView() const noexcept. The documentation snippet
is taken from QString::data(), suitably adjusted.

Use resultView() in a few places instead of result().

[ChangeLog][QtCore][QCryptographicHash] Changed to use a
statically-sized buffer internally. Added resultView() to access it.

Change-Id: I96c35e55acacbe94529446d720c18325273ffd2f
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2021-07-15 17:56:23 +02:00
Alexandru Croitor 5c150862dd CMake: Don't give plugins PUBLIC usage requirements part 2
Plugins shouldn't have public usage requirements.

Amends 434ada8dcb

Pick-to: 6.2
Task-number: QTBUG-90819
Change-Id: Iffb3def07ea428b1c3c5b9873e259a4d5168b7a1
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2021-07-15 17:26:26 +02:00
Edward Welbourne aea433d8f0 Make some lists const and use ranged-for to iterate them
Change-Id: Ib43a9b165deb6f3141700961469acf2eb60862ec
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2021-07-15 17:06:54 +02:00
Marc Mutz fbcb3fc506 QSslContext: remove unused fromConfiguration()
All callers use the shared-ptr version these days.

Change-Id: I77e9fc9ccb8a57bfebcad7883e9eaff3780748f0
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2021-07-13 20:54:04 +02:00
Timur Pocheptsov ae6590e360 Don't use a deprecated function if built/linked with OpenSSL v3
SSL_get_peer_certificate was deprecated in OpenSSL v3 and can be 'compiled-out'
using OPENSSL_API_COMPAT. Use SSL_get1_peer_certificate instead.

Pick-to: 6.2
Task-number: QTBUG-94596
Change-Id: Iedb2e06e673e981cab79d4bf0147ac6f5f90089a
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2021-07-13 10:39:55 +02:00
Tor Arne Vestbø 3c3f6ebdbb macOS: Map QSurfaceFormat color space to NSWindow via ICC data
Instead of special casing sRGB.

Pick-to: 6.2 6.1
Change-Id: I7ad20c4b9600210333d5e44c3a2d20ce7d39dd92
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
2021-07-12 20:50:16 +02:00
Joerg Bornemann 3ab4742c00 CMake: Use QtBase_SOURCE_DIR instead of QT_SOURCE_TREE
...where applicable to use a known CMake-provided variable in favor of
our own cooked up one.

This affects four plugins that are not supposed to be built out of tree,
meaning QtBase_SOURCE_DIR is available (and identical to
QT_SOURCE_TREE).

Task-number: QTBUG-88090
Change-Id: I27f012e6c5fd99c3239a1dd65c0811c819dbcfe9
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2021-07-12 18:56:14 +02:00
Joerg Bornemann 41977d456b CMake: Simplify resource setup in WASM platform plugin
Use the BASE argument of qt_internal_add_resource to avoid the
specification of resource aliases.

Use QtBase_SOURCE_DIR in favor of QT_SOURCE_TREE to use a known
CMake-provided variable in favor of our own cooked up one.

Pick-to: 6.2
Task-number: QTBUG-88090
Change-Id: I0d8b30a1564495db475ae58596b52b373b2b173e
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2021-07-12 18:56:14 +02:00
Volker Hilsheimer e71a5d5cc3 macOS: Don't make frameless tool windows miniaturizable
Amends 556fbbea6e, which breaks
translucency of frameless tool windows. Possibly a bug in macOS, a
window being made miniaturizable should not have side effects on
background or translucency.

Pick-to: 6.2 6.1 5.15
Fixes: QTBUG-95042
Task-number: QTBUG-65637
Change-Id: I651196e3cf8a9c59b250e5f1b4064cc4ded02372
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2021-07-12 10:14:09 +02:00
Timur Pocheptsov 408656c6f9 Diffie-Hellman parameters: remove useless 'fix'
The workaround I had implemented based on alpha version of OpenSSL v3
and what developers (OpenSSL) said about DH back then is not going to work
in the end - they do remove all DH (struct and related functions) stuff
if you set a proper OPENSSL_API_COMPAT level. A proper re-write is required
to support OpenSSL v3, but then there is no reason to keep dead useless
code.

Pick-to: 6.2
Task-number: QTBUG-94596
Change-Id: Iae092dd08148521649a684879d30e190736e1abe
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2021-07-09 19:53:55 +02:00
Timur Pocheptsov 3186ca3e39 Dont's use DTLS_MAX_VERSION when setting SSL_CTX
It was fixed quite some time ago for TLS counterpart (TLS_MAX_VERSION),
but somehow the similar fix was missing for DTLS. OpenSSL v3 deprecated
those constants and they can be compiled out by OPENSSL_API_COMPAT.

Pick-to: 6.2
Task-number: QTBUG-94596
Change-Id: Ia0246170a003db900c430b2fbfc177caf05a395a
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2021-07-09 19:53:54 +02:00
Volker Hilsheimer 637d5dd6b1 macOS: fix drawing of pushbuttons of non-standard size
Cocoa renders the bevel of a push button always in the default height of
32 pixels. We handled the case that the button is larger than that by
switching to "squared" mode, but buttons that are smaller than that got
rendered incorrectly, with the bevel being clipped.

Fix this by always rendering buttons in "squared" mode when the height
of the widget is not the same as the standard. Adjust the default height
for "mini" push buttons based on visual testing. Make the equivalent
adjustment to the focus frame logic and general positioning so that
buttons and frames are centered compared to other controls.

As a drive-by, get rid of expensive QObject::inherits calls, and replace
with qobject_cast. The headers for all the relevant widget types are
already included.

Fixes: QTBUG-85972
Pick-to: 6.2
Change-Id: I4ad66fac2313fbee385c1eadcc243f69c9cace70
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2021-07-09 17:03:39 +02:00
Marc Mutz e9fffbaf81 Use QCryptographicHash::hash() more widely
... instead of the "usual" rule of three: ctor, addData(), result().

Not only does it generate less code in the caller, it's now also
faster.

Change-Id: I67c7eeb01f527b90e80a08f60c1c7f2ec1e49dd4
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2021-07-07 23:49:26 +00:00
Joerg Bornemann 434ada8dcb CMake: Don't give plugins PUBLIC usage requirements
The pro2cmake.py conversion script faithfully reproduced the .pro files
for the plugins, which specified the libraries as public. But in CMake,
the implications of this are that public usage requirements should then
be propagated to consumers. We don't expect any consumers, since a
plugin is created as a MODULE library in CMake, so for Windows we don't
even have an import library to link with. The only exception to this is
for static builds where plugins are created as STATIC libraries
instead, but only in certain controlled situations do we then link to
plugins. Even then, usage requirements are not expected to propagate to
the consumers, so these relationships should always be specified as
private.

Pick-to: 6.2
Task-number: QTBUG-90819
Change-Id: Ibc7c2bcd3b6a9dc77df40c4c0c22ff254a80f33d
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2021-07-07 09:41:37 +02:00
Volker Hilsheimer eaa48136a3 macOS 10.15: Fix focus frame for combo boxes
Amends df31696321 to take care
of macOS 10.15 specifically, where the focus ring is a pixel
too high and leaves a gap that's visible on high-dpi displays.

On macOS 10.14 and before, and for editable comboboxes, the focus
frame is correct.

Fixes: QTBUG-94069
Pick-to: 6.2 6.1 5.15
Change-Id: I278aa30036808c06f8e71385d4797315e46d8f1d
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2021-07-06 17:49:31 +02:00
Volker Hilsheimer 6832789bbd macOS: fix separator actions not showing in menus
Amends a3f3af8a8f, which resulted in the
last visible separator always getting hidden.

Don't abuse QCocoaMenuItem::visible property to store whether the native
NSMenuItem is shown, only store whether it should be shown.

Rename the local variables to simplify the logic.

Fixes: QTBUG-94802
Pick-to: 5.15 6.2 6.1
Change-Id: I56e8c99a2a46d8cbdf75c4ad6cb714961f28a6a3
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
2021-07-05 23:34:09 +02:00
Assam Boudjelthia af6bc5a21b Remove ministro code
Since Ministro no longer work on recent Android versions (Android 8+),
and it hasn't been maintained and the repos are not updated, the
existing code is practically a dead code.

[ChangeLog][Android] Remove ministro code since it's been unmaintained
and not working with recent Android versions.

Task-number: QTBUG-85201
Pick-to: 6.2
Change-Id: I18d7b1e209cba3cfd04674060e9bf39aa5a5510f
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
2021-07-01 23:54:14 +03:00
Milian Wolff e01a004a38 Fix memory leak of QOffscreenScreen in QOffscreenIntegration
Call handleScreenRemoved when the QOffscreenIntegration is getting
destroyed. Fixes memory leaks such as this one:

```
$ memcheck --leak-check=full ./tst_qlabel -platform offscreen
...
==117791== 472 (88 direct, 384 indirect) bytes in 1 blocks are definitely lost in loss record 166 of 267
==117791==    at 0x483EF3F: operator new(unsigned long) (vg_replace_malloc.c:417)
==117791==    by 0x48C0939: QOffscreenIntegration::configure(QList<QString> const&) (in /home/milian/projects/qt5/src/qtbase/build/plugins/platforms/libqoffscreen.so)
==117791==    by 0x48C0B60: QOffscreenIntegration::createOffscreenIntegration(QList<QString> const&) (in /home/milian/projects/qt5/src/qtbase/build/plugins/platforms/libqoffscreen.so)
==117791==    by 0x5381CB4: init_platform(QString const&, QString const&, QString const&, int&, char**) (in /home/milian/projects/qt5/src/qtbase/build/lib/libQt6Gui.so.6.2.0)
==117791==    by 0x5384E05: QGuiApplicationPrivate::createPlatformIntegration() (in /home/milian/projects/qt5/src/qtbase/build/lib/libQt6Gui.so.6.2.0)
==117791==    by 0x5385B1F: QGuiApplicationPrivate::createEventDispatcher() (in /home/milian/projects/qt5/src/qtbase/build/lib/libQt6Gui.so.6.2.0)
==117791==    by 0x5C67A76: QCoreApplicationPrivate::init() (in /home/milian/projects/qt5/src/qtbase/build/lib/libQt6Core.so.6.2.0)
==117791==    by 0x5387826: QGuiApplicationPrivate::init() (in /home/milian/projects/qt5/src/qtbase/build/lib/libQt6Gui.so.6.2.0)
==117791==    by 0x4C00368: QApplicationPrivate::init() (in /home/milian/projects/qt5/src/qtbase/build/lib/libQt6Widgets.so.6.2.0)
==117791==    by 0x11D7D9: main (in /home/milian/projects/qt5/src/qtbase/build/tests/auto/widgets/widgets/qlabel/tst_qlabel)
==117791==
```

Pick-to: 6.2
Change-Id: Ibf4e6f4258514f85f23bb91b29008b837016edbc
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2021-07-01 12:30:38 +00:00
Lorn Potter 286816e76e wasm: fix mouse, touch and wheel event propagation
Otherwise touch pad and wheel + ctrl cause the window to be zoomed,
which is not what happens on desktop.

Pick-to: 6.2
Change-Id: Ic841b7c2ab56846db9f030abaeb9efa7d3dd4dcf
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2021-06-26 03:47:59 +10:00
Mårten Nordheim 43a36dfd81 Schannel: Get rid of Windows < 10 code
No need to check if we're running on windows 8.1 or above.
We always are.

Pick-to: 6.2
Change-Id: I9f2e7a58631064e573725705882a603e900c7e39
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2021-06-25 06:01:54 +00:00