import Cocoa class PrimaryWindowController: NSWindowController, NSWindowDelegate { // This is used to programmatically control tabs. weak var windowManager: PrimaryWindowManager? // This should be set to true once a surface has been initialized once. var didInitializeFromSurface: Bool = false // This is required for the "+" button to show up in the tab bar to add a // new tab. override func newWindowForTab(_ sender: Any?) { guard let window = self.window as? PrimaryWindow else { preconditionFailure("Expected window to be loaded") } guard let manager = self.windowManager else { return } manager.triggerNewTab(for: window) } deinit { // I don't know if this is the right place, but because of WindowAccessor in our // SwiftUI hierarchy, we have a reference cycle between view and window and windows // are never freed. When the window is closed, the window controller is deinitialized, // so we can use this opportunity detach the view from the window and break the cycle. if let window = self.window { window.contentView = nil } } func windowDidBecomeKey(_ notification: Notification) { self.windowManager?.relabelTabs() } func windowWillClose(_ notification: Notification) { // Tabs must be relabeled when a window is closed because this event // does not fire the "windowDidBecomeKey" event on the newly focused // window self.windowManager?.relabelTabs() } }