mirror of
https://github.com/FBukovina/Atoll.git
synced 2026-10-27 15:14:33 +00:00
BugFix: Lock Screen Widgets going away to other screens
This commit is contained in:
parent
850bdc592b
commit
465d6e089a
1 changed files with 25 additions and 1 deletions
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue