[terminal] IJPL-212254 Do not store terminal tabs in a separate list

Let's use tool window content manager as a single source of truth about opened tabs.

(cherry picked from commit a801410428988c3993472c89c1ef1dd2905053d0)

IJ-CR-214214

GitOrigin-RevId: 014c48801f8739b593e07b28a13cd16528aad070
This commit is contained in:
Konstantin Hudyakov
2026-08-04 14:03:36 +00:00
committed by intellij-monorepo-bot
parent 43afb171c4
commit 870a0d8873
2 changed files with 9 additions and 13 deletions
@@ -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<TerminalToolWindowTab> = Key.create("TerminalToolWindowTab")
}
}
@@ -62,10 +62,8 @@ internal class TerminalToolWindowTabsManagerImpl(
private val project: Project,
private val coroutineScope: CoroutineScope,
) : TerminalToolWindowTabsManager {
private val mutableTabs: MutableList<TerminalToolWindowTab> = mutableListOf()
override val tabs: List<TerminalToolWindowTab>
get() = mutableTabs.toList()
get() = getToolWindow().contentManager.contentsRecursively.mapNotNull { it.getUserData(TerminalToolWindowTab.KEY) }
private var tabsRestoredDeferred: Deferred<Unit> = 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(),