import AppKit extension PHBarDelegate { /// Build, show, and start a bar for `screen`. Returns `false` (and prints to /// stderr) if the screen's theme or blocks fail to load, so one bad screen /// can't take down the others. @discardableResult func addBar(for screen: NSScreen) -> Bool { let controller: BarController do { controller = try factory.make(for: screen) } catch { stderr("skipping screen \(screen.localizedName): \(error)") return false } let window = BarWindow(controller: controller) window.orderFront(nil) windows.append(window) controller.startAutoRefresh() return true } /// Stop refresh, hide, and drop the bar running on `screen` (if any). func removeBar(for screen: NSScreen) { guard let index = windows.firstIndex(where: { $0.barController.screen === screen }) else { return } windows[index].barController.stopAutoRefresh() windows[index].orderOut(nil) windows.remove(at: index) } /// The window currently running on `screen`, if any. func window(for screen: NSScreen) -> BarWindow? { windows.first { $0.barController.screen === screen } } /// The window currently running on the monitor named `name`, if any. func window(named name: String) -> BarWindow? { windows.first { $0.barController.screen.localizedName == name } } }