From ca075869ebc6f602bc88194ffbe2f629155ede50 Mon Sep 17 00:00:00 2001 From: chylex <contact@chylex.com> Date: Fri, 17 May 2024 19:11:53 +0200 Subject: [PATCH] Fix vim-style bindings stealing keys from inline text fields --- .../feature/vimNavigation/VimNavigationDispatcher.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/vimNavigation/VimNavigationDispatcher.kt b/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/vimNavigation/VimNavigationDispatcher.kt index 1a059fb..639f0ed 100644 --- a/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/vimNavigation/VimNavigationDispatcher.kt +++ b/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/vimNavigation/VimNavigationDispatcher.kt @@ -4,6 +4,7 @@ import com.chylex.intellij.keyboardmaster.PluginDisposableService import com.intellij.openapi.actionSystem.ActionUpdateThread import com.intellij.openapi.actionSystem.AnAction import com.intellij.openapi.actionSystem.AnActionEvent +import com.intellij.openapi.actionSystem.CommonDataKeys import com.intellij.openapi.actionSystem.KeyboardShortcut import com.intellij.openapi.actionSystem.ex.ActionUtil import com.intellij.openapi.application.ApplicationManager @@ -112,7 +113,16 @@ internal open class VimNavigationDispatcher<T : JComponent>(final override val c } final override fun update(e: AnActionEvent) { - e.presentation.isEnabled = !isSearching.get() || e.inputEvent.let { it is KeyEvent && it.id == KeyEvent.KEY_PRESSED && it.keyCode == KeyEvent.VK_ENTER } + e.presentation.isEnabled = !ignoreEventDueToActiveSearch(e) && !ignoreEventDueToActiveEditing(e) + } + + private fun ignoreEventDueToActiveSearch(e: AnActionEvent): Boolean { + return isSearching.get() && !e.inputEvent.let { it is KeyEvent && it.id == KeyEvent.KEY_PRESSED && it.keyCode == KeyEvent.VK_ENTER } + } + + private fun ignoreEventDueToActiveEditing(e: AnActionEvent): Boolean { + // Avoid stealing keys from inline text fields. + return e.dataContext.getData(CommonDataKeys.EDITOR) != null } final override fun getActionUpdateThread(): ActionUpdateThread {