Commit Graph

38906 Commits

Author SHA1 Message Date
Volker Hilsheimer
3d7bd7ad19 Fix hit testing in non-client area of fixed-size windows, don't show resize cursors
The m_windowState member is never updated regarding active state;
isActive is instead reimplemented to query the window manager, so use
that.

To extend the area where the user can move the window over the entire
titlebar of fixed-height windows, just test whether the mouse position
is within the titlebar.

Change-Id: I6b87aacd0bdab511cfd4959df1114af5c6013852
Fixes: QTBUG-77220
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2019-07-31 20:13:49 +02:00
Volker Hilsheimer
23e605cc5b Plug a memory leak introduced in e24a4976be
While it is correct not to call the functor when the context object has
been destroyed, we still need ot clean up the slotObj. It's a low-
probability memory leak: the context object has to disappear while
waiting for a host resolution, and for repeated requests for the same
host the cache takes over anyway.

Task-number: QTBUG-76276
Change-Id: Id9daf391353b8252443f3186a7d504d70c553b24
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2019-07-31 09:25:30 +02:00
Oliver Wolff
652085c5c2 qfsfileengine_p.h: Un-inline processOpenModeFlags
An inlined exported function does not make sense and will cause a
warning.

Fixes: QTBUG-77242
Change-Id: I016b93d6b39c4db82148fdc5a8a92bc9d5751885
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
2019-07-30 13:10:08 +02:00
Tor Arne Vestbø
c2f041203f qmake: Keep -force_load with library when merging linker flags
Without treating -force_load as an option with an argument, we end up
leaving stray -force_loads in the linker line, resulting in build
failures when the following option is a random library then treated
as a file path.

Task-number: QTBUG-66091
Change-Id: I352c50ab67e32ef6b2b5c6a4f90455b20034e207
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
2019-07-29 17:23:16 +02:00
Tor Arne Vestbø
080fbb55b5 qmake: Don't allow -framework without second argument when merging flags
The linker doesn't support -framworkFoo, so neither should we. The correct
syntax is -framework Foo.

Change-Id: I3f39ffc067871ce058542bf0068274b35f7b51f6
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
2019-07-29 17:20:10 +02:00
Tor Arne Vestbø
f4647b40ca macOS: Respect QSurfaceFormat color space when creating NSWindow
Task-number: QTBUG-47660
Change-Id: I90a2956bfaa52c361a3eba32f0ea19c0eca8c277
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-07-29 15:24:05 +02:00
Oliver Wolff
56b1cb0b04 Move processOpenModeFlags out of QFSFileEngine
The same logic is needed for QWinRTFileEngine. To be able to reuse the
code, it was moved out of the class.

Task-number: QTBUG-77095
Change-Id: If52b2fc8a0f3056d32fc693775565a1c3803b7d4
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2019-07-29 12:23:07 +02:00
Oliver Wolff
3fbb6a9572 QWinRTFileEngine: Handle QIODevice::Truncate when opening files
Fixes: QTBUG-77095
Change-Id: I45b38fab779518c49b22077c493d8640572d40d9
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
2019-07-29 12:22:55 +02:00
Oliver Wolff
7138d6fd6b QWinRTFileEngine: Implement setSize
Fixes: QTBUG-77132
Change-Id: Ic0410297a2215f1b7b656966cbe84b925706532f
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
2019-07-29 09:13:38 +02:00
Volker Hilsheimer
e24a4976be QHostInfo: Always post results through the event loop to the receiver
Lookups performed via QHostInfoRunnable must not synchronously call
the user-code's receiver objects, as that would execute user-code in
the wrong thread. Instead, post a metacall event through the event
loop of the receiver object, or the thread that initiated the lookup.

This was done correctly for the trivial cases of empty host name or
cached results, so the code generally existed. By moving it from a
global function into a member function of QHostInfoResult, we can
simply access the required data to construct and post the event.

As we process that posted event, we need to check that the context
object (which is already guarded via QPointer) is still alive, if
we had one in the first place. If we had one, and it's deleted, then
abort.

[ChangeLog][QtNetwork][QHostInfo] Functors used in the lookupHost
overloads are now called correctly in the thread of the context object.
When used without context object, the thread that initiates the lookup
will run the functor, and is required to run an event loop.

Change-Id: I9b38d4f9a23cfc4d9e07bc72de2d2cefe5d0d033
Fixes: QTBUG-76276
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-07-26 17:59:47 +02:00
Tor Arne Vestbø
e6498362fd macOS: Respect color space set on NSWindow when flushing backingstore
By default Qt tries to avoid potentially costly color matching by
not assigning an sRGB color space to our backingstore, even if
that's what we in practice fill it with.

We used to do this by assigning the display's color space, which
effectively opts out of color matching, similar to the old behavior
of the device RGB color space (which nowadays implies sRGB).

By picking up the color space from the NSWindow instead, we allow
the user to override the color space to trigger color matching,
for example by explicitly setting it to NSColorSpace.sRGBColorSpace.

NSWindow will fall back to the screen's color space if the window
doesn't have one set.

Task-number: QTBUG-47660
Change-Id: Iac8177e85e86fe9044a41eb2c93fbf26bb83c248
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-07-26 15:33:27 +02:00
Timur Pocheptsov
5b3c09e35f QMacStyle - another slider fix
As a follow-up to fixed resize handling: the trick Gabriel wanted
to use to enforce a specific look on a slider's bar, never actually
worked due to misplaced statement which essentially is cancelling
the 'magic' before the bar is drawn. Now it's fixed: bar is centered
(between the rows of tickmarks above and below) + it's had a nice
blue filling back!

Change-Id: I3021c2b86e4c25981eeee015e32baa24ccebc3bd
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2019-07-26 15:12:17 +02:00
BogDan Vatra
698faf7b6d Android: Fix SSL 1.1 support on API-21
OpenSSL 1.1.x libs must be suffixed otherwise it will use the system ones which on API-21 are OpenSSL 1.0 not 1.1

Fixes: QTBUG-76884
Change-Id: I7d4052be68cf7dc65f74a48da8e1e37182056a5e
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2019-07-26 12:20:15 +03:00
Marc Mutz
6bc7309135 QResource: fix nullptr-check gone tautological
Amends 136c5b9338.

Before that change, each of the three members was a separate
Q_GLOBAL_STATIC, so checking resourceList() for nullptr was the
correct thing to do to find out whether the static was already
destroyed.

After the change, the resourceList() function will never return
nullptr. Either resourceGlobalData.isDestroyed(), in which case
dereferencing it asserts, or it isn't, in which case resourceList()
returns a valid pointer.

An explicit isDestroyed() check was added to the unregister function,
but the register one was also checking resourceList() for nullptr,
and this was left unprotected.

Add the check and remove the now-tautological checks for nullptr
resourceList().

Change-Id: I41fe66939ce858a77802b8af04c1de6e4fafe048
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2019-07-26 12:18:47 +03:00
Timur Pocheptsov
0ce3f7d62b QMacStyle: workaround NSSliderCell's cached/stale geometry
It's a bit cheesy solution, but works as I've noticed first on
QSlider's with a ticks direction 'both'. Works because we were
already using numberOfTickMarks property to trigger a special
behavior for HIG non-compliant widgets. Works for our case too
- we trigger a geometry update.

Fixes: QTBUG-76811
Change-Id: I2cbf00d42d98e78519b281d138a2f74227ef5449
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2019-07-25 10:15:41 +02:00
Michael Brasser
65cdd0f366 Enable shader cache for ES2 when GL_OES_get_program_binary is present
Change-Id: I4fb71471a7dd22441def1eb837857d245c3e3c5a
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2019-07-25 01:49:48 -05:00
Timur Pocheptsov
e4c1feae5c Implement 'preconnect-https' and 'preconnect-http' for H2
QNetworkAccessManager::connectToHostEncrypted()/connectToHost()
creates 'fake' requests with pseudo-schemes 'preconnect-https'/
'preconnect-http'. QHttp2ProtocolHandler should handle this
requests in a special way - reporting them immediately as
finished (so that QNAM emits finished as it does in case of
HTTP/1.1) and not trying to send anything.
We also have to properly cache the connection - 'https' or
'http' scheme is too generic - it allows (unfortunately)
mixing H2/HTTP/1.1 in a single connection in case an attribute
was missing on a request, which is wrong.
h2c is more complicated, since it needs a real request
to negotiate the protocol switch to H2, with the current
QNetworkHttpConnection(Channel)'s design it's not possible
without large changes (aka regressions and new bugs introduced).

Auto-test extended.

Fixes: QTBUG-77082
Change-Id: I03467673a620c89784c2d36521020dc9d08aced7
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-07-24 16:03:02 +02:00
Oliver Wolff
589d96b9b0 winrt: Remove QWinrtScreen::pixelDensity so that the default of 1.0 is used
Winrt does device independent scaling by default so that overwriting
pixelDensity for QWinrtScreen will break the use case of setting
Qt::AA_EnableHighDpiScaling. That mode is basically always active on
winrt.

Task-number: QTBUG-76363
Change-Id: Ib522201850d17757be4a80aa819c3f1245ca7147
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
2019-07-24 08:49:09 +02:00
Allan Sandfeld Jensen
c21cc647e9 Fix lancebench results oddness
Imports were expanded in the list of commands every time they were
evaluated. This meant any test with imports ran slower and slower the
more iterations it got through.

Fixed by creating a new PaintCommands object every time and living with
initialization of it being part of the benchmark results.

Change-Id: Ib53a3a25f1393437452bc5aede04ccb63e8715a6
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
2019-07-23 11:47:51 +00:00
Shawn Rutledge
86f91bf0f7 Make the warning in QBackingStore::endPaint() a little more helpful
Amends 2aa9908e24

Change-Id: I2883ca27b06b2b414b4991b2dab3f84100b4c853
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2019-07-22 13:09:37 +02:00
Mike Krus
b202d45026 Make simulator detection work with Xcode 11
Beta version of Xcode 11 changes the format of the json object
returned by simctl and used to detect running simulators.

While multiple versions of Xcode can coexist on the same system,
they share the same simulator infrastructure so installing
Xcode 11 Beta affects projects using previous versions.

Change-Id: Icf06a794aa5ba3624163ace2ce827c0ecf97c38c
Reviewed-by: Frank Osterfeld <frank.osterfeld@kdab.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2019-07-21 14:05:15 +01:00
Tor Arne Vestbø
857e4881c6 macOS: Properly unpolish font and palette
Explicitly setting the application font and palette will actually
persist the current state of the application font and palette to
the widget, and it will stop reacting to system style changes.

Change-Id: Ib856fe86cd3edb618b7ee5819d6c6c892c61fd1d
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2019-07-20 12:03:29 +02:00
Yulong Bai
a96a64be2d qmake: fix variable naming conflicts with C++20 keyword
It conflicts with 'requires' keyword.

Fixes: QTBUG-77093
Change-Id: I85e8f530dd1e2bf9a31906dd6c5123b947235b01
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2019-07-19 21:31:50 +02:00
Thiago Macieira
65f9646583 Fix QCborStreamReader not flushing QIODevices due to internal buffering
When successfully finishing a parse, it's reasonable to expect that the
QIODevice was advanced to the end of the input data.

[ChangeLog][QtCore][QCborStreamReader] Fixed a bug that caused the
QIODevice that the data was being read from not to show the entire CBOR
message as consumed. This allows the user to consume data that may
follow the CBOR payload.

Fixes: QTBUG-77076
Change-Id: I1024ee42da0c4323953afffd15b23f5d8fcc6f50
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
2019-07-19 12:31:42 -07:00
Thiago Macieira
89e0c2854a Fix QStorageInfo inability to parse really long mountinfo lines
Docker creates really long lines due to the multiple levels of overlays
in the overlayfs. Our limit of 1024 bytes was too short.

[ChangeLog][QtCore][QStorageInfo] Fixed a bug that caused QStorageInfo
to be unable to report all filesystems if the options to mounted
filesystems were too long (over 900 characters, roughly), such as those
found in Docker overlay mounts.

Fixes: QTBUG-77059
Change-Id: I6aed4df6a12e43c3ac8efffd15b1ba4231e60b4a
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2019-07-19 05:18:23 -07:00
Tor Arne Vestbø
c5ab86976b macOS: Modernize and clarify transient parent window level inheritance
Task-number: QTBUG-71480
Change-Id: Ia026427844a674f6b36804571a897dc6f16364fa
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2019-07-19 11:02:11 +00:00
Allan Sandfeld Jensen
5c351da046 Protect against integer overflow in painting transformed images
Makes it safe to sample pixel coordinates above 32767.

Fixes: QTBUG-76829
Change-Id: I5965afef1bd65106fcfc130dd37572309eacbe42
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
2019-07-19 11:55:50 +02:00
Tor Arne Vestbø
af683471bd macOS: Add QCocoaWindowManager for dealing with window levels
Moves and improves the logic for lowering splash screens to a dedicated
window manager, which will learn more tricks in patches to come.

Change-Id: I8b8fd1dd78fdaf6f106a59c84d2a59254f3539c3
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2019-07-19 10:56:23 +02:00
Tor Arne Vestbø
92563a2453 macOS: Allow overriding NSKeyValueObservingOptions for QMacKeyValueObserver
Change-Id: I6dc0f7c542ccfb768c1cd8688168c415e2c8a087
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2019-07-18 16:00:29 +02:00
Volker Hilsheimer
de775f2e62 macOS: activate correct object when using multiple QSystemTrayIcons
Since we need to set the delegate on the defaultUserNotificationCenter,
which is a gobal object, we have to update the delegate when we show
the message. Otherwise, the last delegate created and set will receive
the notification, and the last QSystemTrayIcon created will emit the
activated signal.

Before clearing the delegate upon destruction, make sure that it's
the right item first.

Also updating coding style in the respective parts of the code, and
plugging a memory leak.

Change-Id: Ife62ae0776a5a610a6fd735b2959b807c3a410c7
Fixes: QTBUG-77003
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2019-07-18 15:26:49 +02:00
Giuseppe D'Angelo
907923b7ca qmake: fix move semantics
ProFunctionDef is move-enabled, meaning its `m_pro` field can
become nullptr. Its usage in the assignment operator and the dtor
must therefore be protected with a check.

Amends 9c63ad562b.

Change-Id: I0c77b07dc83969565480bbb9d9fc80751d4246b1
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2019-07-18 12:55:33 +00:00
Timur Pocheptsov
334f09b585 tst_http2 - make the test less rough in general
1. Use per-case QNAM objects
2. In a slots (connected to QNetworkReplies) - if an error detected - stop
   the event loop (no reason to continue waiting) and then do normal
   QVERIFY/QCOMPARE things.
3. In tests, check QTest::currentTestFailed after the event loop returned -
   if an error was detected by a slot, no need to continue with QCOMPARE/QVERIFY
   in the test itself.

Task-number: QTBUG-77053
Change-Id: I3827a629a2749becd3dc6eee7fd6994d96441e65
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
2019-07-18 06:18:40 +02:00
Edward Welbourne
1d8c9978fa QDateTime docs: don't encourage use of deprecated textdate functions
The textdate API methods are deprecated in favor of QLocale; so
suggest use of QLocale in place of them.  Don't credit the deprecated
methods as being used where they aren't.

Change-Id: I0abcb1f69729760ae1b86cb8088e4158c0ad6010
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Reviewed-by: Tasuku Suzuki <tasuku.suzuki@qbc.io>
2019-07-17 14:25:13 +02:00
Tor Arne Vestbø
d224c762bc macOS: Use correct virtual screen when resolving GL surface format
Change-Id: I8288db85c8e99bf9fccfcfbca7f9e3594d00fa48
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2019-07-17 09:56:15 +02:00
Tor Arne Vestbø
d2e4bde5d0 macOS: Use lambdas instead of Obj-C categories for GL helper functions
Allows us to reference captured variables and keeps the function
local to where it's used.

Change-Id: I609892888720202021862d26a74ceb50e232f356
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2019-07-17 09:55:57 +02:00
Tor Arne Vestbø
7a7fe9dbb3 macOS: Move QCocoaGLContext initialization into dedicated method
Change-Id: I9dc2c400c3d26e9fcfaac04b61c1503229f59dba
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2019-07-17 09:55:31 +02:00
Tor Arne Vestbø
e0a486c77d Tie QPlatformOpenGLContext to its QOpenGLContext before initializing
So that the context can be referenced during initialization.

Change-Id: I9ec69b2431ba1ac6256cb2e969a76f515497e247
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2019-07-17 09:00:57 +02:00
Thiago Macieira
6bd35e4708 Work around Apple Clang's -Wshadow warning
Well, yeah, it technically does...

 qcborstream.h:245:15: warning: declaration shadows a typedef in the global namespace [-Wshadow]
 /usr/include/libkern/OSTypes.h:36:26: note: previous declaration is here

Fixes: QTBUG-75825
Change-Id: Idce141629dd34287808bfffd159ee2a75428bf12
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2019-07-16 21:13:45 -07:00
Friedemann Kleint
05bb156aaa Windows QPA: Fix emitting of QScreen's changed signals
When changing the primary screen, the various changed signals of
QScreen were out of order. Most notably, the wrong DPI value was
emitted since QGuiApplicationPrivate::processScreenGeometryChange()
checks and emits DPI and orientation as well. Rearrange the code to
assign new the values and emit DPI first.

Task-number: QTBUG-76902
Change-Id: If4037108391c36ab3a8bfcb9b2989d5bea41202f
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
2019-07-16 22:07:11 +02:00
Paul Wicking
4f26f05869 Doc: Add trailing "." to all \brief commands in QLineEdit
Minor housekeeping.

Task-number: QTBUG-77063
Change-Id: I9c04dd4220c0c2ad2afa51f88df197f5992752ff
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
2019-07-16 08:16:24 +02:00
Timur Pocheptsov
7a61cb46e6 tst_http2::flowControlServerSide
fix the bloody test for good - the idea to have a shared QNAM (shared
by test cases in this test) was somewhat wrong to start with.

Fixes: QTBUG-77053
Change-Id: I5755e96ec988e2dd546f527f3f902fc43914b0b7
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-07-15 16:17:16 +02:00
Mårten Nordheim
2a15ec72c0 QHttpSocketEngine: The 'Connection' options are case insensitive
As noted in RFC7230 Section 6.1 the 'Connection' options are case
insensitive.

https://tools.ietf.org/html/rfc7230#section-6.1

Change-Id: I80b98d82eaa5572d38a6c3f99383bc059ec91c54
Fixes: QTBUG-76990
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
2019-07-15 13:31:12 +02:00
Tor Arne Vestbø
7d3a55cbd2 Remove unused arguments from QWidgetPrivate::create_sys
The public QWidget::create still has them, but we don't need to
propagate them on - that just makes debugging the window creation
flow harder.

The window argument to QWidget::create is technically used to
guard an early exit in the function, but to keep behavior the
same we leave it for now.

Change-Id: Ic0287575aa25f1272e216adc1b75e34d6f55f6d9
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-07-12 14:54:13 +00:00
Tor Arne Vestbø
deac052a40 Revert "Reset QWidget's winId when backing window surface is destroyed"
This reverts commit a9246c7132.

The QWidget machinery is way to fragile to reset the winId under the
feet of QWidget like that. We would potentially need to include all
the logic in QWidget::destroy. This also ties into the flow between
QtGui and QtWidgets during window closing, which is still unresolved.

Change-Id: I168048a63c89796398eb5331a80ce3e5c8d9a208
Fixes: QTBUG-76588
Task-number: QTBUG-69289
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2019-07-12 14:17:43 +02:00
Alexandru Croitor
3c0ba6675b Fix warnings as errors on macOS with new Xcode 10.2.1
A switch statement was comparing enum values of a different enum.

Change-Id: I578f79b15b1007afaa64cd3a2a80d6a75d3bed77
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Leander Beernaert <leander.beernaert@qt.io>
2019-07-12 12:18:15 +02:00
Volker Hilsheimer
ae972a1928 macOS: show QSystemTrayIcon message icons in notification popups
The icon provided was ignored, even though NSUserNotification provides
the option to specify a contentImage.

The message popping up will show that image on the right side of the
notification; it will not repace the application icon on the left side.

[ChangeLog][Widgets][QSystemTrayIcon] On macOS, show the icon passed
into showMessage in the notification popup

Change-Id: I8ecda7f893006e74a4f35f37ddc07063ebfe4e83
Fixes: QTBUG-76916
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2019-07-11 22:50:20 +02:00
Marc Mutz
987dde2965 Optimize and fix handling of QtMessageHandlers
A function may almost always have static storage duration, but that
does not necessarily mean that we can store and load pointers to them
without memory ordering. Play it safe and use store-release and
load-acquire for them (which combines to ordered for the fetchAndSet
call in qInstall*Handler(), as we don't know what the caller will do
with the returned function pointer).

Also change the initial value of the atomic pointer to nullptr.
Nullptr already signified the default handler in qInstall*Handler(),
so the API doesn't change. But by using nullptr to mean default, we
place these variables in the BSS segment instead of TEXT, save dynamic
init, or at least a relocation, and we dodge the smelly comparison of
function pointers, using comparison against nullptr instead.

Also, as a drive-by, put the call to ungrabMessageHandler() in a
scope-guard. Both the message handler, as well as the Qt code calling
it (toLocal8Bit()!), may throw, and that would stop all further
logging. In Qt 5.9, we can't use qScopeGuard(), yet, so use a local
struct calling ungrabMessageHandler() in its dtor.

The code still has one problem: When a logging action is underway, and
another thread exchanges the message handler, we might still execute
code in the old handler. This is probably not a problem in practice,
since no-one will use a dynamically-compiled function for logging
(right? :), but should probably be documented or fixed. This patch
does not address this issue, though.

Change-Id: I21aa907288b9c8c6646787b4001002d145b114a5
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
(cherry picked from commit cd401b74a1)
(cherry picked from commit ea16c860bd75a35134ebb1d4f3be5db58f4a4e21)
2019-07-11 20:05:19 +00:00
Friedemann Kleint
54684f10e9 QSaveFile: Fix changing the file name after hitting on readonly file
The call to QFileDevice::unsetError() in QSaveFile::open() does
not clear QSaveFilePrivate::writeError. Clear it in addition.

Fixes: QTBUG-77007
Change-Id: I5e5009750f1726d1c74c1b4eb1c33f3a5393fe4f
Reviewed-by: David Faure <david.faure@kdab.com>
2019-07-11 22:00:10 +02:00
Thiago Macieira
d01693733f QDirIterator: don't require NFD normalization on Darwin for validity
HFS+ filesystems do enforce NFD normalization, so the test worked for
those filesystems. But on APFS, the filesystem is normalization-
insensitive but preserves it, so our transformation caused valid files
to be rejected.

This commit also optimizes the solution for all systems too. Instead of
converting from 8-bit to UTF-16 then back to 8-bit (allocating memory in
both steps), we only convert to UTF-16. And if we detect the locale is
UTF-8, then we use the further optimized QUtf8::isValidUtf8 function
that doesn't allocate any memory at all (ditto for US-ASCII, the case of
someone running with LANG=C).

Fixes: QTBUG-76522
Change-Id: Ief874765cd7b43798de3fffd15aa0d81620ad317
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2019-07-11 11:46:59 -07:00
André de la Rocha
786c588171 Windows QPA: Fix handling of mouse messages synthesized by the OS
The old handler only marked mouse events associated with mouse messages
synthesized by the OS with Qt::MouseEventSynthesizedBySystem when these
messages resulted from touch screen, not tablet input. Quick seems to
depend on this behavior.

Fixes: QTBUG-76617
Change-Id: Ib863d73ae9325f9a19d8a175817fef4e82f7df0b
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2019-07-11 20:03:01 +02:00