43 lines
1.3 KiB
Swift
43 lines
1.3 KiB
Swift
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 }
|
|
}
|
|
}
|