<table><tr><td style="">tcanabrava created this revision.<br />Herald added a project: Konsole.<br />Herald added a subscriber: konsole-devel.<br />tcanabrava requested review of this revision.
</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/D15379">View Revision</a></tr></table><br /><div><strong>REVISION SUMMARY</strong><div><p>If you moved the tabs to splits in a way that you have a different<br />
number of tabs in each split, and started closing it, the count()<br />
of the tabs would be different and we would hit an assert.</p>

<p>The fix is simple: don't separate the logic between tabEmpty and<br />
tabDestroyed, if the tab is empty it will be destroyed but we can<br />
treat everything in the tabEmpty signal, this way we will never hit<br />
a dangling pointer.</p>

<p>Because of that it was possible that a splitView had a invalid<br />
activeWidget for a microsecond, when it's deleting itself, so<br />
instead of asserting if we have no active view, I choose to return<br />
a empty list of properties.</p></div></div><br /><div><strong>REPOSITORY</strong><div><div>R319 Konsole</div></div></div><br /><div><strong>BRANCH</strong><div><div>fixCloseTabSplitter</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D15379">https://phabricator.kde.org/D15379</a></div></div><br /><div><strong>AFFECTED FILES</strong><div><div>src/ViewContainer.cpp<br />
src/ViewManager.cpp<br />
src/ViewSplitter.cpp<br />
src/ViewSplitter.h</div></div></div><br /><div><strong>To: </strong>tcanabrava<br /><strong>Cc: </strong>konsole-devel, herrold, ngraham, maximilianocuria, hindenburg<br /></div>