From 465d6e089ab551779b928e9ee147a2759f17dcef Mon Sep 17 00:00:00 2001 From: Hariharan Mudaliar Date: Fri, 23 Jan 2026 13:12:22 +0530 Subject: [PATCH] BugFix: Lock Screen Widgets going away to other screens --- .../LockScreenDisplayContextProvider.swift | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/DynamicIsland/managers/LockScreenDisplayContextProvider.swift b/DynamicIsland/managers/LockScreenDisplayContextProvider.swift index 933f172..e181185 100644 --- a/DynamicIsland/managers/LockScreenDisplayContextProvider.swift +++ b/DynamicIsland/managers/LockScreenDisplayContextProvider.swift @@ -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,