import Foundation import IOKit.pwr_mgt /// Wann das Panel wegbleibt. public enum NotchSuppression { /// Beide Bedingungen zusammen, nicht eine davon. /// /// Die erste Fassung hat jedes Vollbildfenster als Grund gewertet. Damit war /// die Notch tot, sobald jemand Xcode im Vollbild hatte — und das ist kein /// Zustand, in dem man auf seinen Kalender verzichten will. Gemeint war /// immer nur der Film über den ganzen Bildschirm. public static func shouldSuppress(hasFullScreenWindow: Bool, preventsDisplaySleep: Bool) -> Bool { hasFullScreenWindow && preventsDisplaySleep } /// Ob gerade etwas den Bildschirm wachhält. /// /// Das ist der verlässlichste Hinweis auf laufende Wiedergabe, den macOS /// ohne Sonderrechte hergibt: jedes Programm, das ein Video abspielt, setzt /// eine solche Sperre, damit der Bildschirm nicht mitten im Film dunkel /// wird. Ein Textfenster im Vollbild tut das nicht. public static var isPreventingDisplaySleep: Bool { var assertions: Unmanaged? guard IOPMCopyAssertionsStatus(&assertions) == kIOReturnSuccess, let status = assertions?.takeRetainedValue() as? [String: Int] else { return false } // Beide Namen kommen vor: der ältere von IOKit und der, den // AVFoundation benutzt. let names = [kIOPMAssertionTypeNoDisplaySleep as String, kIOPMAssertionTypePreventUserIdleDisplaySleep as String] return names.contains { (status[$0] ?? 0) > 0 } } }