From 3e850963fc28ef68e5f24ed913ac208b651856fb Mon Sep 17 00:00:00 2001 From: Roopesh Chander Date: Thu, 17 Jan 2019 01:44:40 +0530 Subject: [PATCH] macOS: Manage tunnels: Keyboard shortcuts --- .../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 {