mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[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:
committed by
intellij-monorepo-bot
parent
43afb171c4
commit
870a0d8873
+5
@@ -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")
|
||||
}
|
||||
}
|
||||
+4
-13
@@ -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(),
|
||||
|
||||
Reference in New Issue
Block a user