Fix crash on close
Review Request #118839 - Created June 19, 2014 and submitted - Latest diff uploaded
Move code responsible for 'forgetting' a view outside of code responding to the TerminalDisplay deletion. This avoids a loop like this: ~MainWindow => ~QStackedWidget => ~TerminalDisplay => QObject::destroyed => ViewContainer::viewDestroyed => ViewContainer::removeViewWidget - internal cleanup - try to remove TerminalDisplay from QStackedWidget which is being deleted and crash Instead the code now does: ~MainWindow => ~QStackedWidget => ~TerminalDisplay => QObject::destroyed => ViewContainer::viewDestroyed => ViewContainer::forgetView (does the internal clean up) And if one tries to explicitly remove a view, sequence is: ViewContainer::removeView => ViewContainer::forgetView => ViewContainer::removeViewWidget The patch also removes ViewManager::focusActiveView() because it causes a crash when closing a TerminalDisplay as it tries to put the focus on the deleted TerminalDisplay. I initially called it through a queued connection, but realized it is actually not needed for focus to be passed to the correct view, so just removed it.
Started and closed Konsole, created and deleted tabs, created and deleted split views. No crash.