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 be1d451..b64205b 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 @@ -24,12 +24,7 @@ import javax.swing.KeyStroke internal open class VimNavigationDispatcher<T : JComponent>(final override val component: T, private val rootNode: KeyStrokeNode.Parent<VimNavigationDispatcher<T>>) : DumbAwareAction(), ComponentHolder { companion object { private val DISPOSABLE = ApplicationManager.getApplication().getService(PluginDisposableService::class.java) - private val ENTER_KEY = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0) - private val EXTRA_SHORTCUTS = setOf( - KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), - ENTER_KEY - ) private fun findOriginalEnterAction(component: JComponent): WrappedAction? { var originalEnterAction: WrappedAction? = null @@ -70,19 +65,20 @@ internal open class VimNavigationDispatcher<T : JComponent>(final override val c speedSearch?.addChangeListener { if (it.propertyName == SpeedSearchSupply.ENTERED_PREFIX_PROPERTY_NAME && !speedSearch.isPopupActive) { isSearching.set(false) + currentNode = rootNode } } } protected fun getAllKeyStrokes(): Set<KeyStroke> { - return KeyStrokeNode.getAllKeyStrokes(rootNode, EXTRA_SHORTCUTS) + return KeyStrokeNode.getAllKeyStrokes(rootNode, setOf(ENTER_KEY)) } final override fun actionPerformed(e: AnActionEvent) { val keyEvent = e.inputEvent as? KeyEvent ?: return - if (keyEvent.id == KeyEvent.KEY_PRESSED && handleSpecialKeyPress(e, keyEvent)) { - currentNode = rootNode + if (keyEvent.id == KeyEvent.KEY_PRESSED && keyEvent.keyCode == KeyEvent.VK_ENTER) { + handleEnterKeyPress(e, keyEvent) return } @@ -95,19 +91,6 @@ internal open class VimNavigationDispatcher<T : JComponent>(final override val c } } - private fun handleSpecialKeyPress(actionEvent: AnActionEvent, keyEvent: KeyEvent): Boolean { - if (keyEvent.keyCode == KeyEvent.VK_ESCAPE) { - return true - } - - if (keyEvent.keyCode == KeyEvent.VK_ENTER) { - handleEnterKeyPress(actionEvent, keyEvent) - return true - } - - return false - } - private fun handleEnterKeyPress(actionEvent: AnActionEvent, keyEvent: KeyEvent) { if (isSearching.compareAndSet(true, false)) { when (val supply = SpeedSearchSupply.getSupply(component)) { @@ -116,6 +99,7 @@ internal open class VimNavigationDispatcher<T : JComponent>(final override val c } } else { + currentNode = rootNode originalEnterAction?.perform(actionEvent, keyEvent) } }