diff --git a/plugins/terminal/frontend/src/com/intellij/terminal/frontend/toolwindow/TerminalToolWindowTab.kt b/plugins/terminal/frontend/src/com/intellij/terminal/frontend/toolwindow/TerminalToolWindowTab.kt index 036535e8fe1a..bc0b6a801b21 100644 --- a/plugins/terminal/frontend/src/com/intellij/terminal/frontend/toolwindow/TerminalToolWindowTab.kt +++ b/plugins/terminal/frontend/src/com/intellij/terminal/frontend/toolwindow/TerminalToolWindowTab.kt @@ -1,5 +1,6 @@ package com.intellij.terminal.frontend.toolwindow +import com.intellij.openapi.util.Key import com.intellij.terminal.frontend.view.TerminalView import com.intellij.ui.content.Content import org.jetbrains.annotations.ApiStatus @@ -38,4 +39,8 @@ interface TerminalToolWindowTab { * Terminal process startup options that were specified in the [TerminalToolWindowTabBuilder]. */ val processOptions: TerminalRequestedProcessOptions + + companion object { + val KEY: Key = Key.create("TerminalToolWindowTab") + } } \ No newline at end of file diff --git a/plugins/terminal/frontend/src/com/intellij/terminal/frontend/toolwindow/impl/TerminalToolWindowTabsManagerImpl.kt b/plugins/terminal/frontend/src/com/intellij/terminal/frontend/toolwindow/impl/TerminalToolWindowTabsManagerImpl.kt index ae7132644df3..89ecbeeecac6 100644 --- a/plugins/terminal/frontend/src/com/intellij/terminal/frontend/toolwindow/impl/TerminalToolWindowTabsManagerImpl.kt +++ b/plugins/terminal/frontend/src/com/intellij/terminal/frontend/toolwindow/impl/TerminalToolWindowTabsManagerImpl.kt @@ -62,10 +62,8 @@ internal class TerminalToolWindowTabsManagerImpl( private val project: Project, private val coroutineScope: CoroutineScope, ) : TerminalToolWindowTabsManager { - private val mutableTabs: MutableList = mutableListOf() - override val tabs: List - get() = mutableTabs.toList() + get() = getToolWindow().contentManager.contentsRecursively.mapNotNull { it.getUserData(TerminalToolWindowTab.KEY) } private var tabsRestoredDeferred: Deferred = CompletableDeferred(Unit) @@ -123,7 +121,6 @@ internal class TerminalToolWindowTabsManagerImpl( processOptions: TerminalRequestedProcessOptions, ): TerminalToolWindowTab { val tab = doCreateTab(view, closeOnProcessTermination, processOptions) - addToTabsList(tab) addTabToToolWindow(tab, contentManager, true) return tab } @@ -159,7 +156,6 @@ internal class TerminalToolWindowTabsManagerImpl( closeOnProcessTermination = builder.closeOnProcessTermination, processOptions = builder.getRequestedProcessOptions() ) - addToTabsList(tab) if (builder.shouldAddToToolWindow) { addTabToToolWindow(tab, builder.contentManager, builder.requestFocus) ReworkedTerminalUsageCollector.logTabOpened( @@ -225,7 +221,9 @@ internal class TerminalToolWindowTabsManagerImpl( manager.removeContent(content, true) } - return TerminalToolWindowTabImpl(terminal, content, closeOnProcessTermination, processOptions) + val tab = TerminalToolWindowTabImpl(terminal, content, closeOnProcessTermination, processOptions) + content.putUserData(TerminalToolWindowTab.KEY, tab) + return tab } private fun addTabToToolWindow( @@ -251,13 +249,6 @@ internal class TerminalToolWindowTabsManagerImpl( project.messageBus.syncPublisher(TerminalTabsManagerListener.TOPIC).tabAdded(tab) } - private fun addToTabsList(tab: TerminalToolWindowTab) { - mutableTabs.add(tab) - Disposer.register(tab.content) { - mutableTabs.remove(tab) - } - } - private fun createTerminalViewAndStartSession(builder: TerminalToolWindowTabBuilderImpl): TerminalView { val viewOptions = TerminalViewBuilderOptions( processOptions = builder.getRequestedProcessOptions(),