macOS: Select the active tunnel when showing the manage tunnels window

Signed-off-by: Roopesh Chander <roop@roopc.net>
This commit is contained in:
Roopesh Chander
2019-01-24 18:35:07 +05:30
parent 52eec55d36
commit eabeb8ff05
2 changed files with 18 additions and 1 deletions
@@ -226,6 +226,10 @@ class TunnelsManager {
return tunnels[index] return tunnels[index]
} }
func index(of tunnel: TunnelContainer) -> Int? {
return tunnels.firstIndex(of: tunnel)
}
func tunnel(named tunnelName: String) -> TunnelContainer? { func tunnel(named tunnelName: String) -> TunnelContainer? {
return tunnels.first { $0.name == tunnelName } return tunnels.first { $0.name == tunnelName }
} }
@@ -61,7 +61,8 @@ class TunnelsListTableViewController: NSViewController {
override func loadView() { override func loadView() {
tableView.dataSource = self tableView.dataSource = self
tableView.delegate = self tableView.delegate = self
let isSelected = selectTunnel(at: 0)
let isSelected = selectTunnelInOperation() || selectTunnel(at: 0)
if !isSelected { if !isSelected {
delegate?.tunnelsListEmpty() delegate?.tunnelsListEmpty()
} }
@@ -110,6 +111,18 @@ class TunnelsListTableViewController: NSViewController {
view = containerView view = containerView
} }
override func viewWillAppear() {
selectTunnelInOperation()
}
@discardableResult
func selectTunnelInOperation() -> Bool {
if let currentTunnel = tunnelsManager.tunnelInOperation(), let indexToSelect = tunnelsManager.index(of: currentTunnel) {
return selectTunnel(at: indexToSelect)
}
return false
}
@objc func buttonBarClicked(sender: AnyObject?) { @objc func buttonBarClicked(sender: AnyObject?) {
guard let buttonBar = sender as? NSSegmentedControl else { return } guard let buttonBar = sender as? NSSegmentedControl else { return }
// We have to resort to explicitly showing the menu instead of using NSSegmentedControl.setMenu() // We have to resort to explicitly showing the menu instead of using NSSegmentedControl.setMenu()