mirror of
https://github.com/TermoraDev/termora.git
synced 2026-01-16 02:12:58 +08:00
chore: improve keymap refresh
This commit is contained in:
21
src/main/kotlin/app/termora/FramePlugin.kt
Normal file
21
src/main/kotlin/app/termora/FramePlugin.kt
Normal file
@@ -0,0 +1,21 @@
|
||||
package app.termora
|
||||
|
||||
import app.termora.database.DatabaseChangedExtension
|
||||
import app.termora.database.DatabasePropertiesChangedExtension
|
||||
import app.termora.plugin.Extension
|
||||
import app.termora.plugin.InternalPlugin
|
||||
|
||||
internal class FramePlugin : InternalPlugin() {
|
||||
init {
|
||||
support.addExtension(DatabasePropertiesChangedExtension::class.java) { KeymapRefresher.getInstance() }
|
||||
support.addExtension(DatabaseChangedExtension::class.java) { KeymapRefresher.getInstance() }
|
||||
}
|
||||
|
||||
override fun getName(): String {
|
||||
return "Frame"
|
||||
}
|
||||
|
||||
override fun <T : Extension> getExtensions(clazz: Class<T>): List<T> {
|
||||
return support.getExtensions(clazz)
|
||||
}
|
||||
}
|
||||
65
src/main/kotlin/app/termora/KeymapRefresher.kt
Normal file
65
src/main/kotlin/app/termora/KeymapRefresher.kt
Normal file
@@ -0,0 +1,65 @@
|
||||
package app.termora
|
||||
|
||||
import app.termora.database.DatabaseChangedExtension
|
||||
import app.termora.database.DatabasePropertiesChangedExtension
|
||||
import app.termora.keymap.KeymapManager
|
||||
|
||||
internal class KeymapRefresher private constructor() : DatabasePropertiesChangedExtension, DatabaseChangedExtension {
|
||||
companion object {
|
||||
fun getInstance(): KeymapRefresher {
|
||||
return ApplicationScope.forApplicationScope()
|
||||
.getOrCreate(KeymapRefresher::class) { KeymapRefresher() }
|
||||
}
|
||||
}
|
||||
|
||||
private val listeners = mutableListOf<() -> Unit>()
|
||||
private var currentKeymap: String? = null
|
||||
private val keymapManager get() = KeymapManager.getInstance()
|
||||
private val activeKeymapName get() = keymapManager.getActiveKeymap().name
|
||||
|
||||
override fun onDataChanged(
|
||||
id: String,
|
||||
type: String,
|
||||
action: DatabaseChangedExtension.Action,
|
||||
source: DatabaseChangedExtension.Source
|
||||
) {
|
||||
if (type != "Keymap") return
|
||||
refresh()
|
||||
}
|
||||
|
||||
override fun onPropertyChanged(name: String, key: String, value: String) {
|
||||
if (name != "Setting.Properties") return
|
||||
if (key != "Keymap.Active") return
|
||||
refresh()
|
||||
}
|
||||
|
||||
private fun refresh() {
|
||||
synchronized(this) {
|
||||
if (currentKeymap == activeKeymapName) {
|
||||
return
|
||||
}
|
||||
|
||||
currentKeymap = activeKeymapName
|
||||
|
||||
for (function in listeners) {
|
||||
function.invoke()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun addRefreshListener(listener: () -> Unit): Disposable {
|
||||
synchronized(this) {
|
||||
listeners.add(listener)
|
||||
return object : Disposable {
|
||||
override fun dispose() {
|
||||
removeRefreshListener(listener)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun removeRefreshListener(listener: () -> Unit) {
|
||||
synchronized(this) { listeners.remove(listener) }
|
||||
}
|
||||
|
||||
}
|
||||
@@ -9,7 +9,7 @@ import javax.swing.JComponent
|
||||
import javax.swing.JPanel
|
||||
import javax.swing.UIManager
|
||||
|
||||
class SettingsDialog(owner: Window) : DialogWrapper(owner) {
|
||||
internal class SettingsDialog(owner: Window) : DialogWrapper(owner) {
|
||||
private val optionsPane = SettingsOptionsPane()
|
||||
private val properties get() = DatabaseManager.getInstance().properties
|
||||
|
||||
|
||||
@@ -2,8 +2,6 @@ package app.termora
|
||||
|
||||
|
||||
import app.termora.actions.*
|
||||
import app.termora.database.DatabaseChangedExtension
|
||||
import app.termora.database.DatabasePropertiesChangedExtension
|
||||
import app.termora.findeverywhere.FindEverywhereProvider
|
||||
import app.termora.findeverywhere.FindEverywhereProviderExtension
|
||||
import app.termora.findeverywhere.FindEverywhereResult
|
||||
@@ -73,12 +71,8 @@ class TermoraFrame : JFrame(), DataProvider {
|
||||
}
|
||||
|
||||
// 快捷键变动时重新监听
|
||||
val refresher = KeymapRefresher()
|
||||
dynamicExtensionHandler.register(DatabasePropertiesChangedExtension::class.java, refresher)
|
||||
KeymapRefresher.getInstance().addRefreshListener { initKeymap() }
|
||||
.let { Disposer.register(windowScope, it) }
|
||||
dynamicExtensionHandler.register(DatabaseChangedExtension::class.java, refresher)
|
||||
.let { Disposer.register(windowScope, it) }
|
||||
|
||||
|
||||
// FindEverywhere
|
||||
dynamicExtensionHandler
|
||||
@@ -418,29 +412,6 @@ class TermoraFrame : JFrame(), DataProvider {
|
||||
return object : MouseAdapter() {}
|
||||
}
|
||||
|
||||
private inner class KeymapRefresher : DatabasePropertiesChangedExtension, DatabaseChangedExtension {
|
||||
|
||||
override fun onDataChanged(
|
||||
id: String,
|
||||
type: String,
|
||||
action: DatabaseChangedExtension.Action,
|
||||
source: DatabaseChangedExtension.Source
|
||||
) {
|
||||
if (type != "Keymap") return
|
||||
refresh()
|
||||
}
|
||||
|
||||
override fun onPropertyChanged(name: String, key: String, value: String) {
|
||||
if (name != "Setting.Properties") return
|
||||
if (key != "Keymap.Active") return
|
||||
refresh()
|
||||
}
|
||||
|
||||
private fun refresh() {
|
||||
initKeymap()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private inner class RedirectAnActionEvent(
|
||||
source: Any,
|
||||
|
||||
@@ -2,6 +2,7 @@ package app.termora.plugin
|
||||
|
||||
import app.termora.Application
|
||||
import app.termora.ApplicationScope
|
||||
import app.termora.FramePlugin
|
||||
import app.termora.account.AccountPlugin
|
||||
import app.termora.plugin.internal.badge.BadgePlugin
|
||||
import app.termora.plugin.internal.extension.DynamicExtensionPlugin
|
||||
@@ -111,6 +112,8 @@ internal class PluginManager private constructor() {
|
||||
plugins.add(PluginDescriptor(BadgePlugin(), origin = PluginOrigin.Internal, version = version))
|
||||
// update plugin
|
||||
plugins.add(PluginDescriptor(UpdatePlugin(), origin = PluginOrigin.Internal, version = version))
|
||||
// frame plugin
|
||||
plugins.add(PluginDescriptor(FramePlugin(), origin = PluginOrigin.Internal, version = version))
|
||||
|
||||
// ssh plugin
|
||||
plugins.add(PluginDescriptor(SSHInternalPlugin(), origin = PluginOrigin.Internal, version = version))
|
||||
|
||||
Reference in New Issue
Block a user