1
0
mirror of https://github.com/chylex/IntelliJ-Keyboard-Master.git synced 2025-10-15 23:39:37 +02:00

Compare commits

...

2 Commits

Author SHA1 Message Date
46657f2f7e Release version 0.6.4 2025-10-07 17:17:38 +02:00
48b342644b Disable vim-style navigation in popups 2025-10-07 17:17:38 +02:00
3 changed files with 21 additions and 25 deletions

View File

@@ -6,7 +6,7 @@ plugins {
}
group = "com.chylex.intellij.keyboardmaster"
version = "0.6.3"
version = "0.6.4"
repositories {
mavenCentral()

View File

@@ -1,19 +0,0 @@
package com.chylex.intellij.keyboardmaster.feature.vimNavigation
import com.chylex.intellij.keyboardmaster.feature.vimNavigation.components.VimListNavigation
import com.intellij.ui.UiInterceptors.PersistentUiInterceptor
import com.intellij.ui.awt.RelativePoint
import com.intellij.ui.popup.AbstractPopup
import com.intellij.ui.popup.list.ListPopupImpl
internal object PopupInterceptor : PersistentUiInterceptor<AbstractPopup>(AbstractPopup::class.java) {
override fun shouldIntercept(component: AbstractPopup): Boolean {
if (component is ListPopupImpl && VimNavigation.isEnabled) {
VimListNavigation.install(component.list, component)
}
return false
}
override fun doIntercept(component: AbstractPopup, owner: RelativePoint?) {}
}

View File

@@ -6,11 +6,15 @@ import com.chylex.intellij.keyboardmaster.feature.vimNavigation.components.VimTa
import com.chylex.intellij.keyboardmaster.feature.vimNavigation.components.VimTreeNavigation
import com.intellij.ide.ui.UISettings
import com.intellij.openapi.application.ApplicationManager
import com.intellij.ui.UiInterceptors
import com.intellij.openapi.ui.getUserData
import com.intellij.openapi.ui.popup.util.PopupUtil
import com.intellij.openapi.ui.putUserData
import com.intellij.openapi.util.Key
import com.intellij.util.ui.StartupUiUtil
import java.awt.AWTEvent
import java.awt.event.FocusEvent
import java.util.concurrent.atomic.AtomicBoolean
import javax.swing.JComponent
import javax.swing.JList
import javax.swing.JTable
import javax.swing.JTree
@@ -18,6 +22,8 @@ import javax.swing.KeyStroke
import javax.swing.UIManager
object VimNavigation {
private val KEY_INSTALLED = Key.create<Boolean>("KeyboardMaster-VimNavigation-Installed")
private val isEnabledFlag = AtomicBoolean(false)
private var originalPopupBindings: Array<*>? = null
@@ -28,7 +34,6 @@ object VimNavigation {
val disposable = ApplicationManager.getApplication().getService(PluginDisposableService::class.java)
StartupUiUtil.addAwtListener(AWTEvent.FOCUS_EVENT_MASK, disposable, ::handleEvent)
UiInterceptors.registerPersistent(disposable, PopupInterceptor)
}
fun setEnabled(enabled: Boolean) {
@@ -66,9 +71,19 @@ object VimNavigation {
private fun handleEvent(event: AWTEvent) {
if (event is FocusEvent && event.id == FocusEvent.FOCUS_GAINED && isEnabled) {
when (val source = event.source) {
is JList<*> -> VimListNavigation.install(source)
is JTree -> VimTreeNavigation.install(source)
is JTable -> VimTableNavigation.install(source)
is JList<*> -> installTo(source, VimListNavigation::install)
is JTree -> installTo(source, VimTreeNavigation::install)
is JTable -> installTo(source, VimTableNavigation::install)
}
}
}
private inline fun <T : JComponent> installTo(component: T, installer: (T) -> Unit) {
if (component.getUserData(KEY_INSTALLED) == null) {
component.putUserData(KEY_INSTALLED, true)
if (PopupUtil.getPopupContainerFor(component) == null) {
installer(component)
}
}
}