mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-20 05:21:29 +07:00
[terminal] IJPL-175766 migrate TerminalOutputEditorInputMethodSupport to CoroutineScope
(cherry picked from commit 69c290b0ad193829ce518b887b971591c7400c33) IJ-MR-163479 (cherry picked from commit 92906e849110cba414ff3e59cd5592addfe99f18) IJ-CR-163730 GitOrigin-RevId: 1ebb24c7e504e28597677215f6471606f33e2914
This commit is contained in:
committed by
intellij-monorepo-bot
parent
476ea78c03
commit
ae7da7ba3d
@@ -323,7 +323,7 @@ internal class ReworkedTerminalView(
|
||||
val offset = model.cursorOffsetState.value
|
||||
editor.offsetToLogicalPosition(offset)
|
||||
}
|
||||
).install(parentDisposable)
|
||||
).install(coroutineScope)
|
||||
|
||||
CopyOnSelectionHandler.install(editor, settings)
|
||||
|
||||
|
||||
@@ -52,11 +52,7 @@ class SimpleTerminalController(
|
||||
val eventsHandler = SimpleTerminalEventsHandler(session, settings, outputModel)
|
||||
setupKeyEventDispatcher(editor, eventsHandler, disposable = this)
|
||||
setupMouseListener(editor, settings, terminalModel, eventsHandler, disposable = this)
|
||||
TerminalOutputEditorInputMethodSupport(
|
||||
editor,
|
||||
sendInputString = { text -> session.terminalOutputStream.sendString(text, true) },
|
||||
getCaretPosition = { caretModel.getCaretPosition() }
|
||||
).install(this)
|
||||
setupInputMethodSupport(editor, session, caretModel, this)
|
||||
terminalModel.withContentLock {
|
||||
updateEditorContent()
|
||||
}
|
||||
|
||||
@@ -16,13 +16,17 @@ import com.intellij.openapi.editor.ex.FocusChangeListener
|
||||
import com.intellij.openapi.observable.util.addKeyListener
|
||||
import com.intellij.openapi.util.Disposer
|
||||
import com.intellij.openapi.util.registry.Registry
|
||||
import com.intellij.platform.util.coroutines.childScope
|
||||
import com.intellij.terminal.JBTerminalSystemSettingsProviderBase
|
||||
import com.intellij.util.application
|
||||
import com.intellij.util.concurrency.ThreadingAssertions
|
||||
import com.jediterm.terminal.emulator.mouse.MouseMode
|
||||
import kotlinx.coroutines.cancel
|
||||
import org.intellij.lang.annotations.Language
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.plugins.terminal.block.session.BlockTerminalSession
|
||||
import org.jetbrains.plugins.terminal.block.session.TerminalModel
|
||||
import org.jetbrains.plugins.terminal.util.terminalApplicationScope
|
||||
import java.awt.AWTEvent
|
||||
import java.awt.event.*
|
||||
import javax.swing.KeyStroke
|
||||
@@ -266,3 +270,20 @@ internal fun setupMouseListener(editor: EditorEx,
|
||||
editor.scrollPane.removeMouseWheelListener(mouseWheelListener)
|
||||
})
|
||||
}
|
||||
|
||||
internal fun setupInputMethodSupport(
|
||||
editor: EditorEx,
|
||||
session: BlockTerminalSession,
|
||||
caretModel: TerminalCaretModel,
|
||||
parentDisposable: Disposable
|
||||
) {
|
||||
val coroutineScope = terminalApplicationScope().childScope(TerminalOutputEditorInputMethodSupport::class.java.simpleName)
|
||||
Disposer.register(parentDisposable) {
|
||||
coroutineScope.cancel("Terminal is disposed (Experimental 2024)")
|
||||
}
|
||||
TerminalOutputEditorInputMethodSupport(
|
||||
editor,
|
||||
sendInputString = { text -> session.terminalOutputStream.sendString(text, true) },
|
||||
getCaretPosition = { caretModel.getCaretPosition() }
|
||||
).install(coroutineScope)
|
||||
}
|
||||
|
||||
@@ -393,11 +393,7 @@ class TerminalOutputController(
|
||||
val eventsHandler = BlockTerminalEventsHandler(session, settings, this@TerminalOutputController)
|
||||
setupKeyEventDispatcher(editor, eventsHandler, disposable)
|
||||
setupMouseListener(editor, settings, session.model, eventsHandler, disposable)
|
||||
TerminalOutputEditorInputMethodSupport(
|
||||
editor,
|
||||
sendInputString = { text -> session.terminalOutputStream.sendString(text, true) },
|
||||
getCaretPosition = { caretModel.getCaretPosition() }
|
||||
).install(disposable)
|
||||
setupInputMethodSupport(editor, session, caretModel, disposable)
|
||||
|
||||
contentUpdatesScheduler = setupContentUpdating()
|
||||
}
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.plugins.terminal.block.output
|
||||
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.application.ModalityState
|
||||
import com.intellij.openapi.application.runInEdt
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import com.intellij.openapi.editor.Inlay
|
||||
import com.intellij.openapi.editor.LogicalPosition
|
||||
@@ -10,6 +11,8 @@ import com.intellij.openapi.editor.impl.EditorImpl
|
||||
import com.intellij.openapi.editor.impl.EditorInputMethodSupport
|
||||
import com.intellij.openapi.editor.impl.InputMethodInlayRenderer
|
||||
import com.intellij.openapi.util.Disposer
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.job
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
import java.awt.Component
|
||||
import java.awt.Dimension
|
||||
@@ -37,7 +40,7 @@ class TerminalOutputEditorInputMethodSupport(
|
||||
|
||||
private var inlay: Inlay<*>? = null
|
||||
|
||||
fun install(parentDisposable: Disposable) {
|
||||
fun install(coroutineScope: CoroutineScope) {
|
||||
check(editor.isViewer)
|
||||
|
||||
val mouseListener = object : MouseAdapter() {
|
||||
@@ -64,9 +67,11 @@ class TerminalOutputEditorInputMethodSupport(
|
||||
|
||||
(editor as EditorImpl).setInputMethodSupport(EditorInputMethodSupport(inputMethodRequests, inputMethodListener))
|
||||
|
||||
Disposer.register(parentDisposable) {
|
||||
editor.contentComponent.removeMouseListener(mouseListener)
|
||||
editor.setInputMethodSupport(null)
|
||||
coroutineScope.coroutineContext.job.invokeOnCompletion {
|
||||
runInEdt(ModalityState.any()) {
|
||||
editor.contentComponent.removeMouseListener(mouseListener)
|
||||
editor.setInputMethodSupport(null)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user