From dbeb389d26e8408509309a5784784042a5c478e4 Mon Sep 17 00:00:00 2001 From: Roopesh Chander Date: Tue, 19 Mar 2019 15:35:15 +0530 Subject: [PATCH] macOS: Add 'Deactivate' status menu item --- WireGuard/WireGuard/UI/macOS/StatusMenu.swift | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/WireGuard/WireGuard/UI/macOS/StatusMenu.swift b/WireGuard/WireGuard/UI/macOS/StatusMenu.swift index ada33dc..07b707c 100644 --- a/WireGuard/WireGuard/UI/macOS/StatusMenu.swift +++ b/WireGuard/WireGuard/UI/macOS/StatusMenu.swift @@ -13,6 +13,7 @@ class StatusMenu: NSMenu { var statusMenuItem: NSMenuItem? var networksMenuItem: NSMenuItem? + var deactivateMenuItem: NSMenuItem? var firstTunnelMenuItemIndex = 0 var numberOfTunnelMenuItems = 0 @@ -53,16 +54,22 @@ class StatusMenu: NSMenu { networksMenuItem.isEnabled = false networksMenuItem.isHidden = true addItem(networksMenuItem) + let deactivateMenuItem = NSMenuItem(title: tr("macToggleStatusButtonDeactivate"), action: #selector(deactivateClicked), keyEquivalent: "") + deactivateMenuItem.target = self + deactivateMenuItem.isHidden = true + addItem(deactivateMenuItem) self.statusMenuItem = statusMenuItem self.networksMenuItem = networksMenuItem + self.deactivateMenuItem = deactivateMenuItem } func updateStatusMenuItems(with tunnel: TunnelContainer?) { - guard let statusMenuItem = statusMenuItem, let networksMenuItem = networksMenuItem else { return } + guard let statusMenuItem = statusMenuItem, let networksMenuItem = networksMenuItem, let deactivateMenuItem = deactivateMenuItem else { return } guard let tunnel = tunnel else { statusMenuItem.title = tr(format: "macStatus (%@)", tr("tunnelStatusInactive")) networksMenuItem.title = "" networksMenuItem.isHidden = true + deactivateMenuItem.isHidden = true return } var statusText: String @@ -98,6 +105,7 @@ class StatusMenu: NSMenu { } networksMenuItem.isHidden = false } + deactivateMenuItem.isHidden = tunnel.status != .active } func addTunnelMenuItems() -> Bool { @@ -127,6 +135,12 @@ class StatusMenu: NSMenu { addItem(quitItem) } + @objc func deactivateClicked() { + if let currentTunnel = currentTunnel { + tunnelsManager.startDeactivation(of: currentTunnel) + } + } + @objc func tunnelClicked(sender: AnyObject) { guard let tunnelMenuItem = sender as? TunnelMenuItem else { return } if tunnelMenuItem.state == .off {