From bfdd79d950db0fafc8ebd13f2d0f5db68b65725a Mon Sep 17 00:00:00 2001 From: Victor Nogueira Date: Wed, 28 Dec 2022 16:40:34 +0200 Subject: [PATCH] Avoid closing Task Terminals when JetBrains gets closed --- .../jetbrains/remote/GitpodTerminalService.kt | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/jetbrains/remote/GitpodTerminalService.kt b/components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/jetbrains/remote/GitpodTerminalService.kt index b1ad1af7d7ce32..b24211329cfc6a 100644 --- a/components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/jetbrains/remote/GitpodTerminalService.kt +++ b/components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/jetbrains/remote/GitpodTerminalService.kt @@ -4,8 +4,10 @@ package io.gitpod.jetbrains.remote +import com.intellij.ide.AppLifecycleListener import com.intellij.openapi.diagnostic.thisLogger import com.intellij.openapi.project.Project +import com.intellij.openapi.util.Disposer import com.intellij.util.application import com.jediterm.terminal.ui.TerminalWidget import com.jediterm.terminal.ui.TerminalWidgetListener @@ -267,15 +269,22 @@ class GitpodTerminalService(project: Project) { supervisorTerminal: TerminalOuterClass.Terminal, shellTerminalWidget: ShellTerminalWidget ) { - @Suppress("ObjectLiteralToLambda") - shellTerminalWidget.addListener(object : TerminalWidgetListener { - override fun allSessionsClosed(widget: TerminalWidget) { - terminalServiceFutureStub.shutdown( - TerminalOuterClass.ShutdownTerminalRequest.newBuilder() - .setAlias(supervisorTerminal.alias) - .build() - ) - } - }) + val listener = TerminalWidgetListener { + terminalServiceFutureStub.shutdown( + TerminalOuterClass.ShutdownTerminalRequest.newBuilder() + .setAlias(supervisorTerminal.alias) + .build() + ) + } + Disposer.newDisposable().let { disposable -> + application.messageBus.connect(disposable) + .subscribe(AppLifecycleListener.TOPIC, object : AppLifecycleListener { + override fun appWillBeClosed(isRestart: Boolean) { + shellTerminalWidget.removeListener(listener) + Disposer.dispose(disposable) + } + }) + } + shellTerminalWidget.addListener(listener) } }