diff --git a/src/ViewManager.cpp b/src/ViewManager.cpp index 9585e2c5..92d2951f 100644 --- a/src/ViewManager.cpp +++ b/src/ViewManager.cpp @@ -494,9 +494,9 @@ void ViewManager::sessionFinished() return; } - // The last session/tab? emit empty() so that close() is called in - // MainWindow, fixes #432077 - if (_viewContainer->count() == 1) { + // The last session/tab, and only one view (no splits), emit empty() + // so that close() is called in MainWindow, fixes #432077 + if (_viewContainer->count() == 1 && _viewContainer->currentTabViewCount() == 1) { Q_EMIT empty(); return; } diff --git a/src/widgets/ViewContainer.cpp b/src/widgets/ViewContainer.cpp index dda01316..291de84a 100644 --- a/src/widgets/ViewContainer.cpp +++ b/src/widgets/ViewContainer.cpp @@ -144,6 +144,15 @@ ViewSplitter *TabbedViewContainer::viewSplitterAt(int index) return qobject_cast(widget(index)); } +int TabbedViewContainer::currentTabViewCount() +{ + if (auto *splitter = activeViewSplitter()) { + return splitter->findChildren().count(); + } + + return 1; +} + void TabbedViewContainer::moveTabToWindow(int index, QWidget *window) { auto splitter = viewSplitterAt(index); diff --git a/src/widgets/ViewContainer.h b/src/widgets/ViewContainer.h index 3cbacf2c..8e0a0986 100644 --- a/src/widgets/ViewContainer.h +++ b/src/widgets/ViewContainer.h @@ -135,6 +135,12 @@ public: */ ViewSplitter *viewSplitterAt(int index); + /** + * Returns the number of split views (i.e. TerminalDisplay widgets) + * in this tab; if there are no split views, 1 is returned. + */ + int currentTabViewCount(); + void connectTerminalDisplay(TerminalDisplay *display); void disconnectTerminalDisplay(TerminalDisplay *display); void moveTabLeft();