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) {
restarter.scheduleRestart(owner)
// 不阻塞按钮状态变更
SwingUtilities.invokeLater { restarter.scheduleRestart(owner) }
}
// 如果是更新,那么也需要刷新 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.addMouseListener(object : MouseAdapter() {
override fun mouseClicked(e: MouseEvent) {
if (navigator.loading) return
if (path == navigator.workdir) {
setTextFieldText(path)
} else {
navigator.navigateTo(path.absolutePathString())
if (SwingUtilities.isLeftMouseButton(e)) {
if (navigator.loading) return
if (path == navigator.workdir) {
setTextFieldText(path)
} 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
if (e.actionCommand.isNullOrBlank()) {
if (bookmarkBtn.isBookmark) {
bookmarkBtn.deleteBookmark(workdir.absolutePathString())
bookmarkBtn.deleteBookmark(workdir.pathString)
} else {
bookmarkBtn.addBookmark(workdir.absolutePathString())
bookmarkBtn.addBookmark(workdir.pathString)
}
bookmarkBtn.isBookmark = bookmarkBtn.isBookmark.not()
} else {
@@ -263,7 +263,8 @@ internal class TransportPanel(
homeBtn.addActionListener(createSmartAction(object : AbstractAction() {
override fun actionPerformed(e: ActionEvent) {
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 ->
val newValue = evt.newValue
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
table.addMouseListener(object : MouseAdapter() {
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() {
override fun keyPressed(e: KeyEvent) {
@@ -494,6 +493,7 @@ internal class TransportPanel(
if (SystemInfo.isMacOS.not()) {
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")
}
@@ -601,7 +601,12 @@ internal class TransportPanel(
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) {

View File

@@ -139,7 +139,8 @@ internal class TransportTabbed(
}
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 support = DefaultTransportSupport(fs, fs.getPath(getDefaultLocalPath()))
val panel = TransportPanel(internalTransferManager, host, object : TransportSupportLoader {

View File

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