diff options
author | Roopesh Chander <roop@roopc.net> | 2018-12-28 19:29:09 +0530 |
---|---|---|
committer | Roopesh Chander <roop@roopc.net> | 2019-01-14 14:52:29 +0530 |
commit | b5751b63214b51f2b576eb40694f6bb7f9bcd7d4 (patch) | |
tree | 11d8d008b27709b1e66fbb91df0def63763aa411 /WireGuard/WireGuard/UI/macOS | |
parent | macOS: Add status bar icon (diff) | |
download | wireguard-apple-b5751b63214b51f2b576eb40694f6bb7f9bcd7d4.tar.xz wireguard-apple-b5751b63214b51f2b576eb40694f6bb7f9bcd7d4.zip |
macOS: Create status bar with tunnel names
Signed-off-by: Roopesh Chander <roop@roopc.net>
Diffstat (limited to 'WireGuard/WireGuard/UI/macOS')
-rw-r--r-- | WireGuard/WireGuard/UI/macOS/AppDelegate.swift | 24 | ||||
-rw-r--r-- | WireGuard/WireGuard/UI/macOS/StatusMenu.swift | 34 |
2 files changed, 52 insertions, 6 deletions
diff --git a/WireGuard/WireGuard/UI/macOS/AppDelegate.swift b/WireGuard/WireGuard/UI/macOS/AppDelegate.swift index 9630135..ba3e902 100644 --- a/WireGuard/WireGuard/UI/macOS/AppDelegate.swift +++ b/WireGuard/WireGuard/UI/macOS/AppDelegate.swift @@ -6,14 +6,26 @@ import Cocoa @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate { + var statusItem: NSStatusItem? + func applicationDidFinishLaunching(_ aNotification: Notification) { - // Insert code here to initialize your application - } + TunnelsManager.create { [weak self] result in + guard let self = self else { return } + guard result.isSuccess else { return } // TODO: Show alert - func applicationWillTerminate(_ aNotification: Notification) { - // Insert code here to tear down your application + let tunnelsManager: TunnelsManager = result.value! + let statusMenu = StatusMenu(tunnelsManager: tunnelsManager) + self.statusItem = createStatusBarItem(with: statusMenu) + } } - - } +func createStatusBarItem(with statusMenu: StatusMenu) -> NSStatusItem { + let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength) + if let statusBarImage = NSImage(named: "WireGuardMacStatusBarIcon") { + statusBarImage.isTemplate = true + statusItem.button?.image = statusBarImage + } + statusItem.menu = statusMenu + return statusItem +} diff --git a/WireGuard/WireGuard/UI/macOS/StatusMenu.swift b/WireGuard/WireGuard/UI/macOS/StatusMenu.swift new file mode 100644 index 0000000..4ac4b91 --- /dev/null +++ b/WireGuard/WireGuard/UI/macOS/StatusMenu.swift @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +// Copyright © 2018 WireGuard LLC. All Rights Reserved. + +import Cocoa + +class StatusMenu: NSMenu { + + let tunnelsManager: TunnelsManager + + init(tunnelsManager: TunnelsManager) { + self.tunnelsManager = tunnelsManager + super.init(title: "WireGuard Status Bar Menu") + addTunnelMenuItems() + } + + required init(coder decoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func addTunnelMenuItems() { + for index in 0 ..< tunnelsManager.numberOfTunnels() { + let tunnel = tunnelsManager.tunnel(at: index) + let menuItem = NSMenuItem(title: tunnel.name, action: #selector(tunnelClicked(sender:)), keyEquivalent: "") + menuItem.target = self + menuItem.representedObject = tunnel + addItem(menuItem) + } + } + + @objc func tunnelClicked(sender: AnyObject) { + guard let tunnel = sender.representedObject as? TunnelContainer else { return } + print("Tunnel \(tunnel.name) clicked") + } +} |