From c477d24d67c359c4a5edc34b9b23232649dcfb6f Mon Sep 17 00:00:00 2001 From: Roopesh Chander Date: Thu, 17 Jan 2019 01:44:40 +0530 Subject: macOS: Manage tunnels: Keyboard shortcuts Signed-off-by: Roopesh Chander --- .../ManageTunnelsRootViewController.swift | 27 ++++++++++++++++++++++ .../TunnelDetailTableViewController.swift | 8 +++++++ 2 files changed, 35 insertions(+) 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 { -- cgit v1.2.3-59-g8ed1b