| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This was especially noticeable when a Repeater was populating the
children of a layout, and its model was dynamically changed: When the
model was changed, the repeater removed one item at a time until all
items were removed, then applied the new model and then added all the
new items for the new model.
The layout reacted to that by doing a full sync of the QML layout into
the internal gridlayout engine each time an item got removed or added.
For very large layouts (or layouts that have complex size hints to
calculate), this caused a major slowdown.
This patch fixes that by postponing the sync until we get a
updatePolish(), basically replacing most calls to updateLayoutItems()
(which does the sync) with a call to invalidate() (which schedules a
polish). It will also get rid of some binding loop warnings due to this
change.
This means that there is a small change in behavior:
impicitWidth, implicitHeight and Layout.{min,max}imum{Width,Height}
might in some cases be incorrect until the updatePolish() have been
done. (This is however consistent with how Row/Column/Grid behaves)
The creation test in qmlbench was quite simple, so it did not suffer
from the most severe performance issues, but we did not regress:
> compareresults:
auto/creation/layouts/delegates_rowlayout.qml: improvement by 3.91%
auto/creation/layouts/delegates_columnlayout.qml: improvement by 6.59%
auto/creation/layouts/delegates_gridlayout.qml: improvement by 1.83%
Overall average of differences: 4.11%
And for the gridlayout_large.qml (Repeater with 1000 dynamically
changing items):
> compareresults:
auto/layouts/gridlayout_large.qml: improvement by 66477.78%
Overall average of differences: 66477.78%
[ChangeLog][Qt Quick Layouts] Performance improvements to Qt Quick
Layouts. This has the small side-effect that size hints
(implicitWidth/implicithHeight etc) changes are not immediately emitted
after a layout has been modified (e.g item added)
Fixes: QTBUG-71839
Fixes: QTBUG-65121
Fixes: QTBUG-66017
Change-Id: I6922efe449134246df66b177992e4442747bc8fb
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
(cherry picked from commit cc77a0bc549ce8f0b218661e7ae0e82e5b89e0da)
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
I found this quite useful for debugging layouts in order to get a snapshot of
the layout hierarchy at any point. It will show the hierarchy and the relevant
properties that affect the layouting. It's basically QObject::dumpObjectTree()
specialized for Qt Quick Layouts (except it will dump it as QML-ish).
For the leaf nodes it will leave out unspecified information.
Example on how a dump looks like:
RowLayout {
// Effective calculated values:
sizeHintDirty: 1
sizeHint.min : [ 100, 20]
sizeHint.pref: [ 100, 20]
sizeHint.max : [ inf, 20]
RowLayout {
// Effective calculated values:
sizeHintDirty: 1
sizeHint.min : [ 100, 20]
sizeHint.pref: [ 100, 20]
sizeHint.max : [ inf, 20]
Rectangle {
implicitWidth: 100
implicitHeight: 20
}
Rectangle {
implicitHeight: 20
Layout.fillWidth: true
}
}
}
Change-Id: Ie2fcd56d522395cb9d6f55a1ea3f882a7a9da709
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
(cherry picked from commit e0a03d04f8880d81e0c1fec909e5892ae685af71)
|
|
|
|
|
|
| |
Change-Id: I4db3ebb02a5b541ca8e50e65b9056d398570e331
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
(cherry picked from commit 5728f48834b9225a36d3e1dae44ced7579cde358)
|
|\
| |
| |
| |
| |
| |
| | |
Conflicts:
src/qml/jsruntime/qv4engine.cpp
Change-Id: I61f41672e2dfe7e542ca30fed5f173d0a9ee3412
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This happened because of that QQuickText is ill-behaving: When the width
on a QQuickText with word wrap enabled is changed to something less than
its implicitWidth, its implicitHeight is changed to reflect the height
it needs in order to fit all lines. This will cause the layout to be
invalidated, and rearranged again.
However, at the same time it will also change its implicitWidth actually
become wider than its initial implicitWidth (this seems to be a bug). So
the next time it is rearranged it will actually be wide enough so that
it doesn't need to wrap. This again will cause its implicitWidth and
implicitHeight to change to reflect that only one line is needed, which
again will cause it to rearrange, but since the item has a too small
width for that it will again change the implicitHeight to reflect that
it needs more lines.....
This went on forever until there was a stack overflow. In addition it
also caused an endless (that is, if it didn't stack overflow)
updatePolish()/polish() loop (basically polish() was called from within
updatePolish() continuously).
To make the layout more robust for such "ill-behaving" items we have to
add one recursion guard, and one polish-loop guard.
Change-Id: I9f752ed320a100c8d0f0fd340347a556e63318e5
Task-number: QTBUG-73683
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Add unused volatile pointers to the type registration functions in each
import plugin. We need to do this in order to prevent the linker from
optimizing the registration away. There are two ways for this to happen:
When linking statically, the linker will examine the referenced symbols
on a per-object base and leave out all unreferenced objects. When
linking dynamically, the linker may do the same on a per-library base
and drop any unreferenced libraries from the dependencies. Forcing a
reference to the type registration function prevents both.
The volatile technique allows us to remove the previous qCDebug() hack.
Having an unused volatile auto variable should only result in a single
memory read as runtime overhead. The qCDebug() technique would generate
a read and a block of mostly dead code (as no one would ever use that
logging category).
Fixes: QTBUG-81622
Change-Id: I255667276dfd355b19baa17b1aad3db406bf1954
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
|
|\|
| |
| |
| | |
Change-Id: I88e94fe3398a59f10c5a8b142204db5f3ccb2657
|
| |
| |
| |
| |
| |
| |
| | |
Found by a valgrind warning of an unintialized jump.
Change-Id: I24279c97042e1971eaff35c3363fc1250e5c6c6e
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Now that we can generate all QML type information at build time, we
should also use it.
Move the types for QtTest into the testlib import plugin. They don't
need to be exported from QtQuickTest.
Trigger the resource initialization of the shapes library from the
plugin so that we retain a dependency and the linker doesn't optimize
the module initialization away.
Change-Id: Icc8cb338aa03ef1e3085e29356a5db7b73ba0a01
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
|
| |
| |
| |
| |
| |
| |
| | |
Amends 744e77b841878fb017c0f2d60607090008f28180.
Change-Id: I6f7192982c38346e7fc525600d3fddebff294d2f
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
|
| |
| |
| |
| |
| |
| |
| | |
Amends 744e77b841878fb017c0f2d60607090008f28180.
Change-Id: I16e37aaf503eb62f67fca0e48be4c92c4a72ae46
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
It is being deprecated.
Change-Id: I844bd92af85bc53a8fc0371408d05277bd49f511
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
|
|\|
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
src/qml/qml/qqmlextensionplugin.cpp
tests/auto/quick/qquicktableview/tst_qquicktableview.cpp
Change-Id: Ic58d36a8532015bae30f2690063db9829b3bf372
|
| |
| |
| |
| |
| |
| |
| |
| | |
We now print a warning and try to gracefully handle it
Change-Id: I66e79fe918808f5fede78a23df50e9e95b7b832d
Fixes: QTBUG-67204
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
|\|
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp
tests/auto/quick/qquickloader/tst_qquickloader.cpp
Change-Id: I85fd38cfa00cd60197a1c981bfcc16fcb896cfe9
|
| |\
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Conflicts:
.qmake.conf
src/qml/common/qv4compileddata_p.h
src/qml/types/qqmlbind.cpp
tests/auto/qml/qqmlproperty/tst_qqmlproperty.cpp
Change-Id: I6a137907e63445f17a3d6181b832a6bd76135bb2
|
| | |
| | |
| | |
| | |
| | |
| | | |
Change-Id: I3ac473b3d46ff1f898c1607deb6ad3d586753244
Fixes: QTBUG-79359
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
|\| |
| | |
| | |
| | | |
Change-Id: I1359574c7d89aaf3328958e2f667ba1e599ff7f1
|
| |\|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Conflicts:
src/plugins/scenegraph/openvg/qsgopenvgcontext.cpp
tests/auto/quick/qquickpathview/tst_qquickpathview.cpp
Change-Id: I117c8d62b21800329d1035021d312d9924f83a1b
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
- erroneous link to Controls1
- put qtquickcontrols before qtquickcontrols1 in depends statement
Task-number: QTBUG-78799
Change-Id: I8107d9f23660e37c742a588b0efc38ac336babeb
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Using this technique we can automatically register all necessary
revisions and minor versions of a type, using the metaobject system.
This greatly reduces the potential for mistakes and resulting
incompatibilities between versions of imports.
We assume that for each type we need to register all revisions of its
super types and its attached type, and that the revisions match. That
is, if you import version X of type A, you will also get version X of
its attached type and of any super types. As we previously didn't take
these dependencies into account when manually registering the types, a
number of extra revisions are now registered for some types.
Potentially, we can now generate the qmltypes files at compile time,
using moc.
Change-Id: I7abb8a5c39f5e63ad1a0cb41a783f2c91909491b
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
|/
|
|
|
|
| |
Change-Id: I9e470d08ee93c44663e6f99cebe7817c90cba3e4
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
|
|
|
|
|
| |
Change-Id: I16820387279ca616af6ab379874c247c83df4a2f
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
|
|
|
|
|
|
|
|
| |
Task-number: QTBUG-73484
Change-Id: I089f5122817a4da1fce13f55d2975240d741b9f6
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
|
|
|
|
|
|
|
|
|
|
|
| |
It wasn't clear which values would be used when only a horizontal or
vertical flag was set.
Change-Id: I99b4a13a87b35a74f1ab80c5fafa9df621bf7b10
Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
(cherry picked from commit a484ea0d3666b57bb49e9284ff86af3ba87ce58b)
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
|
|
|
|
|
|
|
|
| |
Several implementations of registerTypes method contains misleading
Q_UNUSED(uri) but actually uri is used in it.
Change-Id: I34faf4f15cd0f1b60c76f077cdbe5af631d4c8e1
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
|\
| |
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
src/imports/settings/qqmlsettings.cpp
src/quick/items/qquickwindow.cpp
tools/qmlplugindump/main.cpp
Change-Id: I96fedbc773a110374baed79a0b7de92d65df0ed6
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
It's common for users to bind to these properties and think that it's a
bug that it doesn't work, so we should make the note in the docs more
strongly worded and elaborate a bit.
Change-Id: I82c8d5644ed81cc616a3035f489344a491ea5a66
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
by running
cd qtdeclarative/imports; for path in `find . -name Makefile -print`; do pushd `dirname $path`; make qmltypes; popd; done
in the build directory. Local file paths in the command line
were then edited out by hand.
Task-number: QTBUG-70264
Change-Id: I931604aff6a779915708395e8b8dbdf659cbd637
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
|\|
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
src/quick/items/qquickloader.cpp
tests/auto/quick/qquickanimations/tst_qquickanimations.cpp
Change-Id: I0cb9f637d24ccd0ecfb50c455cc210119f744b02
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
A layer effect is apparently considered a child item of the layout
that manages the item, and this causes issues when layouting.
As was done for positioners in 865b4ec8, exclude
any items for which QQuickItemPrivate::isTransparentForPositioner()
returns true from layouting. As that commit made QQuickItemLayer set it
to true when the layer is enabled, QQuickShaderEffectSource will be
excluded from layouting.
Task-number: QTBUG-63269
Change-Id: I463ff8d0cea0dfd6c4273f376de347971040d3d0
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
|
|/
|
|
|
|
|
|
|
| |
After commit be9a56e5e3ced5d0d668fa24e4c65ae928f2e25a in qtbase, this is
not needed anymore. Instead the resource system injects the plugin entry
point with a reference to all resources.
Change-Id: I7275029bd4c15eda6bb8c2ab7ae8c1cd3933aedb
Reviewed-by: Robin Burchell <robin.burchell@crimson.no>
|
|
|
|
|
|
|
|
|
| |
Since commit 214fbaa57b73296a0 the latest minor version of the
import is automatically the Qt minor version, so let's also document
this.
Change-Id: I4131a399cca7c66b0e9df549f14be43eeaa94af3
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Now it should always be possible to do
import QtQuick.Module x.m
where x is the module's major version and m is Qt's minor version.
[ChangeLog][QtQuick][Important Behavior Changes] In Qt 5.11 and newer
versions, QML plugin modules are available with the same minor version
as the Qt release minor version number. For example it's possible to
import QtQuick.Window 2.11 or import QtQuick.Layouts 1.11
even though there haven't been any API changes in these modules for Qt 5.11,
and the maximum possible import version will automatically increment
in future Qt versions. This is intended to reduce confusion.
Change-Id: I0d28ed04d186bcdd5acde95b8ed0b66c1c4697e3
Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
From now on we prefer nullptr instead of 0 to clarify cases where
we are assigning or testing a pointer rather than a numeric zero.
Also, replaced cases where 0 was passed as Qt::KeyboardModifiers
with Qt::NoModifier (clang-tidy replaced them with nullptr, which
waas wrong, so it was just as well to make the tests more readable
rather than to revert those lines).
Change-Id: I4735d35e4d9f42db5216862ce091429eadc6e65d
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
|
|
|
|
|
|
|
|
|
| |
- Use the more explicit term "manage" to make it clear that the warning
only applies to items that are direct children of a layout type.
- Instruct users towards the proper way to position items within a
layout: Layout.alignment.
Change-Id: Id13af95457a689e41aeaead1f9a0f958f095fca9
Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
|
|
|
|
|
|
|
|
|
|
|
| |
Do not warn if they don't actually pose a problem, such as having just
anchors.margins: 42
in a layout child item (as demonstrated by the test)
Change-Id: I01e4515e91d7d0df3ae6bf9061cebe5c51802998
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
|
|
|
|
|
|
|
|
|
| |
We get several bug reports due to this mistake. Print a warning about
it and that it *might* eat your cats.
Task-number: QTBUG-63303
Change-Id: I0b1ae21dc4419efee88623765a8d6dd302fbc1f4
Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
|
|
|
|
|
|
|
|
|
|
|
| |
Instead of misusing implicitWidth/Height as a storage mechanism in
scenarios where width/height is used for preferred size evaluation,
new members are created to hold this information to prevent incorrect
sizing in mentioned scenario and get rid of blocking signals.
Task-number: QTBUG-57455
Change-Id: I102c45805c4106e5829b17b65c2e247b2381573f
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
|
|
|
|
|
| |
Change-Id: I176f91a8c51e81a2df3fe91733118261491223ee
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
| |
Change-Id: I84e363d735b443cb9beefffd14b8c023a37aa489
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The first fix for QTBUG-51927 (59c6c0e0) went to 5.6.2, where only the
SiblingOrder ChangeType was listened to by QQuickLayout. It was then
cherry-picked to 5.7 (5149aa68), where SiblingOrder was still the only
ChangeType in use.
3b4f00ec then optimized QQuickLayout by swapping connections for item
change listeners, but didn't check for usages of change types elsewhere
in the file.
This patch moves the change types into a variable that ensures there
is one place for future changes. 5.6 is not affected.
Task-number: QTBUG-51927
Change-Id: Ifd6e0545ce543ab79d6415e007b35c457cacc83a
Reviewed-by: Robin Burchell <robin.burchell@crimson.no>
|
|\
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
src/quick/util/qquickutilmodule.cpp
tools/qmllint/main.cpp
Change-Id: Ic2283f88c293ca7fc776de3e83eb4c7812309d8a
|
| |
| |
| |
| |
| |
| | |
Task-number: QTBUG-57867
Change-Id: I0190b892e2bc2966b82a0dbd99e53fd9d6848957
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
|
| |
| |
| |
| |
| | |
Change-Id: Ibedd0d0c23cf194ea02a229ab643450dbefd40aa
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| | |
The last remnants were removed from qtbase in 5.7 making this all dead code,
so match here too.
Change-Id: I10f3f1c614562f2a97ade7cdf5002065d6f79e07
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
We now have file & line number information pointing us to the location of the
faulty child. Also take the effort to split the message into two, so
it's clear which property is faulty (and which the value is
representing).
Change-Id: I8e515feeaf8fa1decf8aaf7adf0a02cce7aec0ea
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The attached isRowSet and isColumnSet check for values >= 0, and
row/column getters also enforce a minimum return value of 0, so it is
impossible for us to get a negative value for row/column if either of these is
set -- and we can simply call the getter and rely on it to return 0 in
the unset case.
Change-Id: Iec80e7d7cf3738cf0a81e90b027ffe41e0f57369
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
|
| |
| |
| |
| |
| | |
Change-Id: Ie16508d22554c9b6dcd66adf6a59f32117edf1e3
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
|
|\|
| |
| |
| |
| |
| |
| | |
Conflicts:
.qmake.conf
Change-Id: I9d87ed86e95b5901a86cc3aa65d7ac39b0b708c2
|