fix: windows drive list failure

This commit is contained in:
hstyi
2025-07-06 16:48:06 +08:00
committed by hstyi
parent 728671509c
commit d40b8a4c9c
5 changed files with 34 additions and 21 deletions

View File

@@ -232,7 +232,8 @@ class PluginPanel(val descriptor: PluginPluginDescriptor) : JPanel(), Disposable
// 当有多个插件正在安装时,那么最后一个安装成功的询问是否重启 // 当有多个插件正在安装时,那么最后一个安装成功的询问是否重启
if (installing.get() <= 1) { if (installing.get() <= 1) {
restarter.scheduleRestart(owner) // 不阻塞按钮状态变更
SwingUtilities.invokeLater { restarter.scheduleRestart(owner) }
} }
// 如果是更新,那么也需要刷新 InstalledPanel 下的按钮状态 // 如果是更新,那么也需要刷新 InstalledPanel 下的按钮状态

View File

@@ -237,11 +237,17 @@ internal class TransportNavigationPanel(private val navigator: TransportNavigato
button.putClientProperty(FlatClientProperties.BUTTON_TYPE, FlatClientProperties.BUTTON_TYPE_TOOLBAR_BUTTON) button.putClientProperty(FlatClientProperties.BUTTON_TYPE, FlatClientProperties.BUTTON_TYPE_TOOLBAR_BUTTON)
button.addMouseListener(object : MouseAdapter() { button.addMouseListener(object : MouseAdapter() {
override fun mouseClicked(e: MouseEvent) { override fun mouseClicked(e: MouseEvent) {
if (navigator.loading) return if (SwingUtilities.isLeftMouseButton(e)) {
if (path == navigator.workdir) { if (navigator.loading) return
setTextFieldText(path) if (path == navigator.workdir) {
} else { setTextFieldText(path)
navigator.navigateTo(path.absolutePathString()) } else {
if (path.fileSystem.isWindowsFileSystem() && path.pathString == path.fileSystem.separator) {
navigator.navigateTo(path.pathString)
} else {
navigator.navigateTo(path.absolutePathString())
}
}
} }
} }
}) })

View File

@@ -249,9 +249,9 @@ internal class TransportPanel(
val workdir = workdir ?: return val workdir = workdir ?: return
if (e.actionCommand.isNullOrBlank()) { if (e.actionCommand.isNullOrBlank()) {
if (bookmarkBtn.isBookmark) { if (bookmarkBtn.isBookmark) {
bookmarkBtn.deleteBookmark(workdir.absolutePathString()) bookmarkBtn.deleteBookmark(workdir.pathString)
} else { } else {
bookmarkBtn.addBookmark(workdir.absolutePathString()) bookmarkBtn.addBookmark(workdir.pathString)
} }
bookmarkBtn.isBookmark = bookmarkBtn.isBookmark.not() bookmarkBtn.isBookmark = bookmarkBtn.isBookmark.not()
} else { } else {
@@ -263,7 +263,8 @@ internal class TransportPanel(
homeBtn.addActionListener(createSmartAction(object : AbstractAction() { homeBtn.addActionListener(createSmartAction(object : AbstractAction() {
override fun actionPerformed(e: ActionEvent) { override fun actionPerformed(e: ActionEvent) {
if (loader.isLoaded()) { if (loader.isLoaded()) {
navigator.navigateTo(loader.getSyncTransportSupport().getDefaultPath().absolutePathString()) val home = loader.getSyncTransportSupport().getDefaultPath().absolutePathString()
reload(newPath = home, requestFocus = true)
} }
} }
})) }))
@@ -344,7 +345,7 @@ internal class TransportPanel(
addPropertyChangeListener("workdir") { evt -> addPropertyChangeListener("workdir") { evt ->
val newValue = evt.newValue val newValue = evt.newValue
if (newValue is Path) { if (newValue is Path) {
bookmarkBtn.isBookmark = bookmarkBtn.getBookmarks().contains(newValue.absolutePathString()) bookmarkBtn.isBookmark = bookmarkBtn.getBookmarks().contains(newValue.pathString)
} }
} }
@@ -404,14 +405,6 @@ internal class TransportPanel(
} }
}) })
table.addKeyListener(object : KeyAdapter() {
override fun keyPressed(e: KeyEvent) {
if (e.keyCode == KeyEvent.VK_ENTER) {
enterSelectionFolder()
}
}
})
// https://github.com/TermoraDev/termora/issues/401 // https://github.com/TermoraDev/termora/issues/401
table.addMouseListener(object : MouseAdapter() { table.addMouseListener(object : MouseAdapter() {
override fun mouseClicked(e: MouseEvent) { override fun mouseClicked(e: MouseEvent) {
@@ -467,6 +460,12 @@ internal class TransportPanel(
} }
}) })
table.actionMap.put("EnterSelectionFolder", object : AbstractAction() {
override fun actionPerformed(e: ActionEvent) {
enterSelectionFolder()
}
})
// 快速导航 // 快速导航
table.addKeyListener(object : KeyAdapter() { table.addKeyListener(object : KeyAdapter() {
override fun keyPressed(e: KeyEvent) { override fun keyPressed(e: KeyEvent) {
@@ -494,6 +493,7 @@ internal class TransportPanel(
if (SystemInfo.isMacOS.not()) { if (SystemInfo.isMacOS.not()) {
inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0), "Reload") inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0), "Reload")
} }
inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "EnterSelectionFolder")
inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_R, toolkit.menuShortcutKeyMaskEx), "Reload") inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_R, toolkit.menuShortcutKeyMaskEx), "Reload")
} }
@@ -601,7 +601,12 @@ internal class TransportPanel(
if (workdir != null) registerSelectRow(workdir.name) if (workdir != null) registerSelectRow(workdir.name)
} }
navigator.navigateTo(path.absolutePathString()) // Windows 比较特殊,显示盘符页
if (path.fileSystem.isWindowsFileSystem() && path.pathString == path.fileSystem.separator) {
navigator.navigateTo(path.pathString)
} else {
navigator.navigateTo(path.absolutePathString())
}
} }
private fun registerSelectRow(name: String) { private fun registerSelectRow(name: String) {

View File

@@ -139,7 +139,8 @@ internal class TransportTabbed(
} }
fun addLocalTab() { fun addLocalTab() {
val host = Host(name = "Local", protocol = LocalProtocolProvider.PROTOCOL) // local id 必须固定,不然书签无法使用
val host = Host(id = "local", name = "Local", protocol = LocalProtocolProvider.PROTOCOL)
val fs = FileSystems.getDefault() val fs = FileSystems.getDefault()
val support = DefaultTransportSupport(fs, fs.getPath(getDefaultLocalPath())) val support = DefaultTransportSupport(fs, fs.getPath(getDefaultLocalPath()))
val panel = TransportPanel(internalTransferManager, host, object : TransportSupportLoader { val panel = TransportPanel(internalTransferManager, host, object : TransportSupportLoader {

View File

@@ -22,7 +22,7 @@ open class S3FileSystem(provider: S3FileSystemProvider) : BaseFileSystem<S3Path>
} }
override fun close() { override fun close() {
isOpen.compareAndSet(false, true) isOpen.compareAndSet(true, false)
} }
override fun getRootDirectories(): Iterable<Path> { override fun getRootDirectories(): Iterable<Path> {