1
0
mirror of https://github.com/chylex/IntelliJ-Keyboard-Master.git synced 2025-04-29 01:15:43 +02:00

Fix vim-style navigation being active in popups even when disabled

This commit is contained in:
chylex 2024-05-19 15:13:59 +02:00
parent ca075869eb
commit b131413c8d
Signed by: chylex
GPG Key ID: 4DE42C8F19A80548
2 changed files with 7 additions and 4 deletions
src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/vimNavigation

View File

@ -8,7 +8,7 @@ import com.intellij.ui.popup.list.ListPopupImpl
internal object PopupInterceptor : PersistentUiInterceptor<AbstractPopup>(AbstractPopup::class.java) { internal object PopupInterceptor : PersistentUiInterceptor<AbstractPopup>(AbstractPopup::class.java) {
override fun shouldIntercept(component: AbstractPopup): Boolean { override fun shouldIntercept(component: AbstractPopup): Boolean {
if (component is ListPopupImpl) { if (component is ListPopupImpl && VimNavigation.isEnabled) {
VimListNavigation.install(component.list, component) VimListNavigation.install(component.list, component)
} }

View File

@ -18,9 +18,12 @@ import javax.swing.KeyStroke
import javax.swing.UIManager import javax.swing.UIManager
object VimNavigation { object VimNavigation {
private val isEnabled = AtomicBoolean(false) private val isEnabledFlag = AtomicBoolean(false)
private var originalPopupBindings: Array<*>? = null private var originalPopupBindings: Array<*>? = null
val isEnabled
get() = isEnabledFlag.get()
fun register() { fun register() {
val disposable = ApplicationManager.getApplication().getService(PluginDisposableService::class.java) val disposable = ApplicationManager.getApplication().getService(PluginDisposableService::class.java)
@ -29,7 +32,7 @@ object VimNavigation {
} }
fun setEnabled(enabled: Boolean) { fun setEnabled(enabled: Boolean) {
if (!isEnabled.compareAndSet(!enabled, enabled)) { if (!isEnabledFlag.compareAndSet(!enabled, enabled)) {
return return
} }
@ -61,7 +64,7 @@ object VimNavigation {
} }
private fun handleEvent(event: AWTEvent) { private fun handleEvent(event: AWTEvent) {
if (event is FocusEvent && event.id == FocusEvent.FOCUS_GAINED && isEnabled.get()) { if (event is FocusEvent && event.id == FocusEvent.FOCUS_GAINED && isEnabled) {
when (val source = event.source) { when (val source = event.source) {
is JList<*> -> VimListNavigation.install(source) is JList<*> -> VimListNavigation.install(source)
is JTree -> VimTreeNavigation.install(source) is JTree -> VimTreeNavigation.install(source)