diff --git a/src/main/kotlin/app/termora/MyTabbedPane.kt b/src/main/kotlin/app/termora/MyTabbedPane.kt index 182c0af..e8c87e2 100644 --- a/src/main/kotlin/app/termora/MyTabbedPane.kt +++ b/src/main/kotlin/app/termora/MyTabbedPane.kt @@ -23,6 +23,7 @@ class MyTabbedPane : FlatTabbedPane() { .getData(DataProviders.TermoraFrame) as TermoraFrame init { + isFocusable = false initEvents() } diff --git a/src/main/kotlin/app/termora/NewHostTree.kt b/src/main/kotlin/app/termora/NewHostTree.kt index a17d616..0e4fe48 100644 --- a/src/main/kotlin/app/termora/NewHostTree.kt +++ b/src/main/kotlin/app/termora/NewHostTree.kt @@ -30,10 +30,7 @@ import java.awt.Dimension import java.awt.datatransfer.DataFlavor import java.awt.datatransfer.Transferable import java.awt.datatransfer.UnsupportedFlavorException -import java.awt.event.ActionEvent -import java.awt.event.ActionListener -import java.awt.event.MouseAdapter -import java.awt.event.MouseEvent +import java.awt.event.* import java.io.* import java.util.* import java.util.function.Function @@ -216,6 +213,26 @@ class NewHostTree : JXTree() { } }) + addKeyListener(object : KeyAdapter() { + override fun keyPressed(e: KeyEvent) { + if (e.keyCode == KeyEvent.VK_ENTER && doubleClickConnection) { + val nodes = getSelectionHostTreeNodes(false) + if (nodes.size == 1 && nodes.first().host.protocol == Protocol.Folder) { + val path = TreePath(model.getPathToRoot(nodes.first())) + if (isExpanded(path)) { + collapsePath(path) + } else { + expandPath(path) + } + } else { + for (node in getSelectionHostTreeNodes(true)) { + openHostAction?.actionPerformed(OpenHostActionEvent(e.source, node.host, e)) + } + } + } + } + }) + // rename getCellEditor().addCellEditorListener(object : CellEditorListener { override fun editingStopped(e: ChangeEvent) { diff --git a/src/main/kotlin/app/termora/TerminalTabbed.kt b/src/main/kotlin/app/termora/TerminalTabbed.kt index 03a7c8a..14d56a3 100644 --- a/src/main/kotlin/app/termora/TerminalTabbed.kt +++ b/src/main/kotlin/app/termora/TerminalTabbed.kt @@ -78,21 +78,14 @@ class TerminalTabbed( tabs[oldIndex].onLostFocus() } + tabbedPane.getComponentAt(newIndex).requestFocusInWindow() + if (newIndex >= 0 && tabs.size > newIndex) { tabs[newIndex].onGrabFocus() } - SwingUtilities.invokeLater { tabbedPane.getComponentAt(newIndex).requestFocusInWindow() } - } - // 选择变动 - tabbedPane.addChangeListener { - if (tabbedPane.selectedIndex >= 0) { - val c = tabbedPane.getComponentAt(tabbedPane.selectedIndex) - c.requestFocusInWindow() - } - } // 右键菜单 tabbedPane.addMouseListener(object : MouseAdapter() { diff --git a/src/main/kotlin/app/termora/WelcomePanel.kt b/src/main/kotlin/app/termora/WelcomePanel.kt index aafa807..57034ed 100644 --- a/src/main/kotlin/app/termora/WelcomePanel.kt +++ b/src/main/kotlin/app/termora/WelcomePanel.kt @@ -13,7 +13,9 @@ import com.formdev.flatlaf.extras.components.FlatTextField import org.apache.commons.lang3.StringUtils import org.jdesktop.swingx.action.ActionManager import java.awt.BorderLayout +import java.awt.Component import java.awt.Dimension +import java.awt.KeyboardFocusManager import java.awt.event.ActionEvent import java.awt.event.ComponentAdapter import java.awt.event.ComponentEvent @@ -32,6 +34,7 @@ class WelcomePanel(private val windowScope: WindowScope) : JPanel(BorderLayout() private var fullContent = properties.getString("WelcomeFullContent", "false").toBoolean() private val dataProviderSupport = DataProviderSupport() private val hostTreeModel = hostTree.model as NewHostTreeModel + private var lastFocused: Component? = null private val filterableHostTreeModel = FilterableHostTreeModel(hostTree) { searchTextField.text.isBlank() } @@ -258,6 +261,14 @@ class WelcomePanel(private val windowScope: WindowScope) : JPanel(BorderLayout() return false } + override fun onLostFocus() { + lastFocused = KeyboardFocusManager.getCurrentKeyboardFocusManager().focusOwner + } + + override fun onGrabFocus() { + SwingUtilities.invokeLater { lastFocused?.requestFocusInWindow() } + } + override fun dispose() { properties.putString("WelcomeFullContent", fullContent.toString()) properties.putString("Welcome.HostTree.state", TreeUtils.saveExpansionState(hostTree))