diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/BlockTerminalView.kt b/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/BlockTerminalView.kt index c4df87f89417..3721c6f676d4 100644 --- a/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/BlockTerminalView.kt +++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/BlockTerminalView.kt @@ -31,6 +31,15 @@ class BlockTerminalView( private val promptView: TerminalPromptView = TerminalPromptView(project, settings, session, this) private var alternateBufferView: SimpleTerminalView? = null + override val component: JComponent = this + + override val preferredFocusableComponent: JComponent + get() = when { + alternateBufferView != null -> alternateBufferView!!.preferredFocusableComponent + promptView.component.isVisible -> promptView.preferredFocusableComponent + else -> outputView.preferredFocusableComponent + } + init { Disposer.register(this, outputView) Disposer.register(this, promptView) @@ -146,16 +155,6 @@ class BlockTerminalView( override fun dispose() {} - override fun getComponent(): JComponent = this - - override fun getPreferredFocusableComponent(): JComponent { - return when { - alternateBufferView != null -> alternateBufferView!!.preferredFocusableComponent - promptView.component.isVisible -> promptView.preferredFocusableComponent - else -> outputView.preferredFocusableComponent - } - } - /** * This layout is needed to place [TOP] component (command blocks) over the [BOTTOM] component (prompt). * The height of the [TOP] component is limited by the container size minus preferred height of the [BOTTOM]. diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/PlainTerminalView.kt b/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/PlainTerminalView.kt index 773b184a0a33..1c7c2c20aa26 100644 --- a/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/PlainTerminalView.kt +++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/PlainTerminalView.kt @@ -16,6 +16,11 @@ class PlainTerminalView( private val session: TerminalSession, settings: JBTerminalSystemSettingsProviderBase ) : TerminalContentView { + override val component: JComponent + get() = view.component + override val preferredFocusableComponent: JComponent + get() = view.preferredFocusableComponent + private val view: SimpleTerminalView init { @@ -43,10 +48,6 @@ class PlainTerminalView( return view.isFocused() } - override fun getComponent(): JComponent = view - - override fun getPreferredFocusableComponent(): JComponent = view.preferredFocusableComponent - override fun dispose() { } } \ No newline at end of file diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/SimpleTerminalView.kt b/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/SimpleTerminalView.kt index 4efd2dc72d5e..07bb424502ed 100644 --- a/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/SimpleTerminalView.kt +++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/SimpleTerminalView.kt @@ -1,13 +1,13 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.terminal.exp +import com.intellij.openapi.Disposable import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.EditorFactory import com.intellij.openapi.editor.ex.FocusChangeListener import com.intellij.openapi.editor.impl.DocumentImpl import com.intellij.openapi.editor.impl.EditorImpl import com.intellij.openapi.project.Project -import com.intellij.openapi.ui.ComponentContainer import com.intellij.openapi.util.Disposer import com.intellij.terminal.JBTerminalSystemSettingsProviderBase import com.intellij.util.ui.JBUI @@ -24,10 +24,14 @@ class SimpleTerminalView( session: TerminalSession, eventsHandler: TerminalEventsHandler, private val withVerticalScroll: Boolean = true -) : JPanel(), ComponentContainer { +) : JPanel(), Disposable { private val editor: EditorImpl private val controller: SimpleTerminalController + val component: JComponent = this + val preferredFocusableComponent: JComponent + get() = editor.contentComponent + val terminalWidth: Int get() { val visibleArea = editor.scrollingModel.visibleArea @@ -73,10 +77,6 @@ class SimpleTerminalView( return TerminalUI.terminalBackground } - override fun getComponent(): JComponent = this - - override fun getPreferredFocusableComponent(): JComponent = editor.contentComponent - override fun dispose() { EditorFactory.getInstance().releaseEditor(editor) Disposer.dispose(controller) diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/TerminalContentView.kt b/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/TerminalContentView.kt index 833bfeaeea55..faf451b11ef6 100644 --- a/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/TerminalContentView.kt +++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/TerminalContentView.kt @@ -1,10 +1,15 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.terminal.exp -import com.intellij.openapi.ui.ComponentContainer +import com.intellij.openapi.Disposable import com.jediterm.core.util.TermSize +import javax.swing.JComponent + +interface TerminalContentView : Disposable { + val component: JComponent + + val preferredFocusableComponent: JComponent -interface TerminalContentView : ComponentContainer { fun getTerminalSize(): TermSize? fun isFocused(): Boolean diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/TerminalOutputView.kt b/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/TerminalOutputView.kt index 77c78b9a6902..fdb68da6ee48 100644 --- a/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/TerminalOutputView.kt +++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/TerminalOutputView.kt @@ -1,13 +1,13 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.terminal.exp +import com.intellij.openapi.Disposable import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.EditorFactory import com.intellij.openapi.editor.ex.FocusChangeListener import com.intellij.openapi.editor.impl.DocumentImpl import com.intellij.openapi.editor.impl.EditorImpl import com.intellij.openapi.project.Project -import com.intellij.openapi.ui.ComponentContainer import com.intellij.terminal.JBTerminalSystemSettingsProviderBase import java.awt.Dimension import javax.swing.JComponent @@ -16,8 +16,12 @@ class TerminalOutputView( private val project: Project, session: TerminalSession, settings: JBTerminalSystemSettingsProviderBase -) : ComponentContainer { +) : Disposable { val controller: TerminalOutputController + val component: JComponent + get() = editor.component + val preferredFocusableComponent: JComponent + get() = editor.contentComponent private val editor: EditorImpl @@ -56,8 +60,4 @@ class TerminalOutputView( override fun dispose() { EditorFactory.getInstance().releaseEditor(editor) } - - override fun getComponent(): JComponent = editor.component - - override fun getPreferredFocusableComponent(): JComponent = editor.contentComponent } \ No newline at end of file diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/TerminalPromptView.kt b/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/TerminalPromptView.kt index 12dd982d0cde..47659d19bb73 100644 --- a/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/TerminalPromptView.kt +++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/TerminalPromptView.kt @@ -1,12 +1,12 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.plugins.terminal.exp +import com.intellij.openapi.Disposable import com.intellij.openapi.application.runInEdt import com.intellij.openapi.editor.ex.util.EditorUtil import com.intellij.openapi.editor.impl.EditorImpl import com.intellij.openapi.fileTypes.PlainTextLanguage import com.intellij.openapi.project.Project -import com.intellij.openapi.ui.ComponentContainer import com.intellij.openapi.util.NlsSafe import com.intellij.terminal.JBTerminalSystemSettingsProviderBase import com.intellij.ui.LanguageTextField @@ -25,9 +25,13 @@ class TerminalPromptView( private val settings: JBTerminalSystemSettingsProviderBase, session: TerminalSession, commandExecutor: TerminalCommandExecutor -) : JPanel(), ComponentContainer, PromptStateListener { +) : JPanel(), PromptStateListener, Disposable { val controller: TerminalPromptController + val component: JComponent = this + val preferredFocusableComponent: JComponent + get() = editor.contentComponent + private val editor: EditorImpl private val promptLabel: JLabel private val commandHistoryPresenter: CommandHistoryPresenter @@ -118,9 +122,5 @@ class TerminalPromptView( override fun getBackground(): Color = TerminalUI.terminalBackground - override fun getComponent(): JComponent = this - - override fun getPreferredFocusableComponent(): JComponent = editor.contentComponent - override fun dispose() {} } \ No newline at end of file diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/TerminalWidgetImpl.kt b/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/TerminalWidgetImpl.kt index 84c9951c353f..bc5bd41e43b4 100644 --- a/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/TerminalWidgetImpl.kt +++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/exp/TerminalWidgetImpl.kt @@ -99,20 +99,18 @@ class TerminalWidgetImpl(private val project: Project, override fun getPreferredFocusableComponent(): JComponent = view.preferredFocusableComponent private class TerminalPlaceholder : TerminalContentView { - private val panel: JPanel = object : JPanel() { + override val component: JComponent = object : JPanel() { override fun getBackground(): Color { return TerminalUI.terminalBackground } } + override val preferredFocusableComponent: JComponent = component + override fun getTerminalSize(): TermSize? = null override fun isFocused(): Boolean = false - override fun getComponent(): JComponent = panel - - override fun getPreferredFocusableComponent(): JComponent = panel - override fun dispose() { } }