From 0bec01bfb48e5ed149c7d439dd4ae967fbea6ed1 Mon Sep 17 00:00:00 2001 From: Filippo Scognamiglio Date: Wed, 7 Jan 2026 23:19:49 +0100 Subject: [PATCH] Handle closing tabs and windows when shell process is terminated. --- app/qml/PreprocessedTerminal.qml | 3 ++- app/qml/TerminalContainer.qml | 2 ++ app/qml/TerminalTabs.qml | 6 +++++- app/qml/TerminalWindow.qml | 1 + 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/qml/PreprocessedTerminal.qml b/app/qml/PreprocessedTerminal.qml index a270a72..6ef5cb9 100644 --- a/app/qml/PreprocessedTerminal.qml +++ b/app/qml/PreprocessedTerminal.qml @@ -28,6 +28,7 @@ import "utils.js" as Utils Item{ id: terminalContainer + signal sessionFinished() property size virtualResolution: Qt.size(kterminal.totalWidth, kterminal.totalHeight) property alias mainTerminal: kterminal @@ -126,7 +127,7 @@ Item{ id: ksession onFinished: { - Qt.quit() + terminalContainer.sessionFinished() } } diff --git a/app/qml/TerminalContainer.qml b/app/qml/TerminalContainer.qml index 07400ef..60cc4a3 100644 --- a/app/qml/TerminalContainer.qml +++ b/app/qml/TerminalContainer.qml @@ -25,6 +25,7 @@ import "utils.js" as Utils ShaderTerminal { property alias title: terminal.title property alias terminalSize: terminal.terminalSize + signal sessionFinished() property real devicePixelRatio: terminalWindow.screen.devicePixelRatio property bool loadBloomEffect: appSettings.bloom > 0 || appSettings._frameShininess > 0 @@ -44,6 +45,7 @@ ShaderTerminal { PreprocessedTerminal { id: terminal anchors.fill: parent + onSessionFinished: mainShader.sessionFinished() } function activate() { diff --git a/app/qml/TerminalTabs.qml b/app/qml/TerminalTabs.qml index 0c87d36..8f741a2 100644 --- a/app/qml/TerminalTabs.qml +++ b/app/qml/TerminalTabs.qml @@ -28,6 +28,7 @@ Item { readonly property size terminalSize: stack.currentItem ? stack.currentItem.terminalSize : Qt.size(0, 0) property alias currentIndex: tabBar.currentIndex readonly property int count: tabsModel.count + property var hostWindow function addTab() { tabsModel.append({ title: qsTr("Tab %1").arg(tabsModel.count + 1) }) @@ -35,8 +36,10 @@ Item { } function closeTab(index) { - if (tabsModel.count <= 1) + if (tabsModel.count <= 1) { + hostWindow.close() return + } tabsModel.remove(index) if (tabBar.currentIndex >= tabsModel.count) { @@ -109,6 +112,7 @@ Item { Layout.fillWidth: true Layout.fillHeight: true onTitleChanged: tabsModel.setProperty(index, "title", title) + onSessionFinished: tabsRoot.closeTab(index) } } } diff --git a/app/qml/TerminalWindow.qml b/app/qml/TerminalWindow.qml index 53559a6..ddc584b 100644 --- a/app/qml/TerminalWindow.qml +++ b/app/qml/TerminalWindow.qml @@ -152,6 +152,7 @@ ApplicationWindow { id: terminalTabs width: parent.width height: (parent.height + Math.abs(y)) + hostWindow: terminalWindow } Loader { anchors.centerIn: parent