Bug 437825

Summary: FormLayout spills errors when items are removed from the model
Product: [Frameworks and Libraries] frameworks-kirigami Reporter: Alexander Stippich <a.stippich>
Component: generalAssignee: Marco Martin <notmart>
Status: CONFIRMED ---    
Severity: normal CC: nate
Priority: NOR    
Version First Reported In: 5.82.0   
Target Milestone: Not decided   
Platform: Other   
OS: Linux   
Latest Commit: Version Fixed/Implemented In:
Sentry Crash Report:

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.