mirror of
https://github.com/FBukovina/Atoll.git
synced 2026-10-28 23:54:32 +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 AppKit
|
||||||
|
import CoreGraphics
|
||||||
|
|
||||||
struct LockScreenDisplayContext {
|
struct LockScreenDisplayContext {
|
||||||
let screen: NSScreen
|
let screen: NSScreen
|
||||||
|
|
@ -30,7 +31,7 @@ final class LockScreenDisplayContextProvider {
|
||||||
|
|
||||||
@discardableResult
|
@discardableResult
|
||||||
func refresh(reason: String) -> LockScreenDisplayContext? {
|
func refresh(reason: String) -> LockScreenDisplayContext? {
|
||||||
guard let screen = NSScreen.main ?? NSScreen.screens.first else {
|
guard let screen = preferredLockScreen() else {
|
||||||
context = nil
|
context = nil
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
@ -52,6 +53,29 @@ final class LockScreenDisplayContextProvider {
|
||||||
return refresh(reason: "snapshot-miss")
|
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() {
|
private func registerObservers() {
|
||||||
screenChangeObserver = NotificationCenter.default.addObserver(
|
screenChangeObserver = NotificationCenter.default.addObserver(
|
||||||
forName: NSApplication.didChangeScreenParametersNotification,
|
forName: NSApplication.didChangeScreenParametersNotification,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue