import AppKit @MainActor final class AppDelegate: NSObject, NSApplicationDelegate, NSWindowDelegate { private var windowObservers: [NSObjectProtocol] = [] func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { false } func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool { if !flag { showMainWindow() } return true } func applicationDidFinishLaunching(_ notification: Notification) { installWindowObservers() configureMainWindows() } func applicationDidBecomeActive(_ notification: Notification) { configureMainWindows() showMainWindowIfNeeded() } func windowShouldClose(_ sender: NSWindow) -> Bool { sender.orderOut(nil) return false } func configureMainWindows() { for window in NSApp.windows where isMainAppWindow(window) { window.isReleasedWhenClosed = false if window.delegate !== self { window.delegate = self } } } private func installWindowObservers() { let center = NotificationCenter.default windowObservers = [ center.addObserver( forName: NSWindow.didBecomeKeyNotification, object: nil, queue: .main ) { [weak self] _ in Task { @MainActor in self?.configureMainWindows() } }, center.addObserver( forName: NSApplication.didUpdateNotification, object: nil, queue: .main ) { [weak self] _ in Task { @MainActor in self?.configureMainWindows() } }, ] } private func showMainWindowIfNeeded() { guard !NSApp.windows.contains(where: { isMainAppWindow($0) && $0.isVisible }) else { return } showMainWindow() } private func showMainWindow() { guard let window = NSApp.windows.first(where: isMainAppWindow) else { return } window.makeKeyAndOrderFront(nil) NSApp.activate(ignoringOtherApps: true) } private func isMainAppWindow(_ window: NSWindow) -> Bool { guard window.canBecomeMain, !(window is NSPanel) else { return false } if window.title == "Sign in to Reddit" { return false } return window.level == .normal } }