<table><tr><td style="">cfeck created this revision.<br />cfeck added a project: Frameworks.
</td><a style="text-decoration: none; padding: 4px 8px; margin: 0 8px 8px; float: right; color: #464C5C; font-weight: bold; border-radius: 3px; background-color: #F7F7F9; background-image: linear-gradient(to bottom,#fff,#f1f0f1); display: inline-block; border: 1px solid rgba(71,87,120,.2);" href="https://phabricator.kde.org/D5821" rel="noreferrer">View Revision</a></tr></table><br /><div><strong>REVISION SUMMARY</strong><div><p>According to bug 353380, KViewStateSerializer::restoreScrollBarState() calls QScrollBar::maximum() on an invalid (i.e. already deleted) scrollbar. This means, the enclosing QAbstractScrollArea has been deleted between the call to ::restoreScrollState() and the deferred (via a single shot timer) ::restoreScrollBarState().</p>

<p>This bug had already been reported against the kdelibs4 KViewStateSaver as bug 328755. The commit there (comment #9) was not forward-ported to KWidgetsAddons, but also was not effective, evidenced by the more recent comments.</p>

<p>The actual cause (i.e. the view is destroyed before the state saver) could probably also be fixed in the calling code, but according to LXR, there are many users of ETMViewStateSaver, and I got confused about the comment at <a href="https://lxr.kde.org/source/kde/pim/korganizer/src/akonadicollectionview.cpp#022" class="remarkup-link" target="_blank" rel="noreferrer">https://lxr.kde.org/source/kde/pim/korganizer/src/akonadicollectionview.cpp#022</a></p>

<p>This commit works around the issue by allowing users to delete the view immediately after ::restoreScrollState() was called.</p></div></div><br /><div><strong>REPOSITORY</strong><div><div>R236 KWidgetsAddons</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D5821" rel="noreferrer">https://phabricator.kde.org/D5821</a></div></div><br /><div><strong>AFFECTED FILES</strong><div><div>src/kviewstateserializer.cpp</div></div></div><br /><div><strong>To: </strong>cfeck, Frameworks<br /><strong>Cc: </strong>mlaurent<br /></div>