mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 11:53:49 +07:00
[inline-completion] ML-1559 Fix multiple inline tooltips
GitOrigin-RevId: 65de701d336719751abe2520db8b13e766f54f19
This commit is contained in:
committed by
intellij-monorepo-bot
parent
522863b447
commit
b1b266d0de
@@ -12,6 +12,7 @@ import com.intellij.openapi.application.ApplicationManager
|
|||||||
import com.intellij.openapi.command.CommandProcessor
|
import com.intellij.openapi.command.CommandProcessor
|
||||||
import com.intellij.openapi.keymap.KeymapUtil
|
import com.intellij.openapi.keymap.KeymapUtil
|
||||||
import com.intellij.openapi.util.Disposer
|
import com.intellij.openapi.util.Disposer
|
||||||
|
import com.intellij.openapi.util.Key
|
||||||
import com.intellij.ui.LightweightHint
|
import com.intellij.ui.LightweightHint
|
||||||
import com.intellij.ui.dsl.builder.RightGap
|
import com.intellij.ui.dsl.builder.RightGap
|
||||||
import com.intellij.ui.dsl.builder.panel
|
import com.intellij.ui.dsl.builder.panel
|
||||||
@@ -20,9 +21,13 @@ import com.intellij.util.concurrency.annotations.RequiresEdt
|
|||||||
import com.intellij.util.ui.JBUI
|
import com.intellij.util.ui.JBUI
|
||||||
|
|
||||||
internal object InlineCompletionTooltip {
|
internal object InlineCompletionTooltip {
|
||||||
|
private val tooltipKey = Key<Unit>("EDITOR_HAS_INLINE_TOOLTIP")
|
||||||
@RequiresEdt
|
@RequiresEdt
|
||||||
fun enterHover(session: InlineCompletionSession) {
|
fun enterHover(session: InlineCompletionSession) {
|
||||||
val editor = session.context.editor
|
val editor = session.context.editor
|
||||||
|
if (tooltipKey.isIn(editor)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
val activeLookup = LookupManager.getActiveLookup(editor)
|
val activeLookup = LookupManager.getActiveLookup(editor)
|
||||||
|
|
||||||
if (activeLookup?.isPositionedAboveCaret == true) {
|
if (activeLookup?.isPositionedAboveCaret == true) {
|
||||||
@@ -54,8 +59,12 @@ internal object InlineCompletionTooltip {
|
|||||||
setForceShowAsPopup(true)
|
setForceShowAsPopup(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
val pos = editor.offsetToLogicalPosition(editor.caretModel.offset)
|
val location = HintManagerImpl.getHintPosition(
|
||||||
val location = HintManagerImpl.getHintPosition(hint, editor, pos, HintManager.ABOVE)
|
hint,
|
||||||
|
editor,
|
||||||
|
editor.offsetToLogicalPosition(editor.caretModel.offset),
|
||||||
|
HintManager.ABOVE
|
||||||
|
)
|
||||||
location.y -= panel.preferredHeight
|
location.y -= panel.preferredHeight
|
||||||
|
|
||||||
HintManagerImpl.getInstanceImpl().showEditorHint(
|
HintManagerImpl.getInstanceImpl().showEditorHint(
|
||||||
@@ -67,6 +76,11 @@ internal object InlineCompletionTooltip {
|
|||||||
false,
|
false,
|
||||||
HintManagerImpl.createHintHint(editor, location, hint, HintManager.ABOVE).setContentActive(false)
|
HintManagerImpl.createHintHint(editor, location, hint, HintManager.ABOVE).setContentActive(false)
|
||||||
)
|
)
|
||||||
|
editor.putUserData(tooltipKey, Unit)
|
||||||
|
hint.addHintListener {
|
||||||
|
// on hint hide
|
||||||
|
editor.putUserData(tooltipKey, null)
|
||||||
|
}
|
||||||
Disposer.register(session) {
|
Disposer.register(session) {
|
||||||
hint.hide()
|
hint.hide()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user