IJPL-164292 vsc marker: Add separate EditorActionHandler to close Marker Popup simultaneously with the intention bulb

IJ-MR-147690

GitOrigin-RevId: 8a5f2de379efc13a98f2403efea3d19613bb1854
This commit is contained in:
Aleksandr Krasilnikov
2024-10-19 16:51:12 +02:00
committed by intellij-monorepo-bot
parent 97d32070e4
commit d8323df36f
2 changed files with 23 additions and 0 deletions

View File

@@ -4,6 +4,11 @@
<diff.DiffTool implementation="com.intellij.diff.tools.combined.CombinedUnifiedDiffTool"/>
<writingAccessProvider implementation="com.intellij.diff.DiffLightVirtualFileWritingAccessProvider"/>
<editorActionHandler action="EditorEscape"
implementationClass="com.intellij.openapi.vcs.ex.LineStatusMakerEscEditorHandler"
id="LineStatusTrackerMarkerPopup"
order="before hide-hints"/>
</extensions>
<applicationListeners>

View File

@@ -4,11 +4,14 @@ package com.intellij.openapi.vcs.ex
import com.intellij.codeInsight.hint.HintManager
import com.intellij.codeInsight.hint.HintManagerImpl
import com.intellij.openapi.Disposable
import com.intellij.openapi.actionSystem.DataContext
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.components.Service
import com.intellij.openapi.editor.Caret
import com.intellij.openapi.editor.Document
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.editor.LogicalPosition
import com.intellij.openapi.editor.actionSystem.EditorActionHandler
import com.intellij.openapi.editor.event.*
import com.intellij.openapi.fileEditor.FileEditorManagerEvent
import com.intellij.openapi.fileEditor.FileEditorManagerListener
@@ -63,6 +66,10 @@ internal class LineStatusMarkerPopupService {
}
}
internal fun hidePopup() {
lastKnownHint?.hide()
}
private fun beforeShowNewHint(newHint: LightweightHint) {
if (lastKnownHint != null) {
lastKnownHint!!.hide()
@@ -179,3 +186,14 @@ internal class LineStatusMarkerPopupService {
.getService<LineStatusMarkerPopupService>(LineStatusMarkerPopupService::class.java)
}
}
private class LineStatusMakerEscEditorHandler(private val delegate: EditorActionHandler) : EditorActionHandler() {
override fun isEnabledForCaret(editor: Editor, caret: Caret, dataContext: DataContext?): Boolean {
return delegate.isEnabled(editor, caret, dataContext)
}
override fun doExecute(editor: Editor, caret: Caret?, dataContext: DataContext?) {
LineStatusMarkerPopupService.instance.hidePopup()
delegate.execute(editor, caret, dataContext)
}
}