Do not crash when removing children from hidden layouts
authorJan Arve Saether <jan-arve.saether@digia.com>
Thu, 21 Aug 2014 08:57:23 +0000 (10:57 +0200)
committerFrederik Gladhorn <frederik.gladhorn@digia.com>
Wed, 3 Sep 2014 14:21:58 +0000 (16:21 +0200)
commita76f0ca34fde78ac64300b8bf9a75b5e1c1b6b51
tree56e8580f13c0927a6606589de30317e3324df113
parent9d0c5e5f4f8c233f8424ef2fb2b440b07fe85594
Do not crash when removing children from hidden layouts

The problem was that the proxy items (QQuickGridLayoutItem) that was
added to the layout was not removed when a child item got deleted from
a hidden layout. The proxy item therefore ended up having a dangling
pointer to the deleted item.

The solution is to also update the layout with a new list of items
even when the layout is hidden. This will also fix a problem with that
size hints was not correct when layouts were hidden.

Note that the test included has an expected failure. This is because
the case it tests is not very common and the problem is shared with
positioners. The problem stems from the fact that a layouts implicit
size should change when a child item is changed from implicitly hidden
to explicitly hidden. Unfortuntately, QQuickItem does not notify about
such changes.

This is a problem independent of this crash patch fix, and I would like
to address that in a separate commit.

Change-Id: I67ac28b9d08208432559622c9cd412e24b197b32
Task-number: QTBUG-39045
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@digia.com>
src/layouts/qquicklinearlayout.cpp
tests/auto/controls/data/tst_rowlayout.qml