Setting the childMode property to ParallelStates will result in an
invalid state machine. This is never checked (worse, we explicitly
allow it and have a constructor to set it), but it results in
findLCCA failing, which then results in a failing assert or crash.
This fix in this patch is to handle this case separately. The proper
fix would be to remove completely the ability to set the childMode
on a QStateMachine, but that will have to wait until Qt6.
Fixes: QTBUG-49975
Change-Id: I43692309c4d438ee1a9bc55fa4f65f8bce8e0a59
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
This code has been there since the initial public commit, but has no
effect.
Change-Id: Iae80ae22a363b3bd0e6cf7706619b38edc47790f
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Break a line before a close-brace. Added blank lines. Remove some
duplicate blank lines and spurious \fn directives. Fixed placement of
& between type and parameter name in the function declarations that
made these last redundant (these are the WS-only changes).
Change-Id: I7ee06a7cbb4f9cb275d5ad87246d8fbc9c9b6668
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
There are still users of QWeakPointer::data(), which under
certain compilers will make headersclean fail. So this
patch:
* ports data() to a private internalData() function and
calls it from all the usage points;
* adds cleanup notes for Qt 6, once some of the deprecated
machinery around storing unmanaged QObjects in QWeakPointers
can get removed.
Change-Id: Id3bcbd23374c18a2026861c08a4dcba1670673c1
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Mike Krus <mike.krus@kdab.com>
QFileDialog::DontUseSheet is obsolete since 4.5 and not used anywhere
inside the Qt code base. Mark it as deprecated and remove the last usage
in the examples.
Change-Id: If3d23fd5906314e6ebc7080efa79da14a2aa2720
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
The following enumerations were obsolete for a log time but not marked
as deprecated:
- WA_NoBackground
- WA_MacNoClickThrough
- WA_MacBrushedMetal
- WA_MacMetalStyle
- WA_MSWindowsUseDirect3D
- WA_MacFrameworkScaled
- AA_MSWindowsUseDirect3DByDefault
- AA_X11InitThreads
- ImMicroFocus
mark them as deprecated and remove the usage inside QtBase so they can
be removed with Qt6
Change-Id: Ia087a7e1d0ff1945286895be6425a6cceaa483fb
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
It's a dangerous API to have. Upgrade to a shared pointer
if accessing the raw pointer is required.
[ChangeLog][QtCore][QWeakPointer] The data() function has
been deprecated.
Change-Id: Ie5d34f4fb500b3cfa14d2c0b1b08484df072129c
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
The old code did not prevent concurrent writes to the LUTs by separate
threads, each finding lutsGenerated to be false.
Let's consider whether the change is safe now: the storeRelease(1)
comes before the QMutex::unlock(), but since it is release semantics
no writes may be ordered past it. We have two releases, and their
order doesn't matter, since nothing else happens in-between.
Could we use a normal relaxed store? No, because the unlock() of the
mutex only synchronizes with the lock() of the same mutex, which
doesn't happen if the loadAcquire() succeeds. For loadAcquire() to
happen-before a write to the luts, we need a storeRelease() on the
atomic.
So, everything is correct, and minimal.
But maybe, to save the next reader from having to do the same mental
exercise again, add a manual locker.unlock() in front of the
storeRelease()?
Again no: that opens a gap where the luts are already generated on T0,
and the mutex unlocked, but the atomic not set. If another thread T1
gets to execute the function, it will enter the critical section, then
writing new values to the LUT. Meanwhile, the T0 sets generate to true
and a T2 enters the function, sees the final write from T0 and starts
using the luts -> data race with the writes concurrently done by T1.
Change-Id: Id278812a74b6e326e3ddf0dbcbb94b34766aa52e
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Modern macOS accessibility is based on protocols.
By implementing NSAccessibilityElement we get warnings
for missing functions for the most basic accessibility
functionality.
Change-Id: I0595ea5b9927c5bfb4bbeff3fc9322cb1f232b9f
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
Following the introduction of AutoDeleteReplyOnFinishAttribute to
QNetworkRequest it seems natural to make it easy to enable for all
replies created with the current QNetworkAccessManager.
[ChangeLog][QtNetwork][QNetworkAccessManager] Added setAutoDeleteReplies
to QNetworkAccessManager to enable the AutoDeleteReplyOnFinishAttribute
attribute for all QNetworkRequests that are passed to
QNetworkAccessManager.
Change-Id: I7f96dd1fc9a899328e89732be17780b4e710c2a2
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Markus Goetz (Woboq GmbH) <markus@woboq.com>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
[ChangeLog][QtNetwork][QNetworkRequest] Added the
AutoDeleteReplyOnFinishAttribute attribute to QNetworkRequest, which
makes QNetworkAccessManager delete the QNetworkReply after it has
emitted the "finished" signal.
Change-Id: I03d4ac0830137882e51dd28795a8ec817762a300
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
The 'queue' was never used as a queue: it was populated, and then
exchanged into a local copy to be consumed in a loop. This loop used
dequeue(), but of course it could just const-iterate the container and
dump it as the end, since the member variable was already reset at
that point, no-one could tell the difference from the outside.
So, no need for a queue. A vector will do very nicely.
The loop now uses ranged-for and qExchange(), greatly simplifying the
code over the old version.
Add another qExchange() call as a drive-by.
Change-Id: I6147453dc9edfe9500833627b123bb3a31114651
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
This adds the shortcut to spinboxes and date edites.
Fixes: QTBUG-48231
Change-Id: I91400e1990e4b1d7d971198c1e2a64149c2a835e
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
QAbstractPrintDialog (a QDialog subclass) has an interesting
override of exec(): a pure virtual, without a body.
The UNIX subclass was therefore forced to override it, but
since it did not need to do anything with it, it had to call
QDialog::exec (bypassing the direct base, otherwise it
would cause a pure virtual call).
Eliminate the pure virtual override. This should be BC;
the layout of the vtable does not change, merely its contents.
Change-Id: I84ac23c938f1934f699df032ef1bde0d6df77784
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
The object is never copied, so there's no point in using a cow'ed list implementation.
Apart from the usual API adaptions (isEmpty() -> empty(), append() -> push_back()),
alse replaced two foreach-loops with ranged-for. The first one does not call into
out-of-line functions, and doesn't modify the container it iterates over, so is
safe.
The second does call into out-of-line functions, but they are const. The loop does
not modify the container it iterates over, either, so is also safe (except for some
fishy const_cast somewhere, or const being lost due to shallowness of const).
Also replaced explicit-iterator loops with ranged-for where possible.
Change-Id: I60b0f2d356846d527bfbaa6a0ecbb8395013b852
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
The object is never copied, so there's no point in using a cow'ed list implementation.
Also port two explicit-iterator loops to ranged-for, as one is necessary
(because of constBegin()) and the other is for consistency.
Change-Id: Ia7f080060d6b675a76b55d197af08161389082a9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Casting towards more derived classes is "downcasting",
not "upcasting".
Change-Id: I1373a073ba81fb2c2b77c35ac1916a53ce30b86c
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Add noexcept and honor the RO3 to silence warnings.
In theory this could also be constexpred, but there might
still be compilers we support that do not have constexpr initialization
for atomics...
Change-Id: Ibb94a2f4392908451cf7985d48f999581f03398d
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The internal QByteArrays are kept in a QList, so we can use
int to get the count. This matches what operator[] takes,
and gets rid of a bunch of warnings when iterating over a QByteData
using a plain int as a index variable.
Change-Id: Ib44d4101612135b976979a8464442e94706f8736
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This is a 1:1 replacement for std::exchange, and should be removed once
Qt fully depends on C++14. It's too versatile a tool to miss it, so
provide a copy.
[ChangeLog][QtCore][QtGlobal] Added qExchange(), a drop-in for C++14's std::exchange()
Change-Id: I31c4f1141e7a99f99ea65eb36ddf9d68b7847337
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This is in preparation of deprecating QLinkedList.
Change-Id: Id5018b7fbc89f8b76b86e97cd09d18b4b8cb6234
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The macro needed to avoid generating headers_*.o from the header files.
Change-Id: I4fc5ec2432661493e337e1779d79373dedff0132
Reviewed-by: David Faure <david.faure@kdab.com>
Add support for surrogate code points U+D800 through U+DFFF,
represent them with JSON escape sequences.
https://github.com/tc39/proposal-well-formed-stringify
Change-Id: I84fea53a8ef400beebefdba10ea82dc510fe7dda
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This is in preparation of deprecating QLinkedList.
Change-Id: I7540b784736a48cf4857d1969440d35ec64457e2
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Remove the bogus default constructor and copy special member function
of the structs there. They just disable move semantics and the
compiler will be happy to generate them for you when you let it.
These classes are all pure inline, so remove the export macros.
Last, not least, remove the broken assignment operator of
QVertexIndexVector. The copy constructor was implicitly declared, so
was doing something completely different (the correct thing, I might
argue), while the hand-rolled, useless op= checked this->t to check
which of the vectors to copy (instead of checking other.t, which it
later copies).
Change-Id: I696f01602e02c0ddb2e5348ec85fd2a622544226
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
As exported classes, their dtors should be out-of-line, lest we
can never add something to them afterwards.
Change-Id: I706281ca3fb285f9f00152f2e3fb34795699d69f
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The code meant to extract GLX_SAMPLE_BUFFERS_ARB, not GLX_SAMPLES_ARB,
which is read a few lines below.
Change-Id: Id50a1863cab56ed6084d4a2359a956a9db1222fa
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Make it noexcept and add an overload as a free function.
[ChangeLog][QtCore][QPointer] Added a free swap function.
Change-Id: I50744b9bae6a52db71b2da39e310619b3a0d6510
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Both in drawAndClipSpans(), as well as callee QSpanCollection::spansInRect(), a QSet is used
to ensure uniqueness of elements. In both cases, the QSet is converted to QList, and the list
is iterated over.
Just iterate over the QSet directly...
Change-Id: I8c7d17246a3cf836659026bfeadb987f37e476bb
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
AppKit will in some cases ask our view to display on secondary threads if
we call APIs that are only supposed to be called on the main thread, such
as -[NSOpenGLContext setView:] or -[NSOpenGLContext update].
Forwarding this display-request is bad, as QtGui expects all window system
events to come on the main thread, and we can easily deadlock client code
such as the Qt Quick threaded renderer.
Change-Id: I1daeabf1dca6ca8ba908d3998b444a2089681e3a
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Postpone the screen change until the DPI changed event in case a move
between screens with different DPI is detected.
Task-number: QTBUG-65580
Change-Id: I356f144b243d7d1ce7feabf0434c3f534b903965
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Andre de la Rocha <andre.rocha@qt.io>
When introducing EnableNonClientDpiScaling() for QTBUG-53255, the window
frame calculation was not adapted. That is, window frames were calculated
from the style for the primary screen only, causing
- minimum size constraints not being calculated correctly for applications
on secondary screens when populating the MINMAXINFO structure.
- warnings about not being able to apply a geometry when moving fixed
size windows across screens.
The calculation of the frames for propagating size hints is also no longer
required after 3035400f36, which retrieves
them from the WM_NCCALCSIZE message; QWindowsWindow::fullFrameMargins() can
be used instead.
For newly created windows, use the newly added AdjustWindowRectExForDpi()
function to calculate the initial frame size.
Change QWindowsGeometryHint from a class to a collection of static functions
and add overloads to calculate the frame.
In checkForScreenChanged(), update the margins until WM_NCCALCSIZE is
received.
Task-number: QTBUG-67777
Task-number: QTBUG-65580
Task-number: QTBUG-53255
Change-Id: Iff2d382b2b316adec6c1a0622ae8015dba6de371
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Andre de la Rocha <andre.rocha@qt.io>
Make these functions handle the case where a window spans multiple
screens, and high-DPI scaling is enabled, and the local position (in the
window) is not on the window primary screen (as returned by
QWindow::screen()).
This is done by detecting the case, and then calculating
the correct position using the native coordinate system.
[ChangeLog][QtGui] QWindow::mapToGlobal()/mapFromGlobal() now handle
windows spanning screens correctly.
Done-with: Friedemann Kleint<Friedemann.Kleint@qt.io>
Task-number: QTBUG-73231
Change-Id: I3c31b741344d9e85e4f5d9e60bae75acce2db741
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
We have not really been able to determine what the
default DPI should be, so make it configurable with
API on qtloader.js:
qtLoader.setFontDpi(72);
Also lowers the default DPI to the standard value of
96 (down from Qt default 100).
Task-number: QTBUG-75510
Change-Id: Ica1164c8d80bb06519233adebf2c9e400c0991ce
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
These declarations are provided for qdoc, but clang says they are the same:
template <typename Functor>
QMetaObject::Connection callOnTimeout(const QObject *context, Functor slot, Qt::ConnectionType connectionType = Qt::AutoConnection);
template <typename PointerToMemberFunction>
QMetaObject::Connection callOnTimeout(const QObject *receiver, PointerToMemberFunction slot, Qt::ConnectionType connectionType = Qt::AutoConnection);
clang accepts this one, but is it ok for the documentation?
template <typename MemberFunction>
QMetaObject::Connection callOnTimeout(const QObject *receiver, MemberFunction *slot, Qt::ConnectionType connectionType = Qt::AutoConnection);
Change-Id: I9d63b1bccfa8d73dbc17ab70c4415eb7891fbbe2
Reviewed-by: Martin Smith <martin.smith@qt.io>
Using NSScreen as the basis for tracking screens is not recommended, as
the list of screens can be added, removed, or dynamically reconfigured at
any time, and the NSScreen instance, or index in the NSScreen.screens array
may not be stable.
Quartz Display Services on the other hand tracks displays via a unique
display ID, which typically remains constant until the machine is restarted.
The lower level API also gives us earlier callbacks about screen changes
than the corresponding NSApplicationDidChangeScreenParametersNotification
does. By reacting to screen changes _before_ AppKit does, we can remove
workarounds for receiving window move and screen change notifications
before the screen was actually visibly reconfigured.
The new approach also handles changes to the primary screen, which
can happen if the user moves the menu bar in the macOS display
arrangement pane.
The device pixel ratio of the screen has been made into a cached
property, like all the other properties of QCocoaScreen. This is
more consistent, and allows us to qDebug the screen even when it
has been removed and we no longer have access to resolve the
properties from the associated Quarts display.
Change-Id: I2d86c7629ed3bf5fb8c77f174712633752ae4079
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
There are some cases (model resets in weird positions) where we would
crash due to accessing invalid model indices.
Fixes: QTBUG-61416
Fixes: QTBUG-71608
Change-Id: Ibfedcbd921a3145f3e1596ac424a77f2319a5c46
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>