]> git.ipfire.org Git - thirdparty/wireguard-apple.git/commitdiff
macOS: Add 'Deactivate' status menu item
authorRoopesh Chander <roop@roopc.net>
Tue, 19 Mar 2019 10:05:15 +0000 (15:35 +0530)
committerJason A. Donenfeld <Jason@zx2c4.com>
Tue, 19 Mar 2019 20:23:46 +0000 (21:23 +0100)
Signed-off-by: Roopesh Chander <roop@roopc.net>
WireGuard/WireGuard/UI/macOS/StatusMenu.swift

index ada33dc0587979d3c99b77d1a0c724f47b6668d3..07b707cea385fb3c13fbb695d39485aec5295be4 100644 (file)
@@ -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 {