BugFix: Lock Screen Widgets going away to other screens

This commit is contained in:
Hariharan Mudaliar 2026-01-23 13:12:22 +05:30
commit 465d6e089a
No known key found for this signature in database
GPG key ID: 025583EB0BE5640E

View file

@ -1,4 +1,5 @@
import AppKit
import CoreGraphics
struct LockScreenDisplayContext {
let screen: NSScreen
@ -30,7 +31,7 @@ final class LockScreenDisplayContextProvider {
@discardableResult
func refresh(reason: String) -> LockScreenDisplayContext? {
guard let screen = NSScreen.main ?? NSScreen.screens.first else {
guard let screen = preferredLockScreen() else {
context = nil
return nil
}
@ -52,6 +53,29 @@ final class LockScreenDisplayContextProvider {
return refresh(reason: "snapshot-miss")
}
private func preferredLockScreen() -> NSScreen? {
if let builtin = NSScreen.screens.first(where: { screen in
guard let number = screen.deviceDescription[NSDeviceDescriptionKey("NSScreenNumber")] as? NSNumber else {
return false
}
return CGDisplayIsBuiltin(CGDirectDisplayID(number.uint32Value)) != 0
}) {
return builtin
}
let mainDisplayID = CGMainDisplayID()
if let mainScreen = NSScreen.screens.first(where: { screen in
guard let number = screen.deviceDescription[NSDeviceDescriptionKey("NSScreenNumber")] as? NSNumber else {
return false
}
return CGDirectDisplayID(number.uint32Value) == mainDisplayID
}) {
return mainScreen
}
return NSScreen.main ?? NSScreen.screens.first
}
private func registerObservers() {
screenChangeObserver = NotificationCenter.default.addObserver(
forName: NSApplication.didChangeScreenParametersNotification,