Saves 327b in text size, but done mainly because such
functions shouldn't be inline in the first place.
Change-Id: Ieea97f13620e4411dc01cb0d390bd668c13cfa7a
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
...to turn mutable lvalues into const lvalues.
Like the proposed std::as_const, it should not apply to
rvalues to avoid lifetime issues in code like
for (auto x : qAsConst(someFunc()))
// dangling
At a more basic level, qAsConst isn't useful for rvalues,
because one can always store them in an lvalue first, with
no loss in performance (the object is created by the
compiler silently anyway). So the correct way to write the
above is:
const auto funcResult = someFunc();
for (auto e : funcResult)
To fail compilation when passing rvalues, I used the
const-&& pattern also employed by std::cref(), and the
proposed std::as_const.
Intended as internal API, but not put into the QtPrivate
namespace to make it simpler to use.
We could wait for std::as_const, but that is far, far
away (just entered the current C++17 draft as of this
writing), and the Qt containers with their tendency to
detach are a problem _now_.
Change-Id: I8824a59d2274de5c5cd642f117212322e4648025
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
It makes tst_QMutex::contendedQMutex with no msleep 8 times faster
Change-Id: Ic300e7618b4467e4e08b30f0213bd23c06d4d90a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The 'itemList' is a QList and is not maintained in sorted order.
Change-Id: I8f221281803ff0e9caa054007bee3058214f2f30
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The old code re-used a QFileInfo object, repeatedly
setting new file names with QFileInfo::setFile(QString).
But QFileInfo::setFile() simply assigns itself a
new QFileInfo object:
*this = QFileInfo(...)
so it's just as efficient to re-create a new QFIleInfo
object for every file name under test.
To avoid extra {} for object lifetime scoping, factor
the repeated evaluation of isReadable() && isFile()
into a small helper function, which also creates and
destroys the QFileInfo object.
The deeper significance of this change is that it
avoids implicit sharing of 'realname', which is
permanently modified. A later patch will make
changes that make 'realname' re-use its capacity
through the lifetime of the find_translation()
function, and sharing the variable implicitly will
nip any auch attempts in the bud.
Force the compiler to not inline the new function.
There's really no point in spending ~0.5KiB in text
size on inlining the code; the miniscule speed
improvement is dwarfed by the memory allocation of
the QFileInfo ctor, anyway.
As a consequence, this change even saves 96b in text
size on optimized GCC 4.9 Linux AMD64 builds, even
though that wasn't even the goal.
Change-Id: I08c5cbb7b6f1ba59440a1597e28d962ce63a7c65
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
... and remove misleading comments (these are overloads, not specializations).
The QList overloads do nothing different from the generic container
overloads. Remove them.
Only leave the QVariantList overload, because that converts to
QDBusVariant before serializing. Which means that this should
probably be templated on the container type, otherwise you get
different behavior for QList<QVariant> and, say, QVector<QVariant>,
which is surely wrong.
Change-Id: I215ba9891235b51304c2ed4041d3dbd003d69581
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
- populate the widget with addItems(QStringList) instead of
looping over addItem(QString)
- Use findText() instead of looping over itemText(int).
QComboBox::findText() delegates searching to the model
(via QAbstractItemModel::match()), so is potentially
much faster. I say potentially, because match() isn't
properly reimplemented in most models, yet. But that is
something to fix in the models.
Change-Id: I6e52cf5af810ab7869c0270504a241868a5ca281
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
To retain a bit compatibility with applications developed in the last 9
years that expect that QDBusConnections won't process their events until
the event loop runs, we now suspend the handling of incoming messages
in the two default buses (and only in them) and resume when the event
loop starts. This is required because the new threaded QtDBus would
otherwise process incoming messages that the application didn't expect
it to.
For example, if the application first acquires names on the bus and only
after that registers objects with QtDBus, there's a small window in
which the name is acquired and visible to other applications, but no
objects are registered yet. Calls to those objects may be received,
would then be processed in the QDBusConnectionManager thread and fail.
The work around is to disable the actual handling of method calls and
signals in QDBusConnectionPrivate::handleMessage. Instead, those
messages are queued until later.
Due to the way that libdbus-1 works, outgoing method calls that are
waiting for replies are not affected, since their processing does not
happen in handleMessage().
[ChangeLog][Important Behavior Changes] QtDBus now uses threads to
implement processing of incoming and outgoing messages. This solves a
number of thread safety issues and fixes an architectural problem that
would cause all processing to stop if a particular thread (usually the
main thread) were blocked in any operation. On the flip side, application
developers need to know that modifications to a QDBusConnection may be
visible immediately on the connection, so they should be done in an
order that won't allow for incomplete states to be observed (for
example, first register all objects, then acquire service names).
Change-Id: I39cc61d0d59846ab8c23ffff1423c6d555f6ee0a
Reviewed-by: David Faure <david.faure@kdab.com>
So we can do
connect(&watcher, SIGNAL(finished()), receiver, SLOT(foo()));
Change-Id: I39cc61d0d59846ab8c23ffff14241d33fecf2d53
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
They're never pending, since we add them immediately since commit
186d881440.
Change-Id: I39cc61d0d59846ab8c23ffff14241be6785ad5a0
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
- Instead of QString::split()-ing the path, just to inspect the
first item in the list returned, simply find the location of
the first separator and work with that.
-> saves creating a QList, and its QString elements
-> saves attempted detaches of that list when calling
first()
- When extracting the user name, don't do it in a QString, do
it in a QStringRef.
- When constructing the result, don't use QString::replace(),
use QStringBuilder with a QStringRef into the original string.
- Eradicate the out parameter, it is easily calculated from the
return value.
- Don't calculate userName on VXWORKS and INTEGRITY, where it
is not used. Requires a different #ifdef sequence. Fixed
preprocessor directives' indention as a drive-by.
Costs 84b in text size on optimized GCC 4.9 Linux AMD64 builds.
Change-Id: I61f1e8d558db7fb0c5c1170bdfd6f5ac1f1a9e62
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
In setStretchLastSection we restore a default section size
if we no longer use stretch. That size was however not
sufficient - we should restore the actual size.
Furthermore we should also always stretch the last section
(last visible index) - and not leave a section with a
huge size and stretch another.
This patch refactors stretch handling and keeps track
of the last section and its size in eg. moveSection,
swapSection, hideSection, showSection etc.
There is an auto test showing and guarding its behavior.
[ChangeLog][QtWidgets][QHeaderView] Fixed some issues
(e.g QTBUG-39010) with restoring of section size after
a section is no longer the last visible section
(in stretchLastSection mode).
Task-number: QTBUG-39010
Change-Id: Id47075b5a9dfeb250027374ecbd10eb8babbf9ef
Reviewed-by: David Faure <david.faure@kdab.com>
Both 'configuration' and 'pendingErrorStates' are
QSet<QAbstractState*>, so we can use QSet::operator-=
to subtract one from the other. No need to loop
over QSet::remove() here.
Nevermind that QSet::operator-= is really poorly
implemented atm. That needs to be fixed in QSet.
Change-Id: I3f3172ce9a485c4c2abf7d19b831fb0dc1ea61b1
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
These functions have no business being inline.
Change-Id: Ib565fb4870f886be133e9360155bd514935e5e72
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
A QStringList is almost as efficient as a QVector<QString>.
More importantly, the QStringList case can share code with
the myriad of other QStringList users, in particular
because std::stack is but the thinnest of wrappers around
its underlying container.
Saves more than 1KiB in text size on optimized GCC 4.9
Linux AMD64 builds.
Change-Id: Ia9c1f8b8c6d3b619f587a0cc0f662462d1b6bdc5
Reviewed-by: David Faure <david.faure@kdab.com>
Otherwise, connectInternal becomes a no-op after an initial connection attempt
has been made (making the socket effectively useless if that connection attempt
fails).
A workaround is to close() the socket, which worked by virtue of
QAbstractSocket's close() disconnecting (which ultimately calls
resetSocketLayer, and destroys the socket engine instance) - meaning that the
next connection attempt would have a fresh socks instance to try out the
connection with.
Reported-by: Gabe Edwards <gabe.edwards@me.com>
Change-Id: Iab1e84af6d4248fd75a6dfe5e79a3c73129aae0b
Reviewed-by: Richard J. Moore <rich@kde.org>
Screens connected to separate graphics cards are detected as
separate screens which don't have offset. This patch fixes obtaining
the screen number by QWidget: it uses the screen assigned to the root
widget. The patch also assigns a proper QScreen to each QDesktopWidget
screen().
It also fixes closing a popup menu by clicking on another screen.
Task-number: QTBUG-48545
Change-Id: I3d76261c0c067293d39949c4428b2d8dfd085dc7
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
This is especially necessary for the GHS toolchain which otherwise
chokes on the lack of some local definitions made by the
Q_DECLARE_SHARED macro.
Change-Id: Ie4e355226e4a66e1589e1d422d3a622b11bd9aef
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com>
In a non-const function, if (d), d being a QSharedDataPointer,
will resolve to if(d.data()), which detaches and returns a
pointer to an unshared copy of the data. Thus, the test if (d)
is always true.
Fix by explicit use of constData(), as in other QUrlQuery
functions.
Change-Id: Ib926abdcdb069d69e34c3202c4cf451b7fc6a329
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
A QByteArrayList is almost as efficient as a QVector<QByteArray>.
More importantly, the QByteArrayList case can share code with
the myriad of other QByteArrayList users, in particular
because std::stack is but the thinnest of wrappers around
its underlying container.
For moc, saves almost 1KiB in text size on optimized GCC 4.9
Linux AMD64 builds.
For qdbuscpp2xml, which re-uses moc code, saves ~1.6KiB.
Change-Id: I861e92b3c79e47e0ce892ccf54c9041182aaf212
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Receiving the QStringList return value through RVO instead of
move-assigning it saves 48b in text size on optimized GCC 4.9
Linux AMD 64 builds.
Marking the QStringList const saves another 112b because the
following first() doesn't need to attempt a detach.
Change-Id: If6f25399e80de12114ce41c557bff6ee8c24938b
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
We already include <utility> in <qglobal.h>, so we might
as well provide a qHash() overload for std::pair.
[ChangeLog][QtCore] Added qHash(std::pair), defined in
<QHashFunctions>.
Change-Id: I0f61c513e82e05ce9d2e56bcf18f3be9e2da4da9
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Since 7a42c8c15c QTestTablePrivate no
longer cleans up the memory it holds in dataList. This will make tools
such as valgrind/address-sanitizer generate a lot of noise about
directly or indirectly leaked memory.
Change-Id: Ic0900ecdd7b76cda9f5366f3950bccde2f1b244c
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com>
- Don't detach QCoreApplication::arguments() by calling first(),
call constFirst()
- Use
QString foo;
foo += initial;
instead of
QString foo = initial;
where 'foo' receives more appends later (does not force an
initial capacity that is known to be too small).
- Use QStringBuilder more
- Don't use QStringLiteral in QStringBuilder expressions
- Reserve optionNameList. Its max. size is known ahead of time.
- Don't create optionNameStrings for hidden options.
The result was never used, they just served as placeholders
for the lock-step iteration that followed and wrapped the text.
- Don't create a QStringList to join(), append to the result
string directly.
- Cache the return value of option.valueName().
Not only is this faster, it also saves more than 2KiB in text
size on optimized GCC 4.9 Linux AMD64 builds.
Change-Id: Id1d88f3c36a521ac71f3a7436810ed31319077ae
Reviewed-by: David Faure <david.faure@kdab.com>
... iterate over the hash directly.
Prevents hash lookups and the creation of a temporary QList.
Saves over 376b in text size on optimized GCC 4.9 Linux
AMD64 builds.
Change-Id: I7f1a22da33b94bc91bec89f62c471f8279a5d702
Reviewed-by: Sérgio Martins <iamsergio@gmail.com>
QList of pointers is optimum, but QVector should provide the same
performance (we aren't using the beginning-of-list feature that QList
has and QVector doesn't).
But since we're using QVector elsewhere, this should be better.
Change-Id: I39cc61d0d59846ab8c23ffff14241c6715e2eb00
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
This was documented, but not what the code did.
Task-number: QTBUG-48529
Change-Id: I4849778c61dcae13be27c62b24717693c0c07d78
Reviewed-by: Edward Welbourne <edward.welbourne@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
All but one of the callers sorted the list in at least one
code path, with code paths that use the list unsorted looking
suspiciously non-deterministic. The one caller that doesn't
sort the list doesn't use it at all (but uses the out parameter,
which none of the other callers do, suggesting that the function
be split into two at some point).
Change-Id: I178c1476919e4877ef4f4a3cc8934dbd04bd7a58
Reviewed-by: David Faure <david.faure@kdab.com>
Before this patch, Qt5Core_EXECUTABLE_COMPILE_FLAGS was populated with
-fPIC unconditionally. This causes warnings on MSVC, since the compiler
does not understand this flag.
In fact, -fPIC is only required in case an older release of CMake is
being used and the compiler is GCC 5.x (according to documentation), so
let's really add it just in this case.
Task-number: QTBUG-47942
Change-Id: I9d09b8b257a0647235d6d781ee5c023af34f8f88
Reviewed-by: Stephen Kelly <steveire@gmail.com>
... but use the new key_iterators instead.
Saves creating a temporary QList just to iterate over it
and ~1.3KiB in text size on optimized GCC 4.9 Linux AMD64
builds.
Change-Id: Id5223fc5fcb4a4e7c012718c1bb2674b8ea0439d
Reviewed-by: Sérgio Martins <iamsergio@gmail.com>
This will be used in QTextStream to speed up padding processing.
[ChangeLog][QtCore][QString] Added resize(int, QChar) overload.
Change-Id: Id51f8cdacb167310157100b05cacf20e9a5d2716
Reviewed-by: Topi Reiniö <topi.reinio@theqtcompany.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Calling QVector::erase(it) in a loop consitutes quadratic
behavior (O(N) function called O(N) times).
Fix by using std::remove_if(), which is linear.
Change-Id: I39c11231d604bc2d9506427bc3411b71d71b5569
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
resetTty() already does close the fd.
Fixes coverity CID89074.
Change-Id: I2d5fe9bf40b03ed5c249713c64f1dc2ae58ea84b
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
d->programGuard and its ID don't change when calling a
GL function, so check them only once, before entering
the loop, instead of once per iteration.
Cache d->programGuard->id().
Change-Id: I398da7a76823b2eb854b7b9d5af512adf9969fc9
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Fixes the xcb_glx plugin to follow the -opengl configure option for
default surface types. This makes it match closer to xcb_egl behavior
and makes the default match QOpenGLContext::openGLModuleType.
Change-Id: Iea3f8069fffefa46a32945eeeea1312566df129f
Task-number: QTBUG-50015
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Saves more than 2KiB in text size on optimized GCC 4.9 Linux
AMD64 builds, iow: ~0.5% of the total library size.
Change-Id: I84e1dc208da13eefdf1573c9b7ac7c9d76a7f5c7
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
This needs to be handled a bit carefully, because Qt containers
will detach upon being iterated over using range-for.
In the cases of this patch, that cannot happen, because all
containers are local and marked as const (either by this patch
or before).
Separate patches will deal with other situations.
Range-for loops are much more efficient than foreach loops.
This patch shaves ~1.8KiB of text size off an optimized Linux
AMD64 GCC 4.9 build.
Change-Id: I5c58658937ac4323594161bf94a2fce3c5667914
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
This needs to be handled a bit carefully, because Qt containers
will detach upon being iterated over using range-for.
In the cases of this patch, that trivially cannot happen, because
all containers are marked as const when being assigned the rvalues
previously found on the rhs of the Q_FOREACH. The new code thus
does exactly what the old code did: take a const copy, then iterate
over it.
Separate patches will deal with other situations.
Range-for loops are much more efficient than foreach loops.
This patch shaves almost 4K of text size off an optimized Linux
AMD64 GCC 4.9 build.
Change-Id: Ida868b77d078cbfa0516d17e98e6f0a86fcdb7a3
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Also marking the error path as unlikely while I am
on it.
Fixes coverity CID154482.
Change-Id: I069fa7753e364ff1b8a4449b7008dfa8aee73de5
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
If ev.isAccepted(), since list is gestures.toList(), the
first foreach loop would clear 'gestures', one item at
a time. The second foreach loop would then not execute
at all.
Make this case clearer by not executing either loop if
ev.isAccepted().
Make it more performant by not iterating twice, but once,
simply skipping those gestures in the second (remaining)
loop which would have been removed by the first one.
Also iterate over the equivalent QList instead of the QSet,
because the former is way more efficient.
Text size savings are present, but minimal. The runtime
savings are signficant, of course.
Change-Id: I3d5bfe99c5d3fcbe4c98816577846551c632f315
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
The old code dealt with a lot of special cases, probably to
avoid detaching. But the only case where deep copies are
avoided is if
a) there're no freeItemIndexes
b) there're no unindexedItems
c) the sort order is neither AcendingOrder nor DescendingOrder,
which is funny, since those are the only two values for
Qt::SortOrder. The code checks for SortOrder(-1), but
nowhere in Qt is such a sort order created.
Ergo, the deep copy was _never_ avoided.
So simplify the code by always building the result list from
the two input lists by copying all non-null items.
Saves over 2KiB in text size on optimized GCC 4.9 Linux AMD64
builds.
Change-Id: I8e739fb78896b2ad0bec45d05e86a76fe1ede04a
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
This patch makes possible to use Xinerama screens in XCB platform
plugin.
Task-number: QTBUG-48615
Change-Id: Ib4dbfcdfadc46d2875a2fc09e8b852181edfbed2
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
If the variant contains a known json type (value, array, object or
document), simply unwrap those. In the case of the json document
wrap the contained object/array into a QJsonValue.
This should be the expected behavior, and makes more sense than
returning a null QJsonValue.
Task-number: QTBUG-41234
Change-Id: Id084fc11220d51aaf78b7694fd0ebef1411f5c51
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Path normalization should happen only when NormalizePathSegments is set.
Use a less intrusive fix for the setPath("//path") issue that
commit aba336c2b4 was about.
This allows fromLocalFile("/tmp/.") to keep the "/." at the end,
which is useful for appending to the path later on (e.g. to get "/tmp/.hidden")
Change-Id: Ibc3d4d3276c1d3aaee1774e21e24d01af38fa880
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
If the environment variable is set, but points to a non-existing directory,
the user would get a warning about chmod failing. Better be clear and
warn about the fact that the directory itself doesn't exist.
Also warn if $XDG_RUNTIME_DIR points to a file rather than a directory.
Task-number: QTBUG-48771
Change-Id: If84e72d768528ea4b80260afbbc18709b7b738a8
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
In Qt3 this would indeed be equivalent to QHostAddress("0.0.0.0").
But since Qt4, it creates an address of type Null, and
QHostAddress()==QHostAddress("0.0.0.0") is no longer true.
Change-Id: I28025421e77c861783c612c2225be345dad5615a
Reviewed-by: Martin Smith <martin.smith@theqtcompany.com>
Iterate over the original list instead.
Change-Id: I7be154c0e19074033df6f6e01f68d21a8904d2ee
Reviewed-by: Andreas Aardal Hanssen <andreas@hanssen.name>
QTouchEvent::touchPoints() returns a const-&, but the old
code took a copy, over which it then iterated, modifying
the touch points, causing (necessary) detaches of both the
list and the touch points.
Befriend QTouchEvent and modify the list in-place, avoiding
all detaches in the likely case that QTouchPoint contains the
only copy of the touch point list.
This is all the more important as the function is called once
for every item-under-mouse in sendTouchBeginEvent().
Port to C++11 range-for as a drive-by.
Change-Id: I2f74d19845711d97e3566886123b5d18d55db74c
Reviewed-by: Andreas Aardal Hanssen <andreas@hanssen.name>
Helps pinning the vtable to a single TU, which can
prevent false negative RTTI (incl. dynamic_cast and
catch()).
But mostly because it's rather pointless to have dtors
of polymophic function inline. Most of the time, the
code will be called through the vtable indirection,
anyway (which also means that an out-of-line copy of
the code needs to exist in any case). The inline
method will only be used when the compiler can prove
the dynamic type of an object.
Saves ~1.5KiB in text size on optimized GCC 4.9 Linux
AMD64 builds.
Change-Id: Ic4ce96da559252c8abc29d880530c84035db2306
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
It should the the actual class name, without any suffix.
This also allows us to use the painter font when rendering
CE_HeaderLabel and, as a consequence, change QHeaderView's
font through the usual methods.
Change-Id: I0b13ee349f5fa505be66a9c884c26885f5fc468f
Task-number: QTBUG-33855
Task-number: QTBUG-37153
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@theqtcompany.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Currently the moc rule does not support dependency scanning, so after
successful moc file generation it will ignore implicit dependencies
in the header file.
Although this works in most typical scenarios, at least in one case
incremental builds become broken: when using Q_PLUGIN_METADATA() with
the FILE argument.
If FILE refers to a JSON file and latter was updated, then the expected
behavior is to regenerate the moc file. Since CMake add_custom_command()
does not support late dependency setup, all dependencies should be
explicitly listed in a DEPENDS section.
This patch adds the DEPENDS multiarg option to qt5_wrap_cpp(),
allowing to specify additional dependencies to the moc rule.
Task-number: QTBUG-44009
Change-Id: I2052ce23d3cb0c87c6bd99fcb7e8a71a7be9a330
Reviewed-by: Kevin Funk <kevin.funk@kdab.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Daniel Levin <dendy.ua@gmail.com>
This is more future-proof. It fixes the detection of 32-bit on ARMv8-A
processors since it uses the __ARM_ARCH macro that GCC and Clang
define. For MSVC, we use _M_ARM, which also contains the architecture
version. MSVC does not currently support ARMv8 code, but when it does,
this commit should make the support automatic.
I don't know which compiler defines __TARGET_ARM_ARCH, but support it
too.
Change-Id: I8de47ed6c7be4847b99bffff141c8ede54a849eb
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
When QT_VISIBILITY_AVAILABLE is defined, the zlib header would use
visibility("default") instead of Q_DECL_EXPORT, but Windows needs
dllexport for these symbols to be available to QtGui/QtNetwork.
In practice, Q_CORE_EXPORT always has the correct behavior for the
zlib symbols.
Change-Id: I7ab8080528e437260f822ac33e9e4334e2a0fdc8
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
The QMap<QByteArray, QString> was only used to hold key/value pairs
until they were serialized into a QString at the end of the function.
Serialize into QString directly instead, dropping the temporary QMap.
The problem is that we'd like to keep the line formatting central
while at the same time harnessing the power of QStringBuilder.
This is possible with a templated function with an input/output
parameter:
format_attr(QString &result, const char *key, T &&value)
format_attr(result, text-foo, str + str2 + str3);
Or with return type deduction:
formatted(const char *key, T &&value) -> decltype((expr)) { return expr; }
result += formatted(text-foo, str + str2 + str3);
I don't like out parameters, and we can't rely on auto return
type deduction, yet, so I opted for a miniature expression
template solution that can only match the expression
attr[key] = value;
where 'key' is a const char* and 'value' can be anything that
QStringBuilder supports. This allows to keep the syntax of a map
while at the same time serializing to QString immediately.
The only behavioral difference to the old code is that the
attributes are no longer sorted, but order doesn't matter.
Saves more than 10KiB in text size on optimized GCC 4.9 Linux
AMD64 builds.
Change-Id: I7b3bec0466ef24156c693adaa95f0316007e0bfe
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
This is private implementation, so there's no BC issue here.
The collections ported here also do not benefit from CoW,
because they are never copied.
Adapt to STL API and replace foreach with C++11 range-for
loops, because the former deep-copies STL containers.
Also replace index-based for loops with C++11 range-for,
to evade the int/size_t problem on MSVC.
Saves a bit more than 1KiB in text size on optimized GCC 4.9
Linux AMD64 builds, not all of which can be attributed to the
ports to range-for.
Change-Id: I240030180bd1b2ca40c002b03ab72319a99a87c3
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Factor out the dispatching of IO results into a separate function.
Do not increment the semaphore count in waitForAnyNotified just to
decrement it again in _q_notified.
Change-Id: I7d4a04b679bb152ab3a5025513f885aee276d086
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Drive-by changes:
- use auto for iterators
- add Q_UNLIKELY for conditions leading to a qWarning etc
Change-Id: Iff8f36d67c96674d354a501b26640f73c15ce58d
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Sérgio Martins <iamsergio@gmail.com>
This is the signature the functions have in C++11. For the std
containers, this is just convenience, but for Qt containers
with their implicit sharing problem, the combination of erase()
with constFind() can delay a detach until absolutely necessary.
[ChangeLog][QtCore][QHash/QSet] Added erase(const_iterator).
Change-Id: I2fc841c664cd7515b0f56fd7210fcd17c37f9014
Reviewed-by: David Faure <david.faure@kdab.com>
Clang's integrated assembler does not accept this assembler syntax, so
tell it to only run the preprocessor, and pipe everything through the
system assembler.
Change-Id: I6bd884473e634837b47480546a1d1d8d62e7a2b6
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
By making the destructor (usually the first non-inline, non-pure,
virtual function, and therefore the trigger for most compilers to
emit the vtable and type_info structures for the class in that TU)
out-of-line, vtables and, more importantly, type_info structures for
the class are pinned to a single TU. This prevents false negative
dynamic_cast and catch evaluation.
Since QGraphicsItemPrivate is already exported, users of this class
are unaffected by the change, and since it's private API, we don't
need to avoid adding code to the out-of-line destructor until Qt 6.
Also saves ~2.5KiB in text size on optimized GCC 4.9 Linux AMD64
builds.
Task-number: QTBUG-45582
Change-Id: Ibb404a43d5464e8e280ccebd5f95719852f5a986
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
It's a virtual function call, followed by another out-of-line
function, so the compiler cannot hoist the expression out of
the loop itself.
But we can, so do it.
Change-Id: Icffa6fa9a667d566b0829a18fea7128625e85920
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Vibrates the device or plays an alert sound on devices
that do not support vibration.
The other implementations of beep() have been moved to
QPlatformIntegration as a proper API instead of having
them as invokables in QPlatformNativeInterface.
Change-Id: Ic597dbef04b46d49862b070e78ddfc0d763829a2
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Reviewed-by: Kai Uwe Broulik <kde@privat.broulik.de>
Use the new reverse_iterator support in QList to
avoid building a QList with prepend()ing, using
append() instead.
Change-Id: Ia1f6d0ecc08a824f11d93a6fd4077b11b1b0f786
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Use the new reverse_iterator support in QList to
avoid building a QList with prepend()ing, using
append() instead.
Change-Id: I6b9d9b1a9941cf2e6cc39ad2d9097fdc629c24bc
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
There's no point in checking isEmpty() to prevent a for loop from
executing, esp. if the checking involves copying the container
and calling an out-of-line function to get said copy.
Just fall through the for loop.
Change-Id: If6c689ff4bcd685bc645b4fb3f2c15ce5d5945af
Reviewed-by: Sérgio Martins <iamsergio@gmail.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
- Do not save geometry when going from maximized->fullscreen
- Use SW_SHOWNA instead SW_SHOWNOACTIVATE as otherwise the
maximized geometry is restored.
- Add a test for Windows.
Task-number: QTBUG-49709
Change-Id: Ic81e7398ee90d499a50b02192a45cb09276a2105
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
When keys are pressed and the application becomes inactive before
they are released, the stored state becomes inconsistent.
Task-number: QTBUG-49930
Change-Id: Ide86b1d9052df060f30f7c02b81a4f2ae15d28e7
Reviewed-by: Oliver Wolff <oliver.wolff@theqtcompany.com>
Windows automatically disables DWM for opengl windows that have the
exact dimensions of the primary screen. This causes numerous issues,
such as menus and popups not showing up, and alt+tab misbehavior.
Adding a one pixel border via WS_BORDER solves all of these issues.
This is done by a QWindowsWindowFunctions to make it opt-in as turning
it on can cause an unwanted change in the look of the window so it is
up to the user to decide if they want this.
[ChangeLog][Platform Specific Changes][Windows] Add a function to
QWindowsWindowFunctions to enable working around a limitation with
showing other top level windows when showing a fullscreen OpenGL based
window.
Task-number: QTBUG-41309
Task-number: QTBUG-41883
Task-number: QTBUG-42410
Change-Id: I8c5c785f5024737cd034b2b703671632a8102700
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Use the macro we have that does exactly what we want without the boiler
plate code.
Change-Id: I25c67a71f83f91f50128c8a54033ee53ad28e88a
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
In certain cases we were still showing a cursor in a TextInput even
though the keyboard was hidden programmatically.
Change-Id: I48ebb6b8bc0382236b1ea5835e68eae48ece2b4f
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
If the focus object changed programmatically for example to the next
input field in a window, we want to keep the keyboard open. This
strangely only worked if the inputs had different IM hints because this
made the keyboard appear again.
Change-Id: I52e66bb7d2ff97ae7084173769d9b5c2d0c549b5
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
The edit menu will also close if the user taps outside it, not only
when selecting a menu item. But we never caught this case, which left
QMenu to belive that it was still open.
Change-Id: Iae071b4fc5fdc44d7d05b4dd767042907e337957
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
[UITextInput textInRange] is sparsely documented, but it turns out that
unconfirmed marked text should be seen as a part of the text document. This
is different from Qt IM (ImSurroundingText), which handles marked text on
the side. The reason we can assume this is that the range we are given
as argument to textInRange exceeds the documents length when having
marked text appended to the end, suggesting that it tries to read / verify
the current marked text. In addition, keyboards like Japanese-Kana will not
update and function correctly unless marked text is included.
Note that the docs seems to imply that you cannot have marked text and text
selection at the same time, unless the selection is contained within the
marked text (using the dedicated selectedRange argument to setMarkedText).
If this turns out to be incorrect, we might need to adjust the methods
dealing with selection to also include marked text as well.
Task-number: QTBUG-49946
Change-Id: Ifedd792ec66db435806f57fca157e1abbbf121a8
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
Delay the exit call until Java part finishes the execution.
We must be sure all the threads are stopped (hanged), when we
call exit, otherwise java thread will try to use static vars
that are freed by the qt thread.
We also need to call exit from Qt thread, otherwise Qt will complain
about it.
Change-Id: Ia1e7a4d7d56c39d38313f040aab618ec5a68dfb6
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
Implement the reading of the QT_QPA_EGLFS_PHYSICAL_WIDTH and
QT_QPA_EGLFS_PHYSICAL_HEIGHT as documented.
Change-Id: I862a03e9d05dcd15fb6a245c93ebd3e028de0c47
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Adds NEON version of interpolate_4_pixels used by smooth upscaling, and
bilinear sampling.
The SSE2 version is reordered to match the NEON version so they have
the same order of operations and a faster version that loads directly
into vector registers.
Testing is extended so we have a test of smoothness that can catch more
possible mistakes.
Change-Id: I0de4aecf5cb79468e7c8f19f421aa24b2955547c
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
Now that more of the raster operations are NEON-optimized this should
be acceptable. The switch enables antialiased drawing, and makes iOS
in line with other platforms in having QBackingStore backed by a QImage.
The use of QImage also allows us to remove code from the backingstore
implementation that was only needed to support the composeAndFlush
code path.
The common parts of a raster backingstore implementation have been
factored out into QRasterBackingStore in platformsupport, which can
be shared with more platforms in the future.
[ChangeLog][iOS] QBackingStore now uses the raster paint engine
instead of the OpenGL paint engine, enabling improved antialiased
drawing. In case of performance regressions, the old code path
can be enabled by setting the window's surface type to
QSurface::OpenGLSurface.
Task-number: QTBUG-35271
Change-Id: Ia300b9a5edf8dc0b4bfb99d84ed3c23a8523c267
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Quite obviously faster (doesn't need to populate a QList first,
just to iterate over it).
Also saves 1.5KiB text on optimized GCC 4.9 Linux AMD64 builds.
Change-Id: If4c7af80165a6027d39359bac22df30e7ca09815
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Saves ~0.5KiB in text size on optimized Linux AMD64 GCC 4.9 builds.
Change-Id: Iba2c02eed44f1ee3521bc49fe7afae9c2e916fdc
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Depending on the number of popped arguments, repeated
pop_front()s could turn quadratic even with QList.
Change-Id: I1f29af4a61f0f8e13253807d2f208c7911e71378
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
This needs to be handled a bit carefully, because Qt containers
will detach upon being iteratoed over using range-for.
In the cases of this patch, that cannot happen, because all
containers are marked as const (either by this patch or before).
Separate patches will deal with other situations.
Apart from being more readable, range-for loops are also the
most efficient for loop.
This patch shaves almost 2K of text size off an optimized Linux
AMD64 GCC 4.9 build.
Change-Id: I53810c7b25420b4fd449d20c90c07503c5e76a66
Reviewed-by: Edward Welbourne <edward.welbourne@theqtcompany.com>
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
This needs to be handled a bit carefully, because Qt containers
will detach upon being iterated over using range-for.
In the cases of this patch, that cannot happen, because all
containers are marked as const (either by this patch or before).
Separate patches will deal with other situations.
Range-for loops are much more efficient than foreach loops.
This patch shaves almost 3K of text size off an optimized Linux
AMD64 GCC 4.9 build.
Change-Id: I7b1d41db4d9b5db8b515cb75686dc5135177da68
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
When cleartype rendering was turned off, transforms would be
badly broken with the DirectWrite engine because we did not
implement the appropriate code path there. In Qt 5.6, this
would become especially visible, since DirectWrite is always
used when high-dpi scaling is enabled.
[ChangeLog][Windows][DirectWrite] Added transformation
support to DirectWrite engine when using grayscale antialiasing.
Task-number: QTBUG-49562
Change-Id: Ic5f7dd5b020a85ed1b6473c511a67cdb5ed5cedb
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Reviewed-by: Alessandro Portale <alessandro.portale@theqtcompany.com>
The code is using the same rasterizer for A8 and A32 glyphs,
in the former case it's just converting to grayscale afterwards.
Therefore, we need to pad the glyph cache with the same number of
pixels for both cases.
[ChangeLog][Windows][DirectWrite] Fixed clipping bug when rendering
unhinted text with grayscale antialiasing.
Task-number: QTBUG-49562
Change-Id: If85ff768451116278f6d2ccd1e77b5ce0664087d
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
1. Keep 'separator' a QLatin1String.
- saves at least two memory allocations
- necessitates carrying the \n previously prepended to it
around explicitly
2. Start adding to 'textToCopy' with op+=
- saves one allocation, costs one -> ±0
- preallocates more capacity than if we started with
assignment
3. Collapse three unconditional op+= into one
- more efficient usage of QStringBuilder
4. Don't collect button texts in a separate variable, but
append to 'textToCopy' directly.
- saves at least one memory allocation, probably more
since the growth increments of 'textToCopy' should
be larger (due to more content) than those of a new
variable.
Also replace index-based iteration over the buttons with
C++11 range-for over a const QList. Avoids the detach that
happened previously, due to use of op[] instead of at(),
but frankly, I was just too lazy to separate this change.
Change-Id: I27a46a6a163c16d773124f140e085325b17ce5d1
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Both specify 87 (invalid parameter) as error code for non existing
shared memory.
Change-Id: I02b02da106e9e4e574a21359c25bc2a03e385a7c
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Oliver Wolff <oliver.wolff@theqtcompany.com>
Change the QWindowsInputContext::composition if it is called
with lParam has flags GCS_RESULTSTR and GCS_DELTASTART,
it doesn't call endContextComposition.
Task-number: QTBUG-49955
Change-Id: I2035c4b3c1e947c5757d7532150798963fc39012
Reviewed-by: Tasuku Suzuki <stasuku@gmail.com>
Reviewed-by: Takumi ASAKI <takumi.asaki@gmail.com>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Andy Shaw <andy.shaw@theqtcompany.com>
Reviewed-by: Liang Qi <liang.qi@theqtcompany.com>
In tests with many data sets and init()/cleanup() functions, a significant
time is spent looking up the methods "init"/"cleanup"and the test methods
in qInvokeTestMethodDataEntry().
Introduce a class TestMethods that aggregates the optional methods and the
test methods as a std::vector<QMetaMethod>. Its method list can be populated
either by inspecting the QMetaObject or from the command line.
The class is instantiated on the stack.
Previously, 2 data structures existed for storing the methods to execute
obtained from the command line (array of class TestFunction and an exported
StringList testFunctions for QML).
Remove the custom TestFunction and use only the (QML) testFunctions list
for populating the new class.
Speeds up tst_QChar::normalization() from 340ms to 300ms on an average
Linux machine.
Task-number: QTBUG-38890
Change-Id: I80b488e7249ce031b6d6c8442e53aa87bd2edd42
Reviewed-by: Edward Welbourne <edward.welbourne@theqtcompany.com>
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com>
instead of an empty list.
Even if QBasicFontDatabase::fallbacksForFamily() returns an empty list ;)
Change-Id: Ib4a63e7898d2708737dd694f0629bdb68b2eb3a1
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Do not assume QBasicFontDatabase doesn't reimplement fallbacksForFamily()
and use the proper chaining instead.
Change-Id: I822d1902843a3a13517b7025761b88439fd75ced
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
Previously, the geometry stored for floating dock widgets
in QPlaceHolderItem::topLevelRect and QDockAreaLayoutInfo::saveState()
included the window frame (frame position/content area size).
This does not work in the case where a floating dock widget is deleted
since the geometry is determined after reparenting the widget when the
frame geometry is no longer available. Change the behavior to store
the geometry excluding frame to avoid such problems and adapt
QDockWidgetPrivate::setWindowState() accordingly.
Task-number: QTBUG-49832
Task-number: QTBUG-45780
Change-Id: I84b5c80df6e1c9e738bbb1407b9047cc84719ce0
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
when QCocoaWindow::setCocoaGeometry is called on windows embedded into a
native cocoa gui, QPlatformWindow::setGeometry does not apply the geometry.
we therefore need to set the frame on the embedded view manually.
related tasks:
Task-number: QTBUG-47632
Task-number: QTBUG-45269
Change-Id: I976e4606d36bb4afc74b0834105bceab8a6f8cbd
Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
The item to look up isn't modified, so take by pointer-to-const.
Can't change the API, so overload and mark the old function
for removal in Qt 6.
Change-Id: I4671c6b079687ec9d81b1ac0e6745887ef7077cd
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Add a const char * message with QDnsLookupRunnable's translation
context and use that for untranslated warnings and errorString.
Change-Id: I1b6c9fb259fb9ff824a0c3829b2c00c36aaecdfa
Reviewed-by: Richard J. Moore <rich@kde.org>
This caused issues in upstream tests that didn't expect to have their
geometry requests not being respected by the WM.
Task-number: QTBUG-49912
Change-Id: Iec99f341d81488de6026f04c99dff45a0d3f8587
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Add QWindowsNativeInterface::nativeResourceForCursor() and
implement for Windows (returning the HCURSOR) and XCB (returning
the xcb_cursor).
Task-number: QTBUG-49386
Change-Id: I963869f6e8741449822ecbe6489f9c42a786c7a6
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
Store nativeWorkingDirectory in a variable on the stack to prevent
accessing the buffer of a temporary string.
Fix breakage introduced by 068baa9bb6.
Change-Id: I8cf9ffe39c97afc9383c33cafaeffb1245b3e2b9
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
When calling WaitForMultipleObjectsEx, do not use a
timeout for the initial call. This saves around 10%
of blocking invocations in the QEventLoop autotests.
Change-Id: Ib24436ed11de1865e31f9ff0ddf6ce1bc5562f42
Reviewed-by: Andrew Knight <andrew.knight@intopalo.com>
Reviewed-by: Oliver Wolff <oliver.wolff@theqtcompany.com>
"-ServerName:" is only used for Visual Studio and causes bad side-
effects when using QCommandLineParser.
Change-Id: Ifef652bbb65df9279a39ae3c74ddbb563c87bd90
Reviewed-by: David Faure <david.faure@kdab.com>
Reviewed-by: Andrew Knight <andrew.knight@intopalo.com>
Reviewed-by: Oliver Wolff <oliver.wolff@theqtcompany.com>
Equality and inequality were already marked nothrow, but
less/greater than (or equal) were not.
Fixed.
Change-Id: I3f7a3388b31fcaa2535353f357b5bd1fc86f261d
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Since special files have file size == -1, they were always filtered
out by QFileSystemModel, even when passing QDir::System as filtering
option. Keep them instead.
The testcase is more convoluted than it should be because QFSM
is so broken that it returns valid indexes for invisible elements
in the model (such as filtered out elements).
Change-Id: I023a9813dbfeed7be99dded42c66b1191afdc17e
Task-number: QTBUG-20968
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Change-Id: I8636993571b04d8cda74708777ba3ef2bac09fb5
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
Without this, the symbol list is frequently reallocated. The value
is a guestimate. It corresponds to a block of memory with the size
262144 * 3 * 8 byte = ca. 6.3 megabytes
on a 64 bit machine. Looking at the final size of the symbol list,
this seems to fit the common case nicely.
Change-Id: Ib546a1ea479f2c6d8ab57be783cdf630f9b54f77
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
The pixman drawhelpers are implemented using GAS syntax, which the
Clang assembler doesn't handle, nor do they work on 64-bit ARM, so
we disable them selectively. They are only used for 16-bit surfaces
anyways, so it not a big deal on iOS.
(cherry picked from commit 49568df954)
Change-Id: I70848981c794739d40a6a2d9a537307bc80d61a6
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
If no screens are available, windows could disappear, could stop rendering
graphics, or the application could crash. This is a real use case in several
scenarios: with x11vnc, when all monitors are physically disconnected from a
desktop machine, or in some cases even when the monitor sleeps. Now when the
last screen is disconnected, it is transformed into a fake screen. When a
physical screen appears, the fake QScreen is transformed into a representation
of the physical screen. Every virtual desktop has its own fake screen, and
primary screens must belong to the primary virtual desktop. It fixes updating
screen geometry on temporarily disabled screens in the middle of the mode
switch.
Expected results: Windows don't disappear, the application doesn't
crash, and QMenu is displayed on the appropriate screen.
This reverts patch 51ada7734a
Change-Id: I6e8eb682b0c8425d08ffdaecbd4c6c7700c914b4
Task-number: QTBUG-42985
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
QXcbWindow::m_xcbScreen was introduced in 4e1b09fa8f
(Keep screen geometries from overlapping) to map the window
geometry for the right screen, because it wasn't possible to
rely on QPlatformWindow::screen().
But we don't need it since a705b4ec1f
(Introduce cross platform high-dpi scaling), because QGuiApplication
triggers GeometryChangeEvent right after processing WindowScreenChangedEvent.
So just use QPlatformWindow::screen() instead of cached m_xcbScreen.
m_xcbScreen was also used in d4bc56cb42
(Fix screen detection on configureNotify) to compare the new screen
after receiving ConfigureNotify to the correct old screen. Just send
WindowScreenChangedEvent event and leave making the comparison to
QGuiApplication.
Change-Id: Ibe717ae4bf4c40b0a04cd62fe2ecaee5df5f4060
Reviewed-by: Błażej Szczygieł <spaz16@wp.pl>
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
Recent changes to the main file accidently removed the
parameter from the call.
Change-Id: I4cce48327d43d9ea3fe4fd82c2f5768aa4bc6d5c
Reviewed-by: Andrew Knight <andrew.knight@intopalo.com>
Graphics effects may exceed the window size, causing platform
backing store operations to fail (see QWidgetPrivate::effectiveRectFor()).
Task-number: QTBUG-49785
Change-Id: Iff16da599397d19acb86010fe7023f3ce15b6d6f
Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
MSVC doesn't define float versions for _isnan/_isfinite, so the double
versions need to be used. This is already done in the surrounding
functions, but not in these two.
Change-Id: Ic183358dc1790279e18d00a08b7279e76c02af60
Reviewed-by: Oliver Wolff <oliver.wolff@theqtcompany.com>
NSColors can be quite complex and store patterns, gradients, dynamic
system colors that change based on global state (!), etc. QBrush is a
better equivalent to it than QColor.
Change-Id: I4b66a1ab85342bbb9efcf78011965ec74e5fc738
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
OpenFileMappingFromApp has been added for Windows 10. Using it,
QSharedMemory autotests succeed without any failure.
Change-Id: I5a4fbec004f121f41909ae13f3db02c384810645
Reviewed-by: Andrew Knight <andrew.knight@intopalo.com>
Change-Id: Ia4dbb2e3b055a7899c4a3e02698c5776ea7f73ea
Reviewed-by: Mike Krus <mike.krus@kdab.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Starting with Qt 5.7 we removed support for API < 16 (Android v4.1)
[ChangeLog][Android] Support for Android API < 16 was removed.
Change-Id: I8bf396a9d70ab0996965e0c9f629800aa1fa6a45
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
For example:
../../include/QtGui/5.7.0/QtGui/private/../../../../../../../../qt5-dev/qtbase/src/gui/painting/qpaintengine_blitter_p.h:67:18: warning: 'end' overrides a
member function but is not marked 'override' [-Winconsistent-missing-override]
Change-Id: I2845d8e4b5a7e11c57ac1933a6d152df1ef5d07f
Reviewed-by: Jake Petroules <jake.petroules@theqtcompany.com>
By calculating the previous geometry and passing it on when calling
handleGeometryChange we can detect cases where setGeometry() on a
QWindow didn't result in the expected geometry. The new (actual)
geometry is delivered as a resize event.
This also allows us to only send expose events when the size of the
window has actually changed (instead of also sending when the window
has just moved).
Due to the async delivery of geometry changes on the xcb platform we
need to avoid using QWindowPrivate's cached state of the geometry, as
that will result in duplicate resize events when events are not flushed
in between two system resize events coming in with the same size.
Change-Id: I3d4abe4a1095dd96e6e354288d5b646c623c30dd
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
For certain devices vci->resolution is zero, which causes a SIGFPE
if FE_INVALID exceptions are enabled. Try to prevent that.
Task-number: QTBUG-42717
Change-Id: I388735f5dfb6218496787dbb74cf0c0f43cc928f
Reviewed-by: Alexander Volkov <a.volkov@rusbitech.ru>
Reviewed-by: Błażej Szczygieł <spaz16@wp.pl>
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
... otherwise we would not detect subsequent file/directories added
into the non-removed one.
Change-Id: I43018dfb9a9c6c0399190800da3f0d572ec5d8d8
Task-number: QTBUG-49307
Reviewed-by: David Faure <david.faure@kdab.com>
[ChangeLog][QtCore][QProcess] Added method
setCreateProcessArgumentsModifier to QProcess on Windows to enable
users to intercept and modify CreateProcess parameters.
With such a modifier, calling code can decide whether to inherit
handles, modify the STARTUPINFO struct, and pass its own
combination of process flags to CreateProcess.
Task-number: QTBUG-390
Task-number: QTBUG-6917
Task-number: QTBUG-9350
Task-number: QTBUG-24619
Change-Id: I14757dbbacfebb1c89f52402d36fba0ba9c45f3a
Reviewed-by: Björn Breitmeyer <bjoern.breitmeyer@kdab.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
We need to pass the correct connection and we need a specialization for
reply pointers. Also, there is not much of a point in first creating
a QString from a QByteArray, only to retrieve a QByteArray again.
Change-Id: Ia1bb5655f6229638e3bd2339acadeffc80561b9e
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
When a QLineEdit is readonly there's a discrepancy between key press
events and shortcut override events. For instance, presses Ctrl+C
copies the text unless there's also a shortcut for the same key sequence.
In this case, the shortcut override event is not handled, and no text
is copied. Fix it by splitting the handling of shortcut override
events between "read only" access (copy, select, etc.), which still
makes sense on a read only line edit, and write access (paste, ...)
which doesn't.
[ChangeLog][Important Behavior Changes][QLineEdit] QLineEdit will
now accept certain shortcut override events even if it is read only.
Change-Id: Ie5b048259b99a1eff0581129e3ad97f27a88fe86
Task-number: QTBUG-21217
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
This allows QML Menu, Dialog & SystemTrayIcon to use the same enums
without having to duplicate them.
Change-Id: I1401583d3ae2ef07cdc795d2765fba07c9b30f2f
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
The documentation says that we scroll one pixel, but changing the
behavior in 934f062203 to do that
was not well received.
People were relying on the undocumented behavior - and the new behavior
was considered to be a regression. (Nobody called setSingleStep since
Qt in many cases provide a reasonable singleStep - which implied that their
programs scrolled with 1 pixel which was quite slow). Furthermore getting
the old behavior (auto set of single step) was nearly impossible.
However the revert (done in 0e69230d02)
gets us back to QScrollbar::setSingleStep not working in pixel scroll mode
(even without it being documented - but we should also have a working API
rather than documenting that it is not working)
The previous approach was directly prevented Qt from changing
single step (on e.g resize) at all. This patch only prevents Qt from
changing when a user explicitly has called the function
QScrollBar::setSingleStep (in pixel scroll mode).
That is we expect that calls to setSingleStep means that the user actually
wants to set the singleStep and doesn't want Qt to control that value.
Furthermore it is possible to switch back to the automatically adjusted
singlestep with QScrollBar::setSingleStep(-1).
[ChangeLog][QtWidgets][QAbstractItemView] QTBUG-7232 - In ItemViews
when scrollMode is set to scrollPerPixel, it is now possible to
change the single step. Qt will automatically adjust the single step
until setSingleStep is called. When setSingleStep is called it will
however respect the set and stop doing automatic changes of the value.
Calling setSingleStep(-1) will switch mode back to automatic adjust.
Task-number: QTBUG-7232
Change-Id: Ibfe0caa9751d3bcc11bfc6e0654a3d1ac35ac8ae
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
The pixman drawhelpers are implemented using GAS syntax, which the
Clang assembler doesn't handle, nor do they work on 64-bit ARM, so
we disable them selectively. They are only used for 16-bit surfaces
anyways, so it not a big deal on iOS.
Change-Id: I78417fabd7f671f9c5d94b6e5fa5ce10d3fc1d27
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
We have to call Exit() to successfully close an application as done in
25dcc90d79. Unfortunately Exit() always
sets the exit code to 1 and this cannot be changed programmatically.
Hence write the exit code into the pid file which is created when
launched via winrtrunner. winrtrunner then fetches the content and
passes the exit code to its callee. This implies that the pidFile is
not deleted by the app itself anymore.
Task-number: QTBUG-38654
Change-Id: Ib9b6ae4a0d61c9bf7e530e984aae3ad6204c39a0
Reviewed-by: Oliver Wolff <oliver.wolff@theqtcompany.com>
CFBundleCopyExecutableURL returns different URLs (can be absolute or relative)
for the same bundle (caching) - and this results in an
invalid encodedProgramName (in case we try to start the same process twice),
for example, if we start: QProcess p; p.start("nestedDir/nested.app")
twice, the second time we'll have an error trying to start something like
nestedDir/nested.app/_and_here_absolute_url.
Change-Id: I8ac42e20fe3b9fe8b80d5b5c663672e77d88269d
Task-number: QTBUG-49837
Reviewed-by: Jake Petroules <jake.petroules@theqtcompany.com>
Before this change, it was checked if the path ends with "Compose", which was
an invalid assumption as the file can have any name (see [1])
This replaces the check with a check for any existing file (which wasn't
checked before).
[1] http://www.x.org/releases/X11R7.7/doc/man/man5/Compose.5.xhtml
Done-with: Florian Bruhin <git@the-compiler.org>
Task-number: QTBUG-41557
Change-Id: If4fb58d4c1ed695f2d611236abfe97964b548678
Reviewed-by: Gatis Paeglis <gatis.paeglis@theqtcompany.com>
Use QDebugStateSaver, drop the multiline format, check for null, empty and
output rectangular regions as:
QRegion(0,0 252x188)
and complicated regions as:
QRegion(size=4, bounds=(0,0 278x262) - [(0,0 278x13), (0,13 13x188), (265,13 13x188), (0,201 278x61)])
Change-Id: I82b8f58af08f7128e6cf2c2c8b06c4684fc6a9c8
Reviewed-by: Shawn Rutledge <shawn.rutledge@theqtcompany.com>
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
Qdoc gave warning "Cannot link this to anything"
Task-number: QTBUG-43810
Change-Id: Id903040ed7b2860a2ec64a52f7fbe8269c6927b0
Reviewed-by: Martin Smith <martin.smith@theqtcompany.com>
Reviewed-by: Topi Reiniö <topi.reinio@theqtcompany.com>
This allows to use readDatagram on WinRT like on
any other platform, ie using two arguments.
Fixes compilation in auto-tests.
Change-Id: I4a6e34dc72d2845faab9067ce67800d8b386c344
Reviewed-by: Oliver Wolff <oliver.wolff@theqtcompany.com>
When showing an edit menu on iOS, UIKit will always populate
the menu with actions according to what the current first
responder supports. But it doesn't make sense to show all the
actions every time the menu opens, so introduce some filtering
depending on selection state.
Change-Id: I943a09928233a3a10de003fe15ed8fd8b6fc1e18
Reviewed-by: Markus Goetz (Woboq GmbH) <markus@woboq.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
Now that we don't populate the edit menu from qtquickcontrols
anymore (because of shortcut issues), report to UIKit that
we support select so that the action shows in the menu.
Change-Id: I92508da4e1789c361d778cc6c1c77c86308f4c73
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
Replace hide() call (present in itemViewKeyboardEvent since Qt 4.5)
by reject(). Add signal spy to existing test function.
QDialog doc states that reject() will always be called on Key_Escape.
hide() is not enough: it makes exec() terminate and return the proper
value, but the signals finished(int) and rejected() will not be sent.
Task-number: QTBUG-7690
Change-Id: Ica4ae2843574478c5b9a7672f871f3ef3f16f3c9
Done-with: Jan Blumschein <jan@jan-blumschein.de>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
First tries OpenGLES 3 context since it’s strictly compatible with
OpenGLES 2. If it fails, then try 2.
This is required to use QOpenGLFramebufferObject::blitFramebuffer
without having to look at using an Apple-specific extension.
Change-Id: I01f8f058fa82e7f2c90d1b894ad36f3d3939c994
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
Otherwise, the first font from the list is used ("Algerian" or similar),
making the widgets/richtext/textedit example look bad.
Change-Id: Ia5bb8879f167fef7ad7e81611760ee042abf8da3
Reviewed-by: Oliver Wolff <oliver.wolff@theqtcompany.com>
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@theqtcompany.com>
d79ae90466 accidentally removed the check
on the driver pointer before dereferencing it. This causes a segfault
when deleting a result object after its driver has already been deleted.
This situation can arise when a database is removed, explicitly or
probably also upon unloading the driver plugin, while related
results still exist. The problem affected
qttools/tests/auto/qhelpcontentmode.
Task-number: QTBUG-49836
Change-Id: I8ce8f8a5e27d787309ac2ff644b388e333d76435
Reviewed-by: Mark Brand <mabrand@mabrand.nl>
... because it's useful for non-primitive types.
Except for index-based loops, these were the only two
remaining instances in QtBase.
Change-Id: I0fafa502d78a70f98b4a90f4d3c7fdfbb401a90f
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
If the LHS is detached and has existing capacity that is large
enough to hold the RHS, re-use the memory instead of allocating
a new buffer and throwing away the old.
Change-Id: I53d42825da92c264c7301e8e771cba9fb35c321b
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
The code for _q_clipboardChanged comes from some ancient time
(Qt 3's QLineEdit::clipboardChanged, subsequently refactored in Qt 4
and Qt 5). The best part: it has always been a slot doing absolutely
nothing. Get rid of it.
Change-Id: Icc2c71920377d069529bb7ed7c40c15f46fbb455
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Like on some BSD systems, the member of the ifreq
structure is called ifr_index and not ifr_ifindex
on Haiku OS.
Change-Id: I273de0c703b1c89dbac537c68e52db219d2da50e
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Since the commit 9f83e75d3fbfc01a5ca8d87b4c33ca1ad848387d we can build
the release packages with Q_ASSERTs still enabled. As this feature was
targeted to embedded platforms it would be nice to enable Q_CHECK_PTR
macro as well.
Change-Id: I2d549d92b7196935665d927e6aaed3e9f31593b1
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
[ChangeLog][QtCore][State Machine] Added constructor overload that
takes a pointer-to-member for the QSignalTransition.
Change-Id: I80ac6e16d0edf7d2ab09882b6f6db4cbd73364e1
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
... and simplify it:
De-duplicate ++c by moving it from every case into the
switch statement, undoing it only in the default case.
Introduce a small helper function can_consume() for dealing
with the two-letter length modifiers.
Also return the result from each case instead of storing
it in a temp variable.
Change-Id: I28a527920aabba067ebb2152a67995c8f2ec7ae7
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Fixes output like
plugin cannot be loaded for module "QtWebEngine": Cannot load library D:/dev/qt/5.6/msvc-2015-32/qtbase/qml/QtWebEngine/qtwebengineplugind.dll: The specified procedure could not be found.
Change-Id: I159113a6a1f40b924905da15267a42e5b627d56e
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Commit 64a1448d87 (Qt 5.2) caused
QNetworkInterface to report address labels (a.k.a. interface aliases) as
separate interfaces. This is caused by the fact that glibc, uClibc and
MUSL copy the address label (netlink address attribute IFA_LABEL) to the
ifa_name field, which made QNetworkInterfaceManager think that it was an
interface it hadn't yet seen.
Address labels are the old way to add more than one IP address to an
interface on Linux, for example:
ifconfig eth0:1 192.0.2.2
Those do not create a new interface, so the "eth0:1" label maps to the
same interface index as the parent interface. This has been deprecated
for 10 years, but there are still tools out there that add addresses in
this manner.
This commit restores behavior compatibility with Qt 4.2-5.1. The Qt
5.2-5.5 behavior is incorrect because it reports more than one interface
with the same index. On systems configured like the above, the
tst_QNetworkInterface::interfaceFromXXX test was failing.
Change-Id: I8de47ed6c7be4847b99bffff141c2d9de8cf7329
Reviewed-by: Richard J. Moore <rich@kde.org>
It should compile, since the std::shared_ptr does.
[ChangeLog][QtCore][QSharedPointer] Fixed a problem that would cause a
compilation error when constructing a QSharedPointer of a const type
when the type derives from QEnableSharedFromThis.
Task-number: QTBUG-49748
Change-Id: I8de47ed6c7be4847b99bffff141c84f5e0b6bea8
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>