Bug 437825 - FormLayout spills errors when items are removed from the model
Summary: FormLayout spills errors when items are removed from the model
Status: CONFIRMED
Alias: None
Product: frameworks-kirigami
Classification: Frameworks and Libraries
Component: general (other bugs)
Version First Reported In: 5.82.0
Platform: Other Linux
: NOR normal
Target Milestone: Not decided
Assignee: Marco Martin
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-05-29 10:49 UTC by Alexander Stippich
Modified: 2021-12-14 21:35 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed/Implemented In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Alexander Stippich 2021-05-29 10:49:59 UTC
SUMMARY

In the Skanpage application (https://invent.kde.org/utilities/skanpage) I use the Kirigami.FormLayout to display all scanner options. These options depend on the scanning device that is opened and are removed and re-added when a new scanning device is selected. Removing the option items generate a large amount of errors in Kirigami.FormLayout. There are no visible issues and the FormLayout continues to work as expected.
I suspect that it is due to the items of the model being deleted, which is probably not handled in the FormLayout? Corresponding QML code is at https://invent.kde.org/utilities/skanpage/-/blob/master/src/OptionsWindow.qml

STEPS TO REPRODUCE
1. Open Skanpage
2. select a scanning device if needed
3. reselect a scanning device

OBSERVED RESULT

Kirigami.FormLayout spills errors.

EXPECTED RESULT

No errors generated
Comment 1 Alexander Stippich 2021-05-29 10:52:15 UTC
The QML errors are of following nature. In total, there are about 1300 errors when a scan device is reselected during my testing

file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:375: TypeError: Cannot read property 'Kirigami' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:377: TypeError: Cannot read property 'Kirigami' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:382: TypeError: Cannot read property 'Kirigami' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:384: TypeError: Cannot read property 'Kirigami' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:237: TypeError: Cannot read property 'Kirigami' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:373: TypeError: Cannot read property 'enabled' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:374: TypeError: Cannot read property 'visible' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:380: TypeError: Cannot read property 'Kirigami' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:260: TypeError: Cannot read property 'Kirigami' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:117: TypeError: Cannot read property 'Kirigami' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:401: TypeError: Cannot read property 'Kirigami' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:322: TypeError: Cannot read property 'Layout' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:323: TypeError: Cannot read property 'Layout' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:325: TypeError: Cannot read property 'Layout' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:326: TypeError: Cannot read property 'Layout' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:328: TypeError: Cannot read property 'Layout' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:329: TypeError: Cannot read property 'Layout' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:332: TypeError: Cannot read property 'Layout' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:333: TypeError: Cannot read property 'Kirigami' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:316: TypeError: Cannot read property 'enabled' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:317: TypeError: Cannot read property 'visible' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:320: TypeError: Cannot read property 'implicitWidth' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:321: TypeError: Cannot read property 'implicitHeight' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:375: TypeError: Cannot read property 'Kirigami' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:377: TypeError: Cannot read property 'Kirigami' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:382: TypeError: Cannot read property 'Kirigami' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:384: TypeError: Cannot read property 'Kirigami' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:237: TypeError: Cannot read property 'Kirigami' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:373: TypeError: Cannot read property 'enabled' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:374: TypeError: Cannot read property 'visible' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:380: TypeError: Cannot read property 'Kirigami' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:260: TypeError: Cannot read property 'Kirigami' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:117: TypeError: Cannot read property 'Kirigami' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:401: TypeError: Cannot read property 'Kirigami' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:322: TypeError: Cannot read property 'Layout' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:323: TypeError: Cannot read property 'Layout' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:325: TypeError: Cannot read property 'Layout' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:326: TypeError: Cannot read property 'Layout' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:328: TypeError: Cannot read property 'Layout' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:329: TypeError: Cannot read property 'Layout' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:332: TypeError: Cannot read property 'Layout' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:333: TypeError: Cannot read property 'Kirigami' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:316: TypeError: Cannot read property 'enabled' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:317: TypeError: Cannot read property 'visible' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/org/kde/kirigami.2/FormLayout.qml:320: TypeError:
Comment 2 Alexander Stippich 2021-08-02 17:15:34 UTC
Ok, so I think I've found the source of the problem.
The relayoutTimer function adds new children to the knownItems, buddies arrays etc., but never removes them in case a child gets deleted. So the knownItems etc. still contains pointers to invalid items in case a child is removed.