Refactored MenuView into MenuItemToggleView
This change fixes some subtle state bugs in the switch handling by making isOn a direct function of the Tunnel.
This commit is contained in:
parent
5438542284
commit
32e4e9d1d7
4 changed files with 108 additions and 93 deletions
51
Apple/App/AppDelegate.swift
Normal file
51
Apple/App/AppDelegate.swift
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
#if os(macOS)
|
||||
import AppKit
|
||||
import SwiftUI
|
||||
|
||||
@MainActor
|
||||
class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
private let quitItem: NSMenuItem = {
|
||||
let quitItem = NSMenuItem(
|
||||
title: "Quit Burrow",
|
||||
action: #selector(NSApplication.terminate(_:)),
|
||||
keyEquivalent: "q"
|
||||
)
|
||||
quitItem.target = NSApplication.shared
|
||||
quitItem.keyEquivalentModifierMask = .command
|
||||
return quitItem
|
||||
}()
|
||||
|
||||
private let toggleItem: NSMenuItem = {
|
||||
let toggleView = NSHostingView(rootView: MenuItemToggleView(tunnel: BurrowApp.tunnel))
|
||||
toggleView.frame.size = CGSize(width: 300, height: 32)
|
||||
toggleView.autoresizingMask = [.width]
|
||||
|
||||
let toggleItem = NSMenuItem()
|
||||
toggleItem.view = toggleView
|
||||
return toggleItem
|
||||
}()
|
||||
|
||||
private lazy var menu: NSMenu = {
|
||||
let menu = NSMenu()
|
||||
menu.items = [
|
||||
toggleItem,
|
||||
.separator(),
|
||||
quitItem
|
||||
]
|
||||
return menu
|
||||
}()
|
||||
|
||||
private lazy var statusItem: NSStatusItem = {
|
||||
let statusBar = NSStatusBar.system
|
||||
let statusItem = statusBar.statusItem(withLength: NSStatusItem.squareLength)
|
||||
if let button = statusItem.button {
|
||||
button.image = NSImage(systemSymbolName: "network.badge.shield.half.filled", accessibilityDescription: nil)
|
||||
}
|
||||
return statusItem
|
||||
}()
|
||||
|
||||
func applicationDidFinishLaunching(_ notification: Notification) {
|
||||
statusItem.menu = menu
|
||||
}
|
||||
}
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue