diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/LensRenderer.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/LensRenderer.kt index bd7e164..810b1db 100644 --- a/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/LensRenderer.kt +++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/editor/lens/LensRenderer.kt @@ -1,5 +1,6 @@ package com.chylex.intellij.inspectionlens.editor.lens +import com.chylex.intellij.inspectionlens.settings.LensHoverMode import com.chylex.intellij.inspectionlens.settings.LensSettingsState import com.intellij.codeInsight.daemon.impl.HighlightInfo import com.intellij.codeInsight.daemon.impl.HintRenderer @@ -26,8 +27,7 @@ import javax.swing.SwingUtilities /** * Renders the text of an inspection lens. */ -class LensRenderer(private var info: HighlightInfo, settings: LensSettingsState) : HintRenderer(null), InputHandler { - private val useEditorFont = settings.useEditorFont +class LensRenderer(private var info: HighlightInfo, private val settings: LensSettingsState) : HintRenderer(null), InputHandler { private lateinit var inlay: Inlay<*> private lateinit var attributes: LensSeverityTextAttributes private var extraRightPadding = 0 @@ -81,7 +81,7 @@ class LensRenderer(private var info: HighlightInfo, settings: LensSettingsState) } override fun useEditorFont(): Boolean { - return useEditorFont + return settings.useEditorFont } override fun mouseMoved(event: MouseEvent, translated: Point) { @@ -93,6 +93,10 @@ class LensRenderer(private var info: HighlightInfo, settings: LensSettingsState) } private fun setHovered(hovered: Boolean) { + if (hovered && settings.lensHoverMode == LensHoverMode.DISABLED) { + return + } + if (this.hovered == hovered) { return } @@ -109,17 +113,18 @@ class LensRenderer(private var info: HighlightInfo, settings: LensSettingsState) } override fun mousePressed(event: MouseEvent, translated: Point) { - if (!isHoveringText(translated)) { + val hoverMode = settings.lensHoverMode + if (hoverMode == LensHoverMode.DISABLED || !isHoveringText(translated)) { return } - if (SwingUtilities.isLeftMouseButton(event) || SwingUtilities.isMiddleMouseButton(event)) { + if (event.button.let { it == MouseEvent.BUTTON1 || it == MouseEvent.BUTTON2 }) { event.consume() val editor = inlay.editor moveToOffset(editor, info.actualStartOffset) - if (SwingUtilities.isLeftMouseButton(event)) { + if ((event.button == MouseEvent.BUTTON1) xor (hoverMode != LensHoverMode.DEFAULT)) { IntentionsPopup.show(editor) } } diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/settings/LensApplicationConfigurable.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/settings/LensApplicationConfigurable.kt index d15b64a..2621698 100644 --- a/src/main/kotlin/com/chylex/intellij/inspectionlens/settings/LensApplicationConfigurable.kt +++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/settings/LensApplicationConfigurable.kt @@ -13,11 +13,13 @@ import com.intellij.openapi.ui.DialogPanel import com.intellij.openapi.util.Disposer import com.intellij.ui.DisabledTraversalPolicy import com.intellij.ui.EditorTextFieldCellRenderer.SimpleRendererComponent +import com.intellij.ui.SimpleListCellRenderer import com.intellij.ui.components.JBCheckBox import com.intellij.ui.dsl.builder.Cell import com.intellij.ui.dsl.builder.RightGap import com.intellij.ui.dsl.builder.Row import com.intellij.ui.dsl.builder.RowLayout +import com.intellij.ui.dsl.builder.bindItem import com.intellij.ui.dsl.builder.bindSelected import com.intellij.ui.dsl.builder.panel import java.awt.Cursor @@ -74,6 +76,20 @@ class LensApplicationConfigurable : BoundConfigurable("Inspection Lens"), Config val settings = settingsService.state return panel { + group("Appearance") { + row { + checkBox("Use editor font").bindSelected(settings::useEditorFont) + } + } + + group("Behavior") { + row("Hover mode:") { + val items = LensHoverMode.values().toList() + val renderer = SimpleListCellRenderer.create("", LensHoverMode::description) + comboBox(items, renderer).bindItem(settings::lensHoverMode) { settings.lensHoverMode = it ?: LensHoverMode.DEFAULT } + } + } + group("Shown Severities") { for ((id, severity, textAttributes) in allSeverities) { row { @@ -89,12 +105,6 @@ class LensApplicationConfigurable : BoundConfigurable("Inspection Lens"), Config checkBox("Other").bindSelected(settings::showUnknownSeverities) } } - - group("Appearance") { - row { - checkBox("Use editor font").bindSelected(settings::useEditorFont) - } - } } } diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/settings/LensHoverMode.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/settings/LensHoverMode.kt new file mode 100644 index 0000000..89a049d --- /dev/null +++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/settings/LensHoverMode.kt @@ -0,0 +1,7 @@ +package com.chylex.intellij.inspectionlens.settings + +enum class LensHoverMode(val description: String) { + DISABLED("Disabled"), + DEFAULT("Left click shows intentions, middle click jumps to highlight"), + SWAPPED("Left click jumps to highlight, middle click shows intentions") +} diff --git a/src/main/kotlin/com/chylex/intellij/inspectionlens/settings/LensSettingsState.kt b/src/main/kotlin/com/chylex/intellij/inspectionlens/settings/LensSettingsState.kt index c375e15..c5fc76d 100644 --- a/src/main/kotlin/com/chylex/intellij/inspectionlens/settings/LensSettingsState.kt +++ b/src/main/kotlin/com/chylex/intellij/inspectionlens/settings/LensSettingsState.kt @@ -21,6 +21,7 @@ class LensSettingsState : SimplePersistentStateComponent<LensSettingsState.State var showUnknownSeverities by property(true) var useEditorFont by property(true) + var lensHoverMode by enum(LensHoverMode.DEFAULT) } @get:Synchronized @@ -31,6 +32,9 @@ class LensSettingsState : SimplePersistentStateComponent<LensSettingsState.State val useEditorFont get() = state.useEditorFont + val lensHoverMode + get() = state.lensHoverMode + override fun loadState(state: State) { super.loadState(state) update()