mirror of
https://github.com/chylex/IntelliJ-Keyboard-Master.git
synced 2025-10-15 23:39:37 +02:00
Compare commits
2 Commits
5c7e20fd78
...
main
Author | SHA1 | Date | |
---|---|---|---|
46657f2f7e
|
|||
48b342644b
|
@@ -6,7 +6,7 @@ plugins {
|
||||
}
|
||||
|
||||
group = "com.chylex.intellij.keyboardmaster"
|
||||
version = "0.6.3"
|
||||
version = "0.6.4"
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
|
@@ -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?) {}
|
||||
}
|
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user