From: Roopesh Chander Date: Wed, 16 Jan 2019 20:14:40 +0000 (+0530) Subject: macOS: Manage tunnels: Keyboard shortcuts X-Git-Tag: 0.0.20190207-1~102 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c477d24d67c359c4a5edc34b9b23232649dcfb6f;p=thirdparty%2Fwireguard-apple.git macOS: Manage tunnels: Keyboard shortcuts Signed-off-by: Roopesh Chander --- diff --git a/WireGuard/WireGuard/UI/macOS/ViewController/ManageTunnelsRootViewController.swift b/WireGuard/WireGuard/UI/macOS/ViewController/ManageTunnelsRootViewController.swift index 1b1dc73..d8e9cfe 100644 --- a/WireGuard/WireGuard/UI/macOS/ViewController/ManageTunnelsRootViewController.swift +++ b/WireGuard/WireGuard/UI/macOS/ViewController/ManageTunnelsRootViewController.swift @@ -7,6 +7,7 @@ class ManageTunnelsRootViewController: NSViewController { let tunnelsManager: TunnelsManager var tunnelsListVC: TunnelsListTableViewController? + var tunnelDetailVC: TunnelDetailTableViewController? let tunnelDetailContainerView = NSView() var tunnelDetailContentVC: NSViewController? @@ -80,10 +81,36 @@ extension ManageTunnelsRootViewController: TunnelsListTableViewControllerDelegat func tunnelSelected(tunnel: TunnelContainer) { let tunnelDetailVC = TunnelDetailTableViewController(tunnelsManager: tunnelsManager, tunnel: tunnel) setTunnelDetailContentVC(tunnelDetailVC) + self.tunnelDetailVC = tunnelDetailVC } func tunnelsListEmpty() { let noTunnelsVC = NoTunnelsDetailViewController(tunnelsManager: tunnelsManager) setTunnelDetailContentVC(noTunnelsVC) + self.tunnelDetailVC = nil + } +} + +extension ManageTunnelsRootViewController { + override func keyDown(with event: NSEvent) { + let modifierFlags = event.modifierFlags.rawValue & NSEvent.ModifierFlags.deviceIndependentFlagsMask.rawValue + let isCmdOrCmdShiftDown = (modifierFlags == NSEvent.ModifierFlags.command.rawValue || modifierFlags == NSEvent.ModifierFlags.command.rawValue | NSEvent.ModifierFlags.shift.rawValue) + + if event.specialKey == .delete { + tunnelsListVC?.handleRemoveTunnelAction() + } else if isCmdOrCmdShiftDown { + switch event.charactersIgnoringModifiers { + case "n": + tunnelsListVC?.handleAddEmptyTunnelAction() + case "i": + tunnelsListVC?.handleImportTunnelAction() + case "t": + tunnelDetailVC?.handleToggleActiveStatusAction() + case "e": + tunnelDetailVC?.handleEditTunnelAction() + default: + break + } + } } } diff --git a/WireGuard/WireGuard/UI/macOS/ViewController/TunnelDetailTableViewController.swift b/WireGuard/WireGuard/UI/macOS/ViewController/TunnelDetailTableViewController.swift index 2c7f25a..adb32aa 100644 --- a/WireGuard/WireGuard/UI/macOS/ViewController/TunnelDetailTableViewController.swift +++ b/WireGuard/WireGuard/UI/macOS/ViewController/TunnelDetailTableViewController.swift @@ -201,6 +201,14 @@ class TunnelDetailTableViewController: NSViewController { presentAsSheet(tunnelEditVC) } + @objc func handleToggleActiveStatusAction() { + if tunnel.status == .inactive { + tunnelsManager.startActivation(of: tunnel) + } else if tunnel.status == .active { + tunnelsManager.startDeactivation(of: tunnel) + } + } + @objc func statusCheckboxToggled(sender: AnyObject?) { guard let statusCheckbox = sender as? NSButton else { return } if statusCheckbox.state == .on {