Vorschau: Notch zurück, und der eigene Hintergrund wird wirklich versucht
Die Notch verschwand, sobald zum ersten Mal ein Bild geladen wurde: ein skalierbares Bild meldet seine eigene Größe als Wunschgröße, und die tausend Bildpunkte der Vorlage haben den Stapel auf tausend Punkte aufgeblasen. Notch, Menüleiste und Auslösefläche saßen dann am Rand dieser unsichtbaren Fläche und lagen außerhalb des Ausschnitts. Vorher fiel es nicht auf, weil nie ein Bild ankam. Das Bild wird jetzt auf Maß gebracht, bevor es in den Stapel geht. Und der eigentliche Wunsch: dein Hintergrundbild statt eines Ersatzes. Es liegt auf dem Schreibtisch, und dorthin fragt macOS beim ersten Lesen einmal nach. Die Prüfung mit isReadableFile, die ich vorher davorgesetzt hatte, beantwortet macOS in diesen Ordnern mit „nein", ohne zu fragen — die Vorschau blieb damit dauerhaft beim Ersatzbild, obwohl eine Freigabe möglich gewesen wäre. Jetzt wird gelesen statt geprüft, mit den drei nötigen Erklärungen in der Info.plist. Wird die Freigabe verweigert, bleibt es beim Systembild. Ein Tahoe-Hintergrund als Ersatz ist nicht drin: unter den Systembildern liegt davon nur „Tahoe Day.mov", ein Video von 170 Megabyte. Deshalb weiter Sonoma. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -87,7 +87,16 @@ private struct TriggerPreview: View {
|
||||
let areaHeight = min(notchHeight + trigger.extraHeight * scale, height)
|
||||
|
||||
ZStack(alignment: .top) {
|
||||
// Auf Maß gebracht, bevor es in den Stapel kommt: ein
|
||||
// skalierbares Bild meldet seine **eigene** Größe als
|
||||
// Wunschgröße, und die tausend Bildpunkte der Vorlage haben den
|
||||
// Stapel auf tausend Punkte aufgeblasen. Notch, Menüleiste und
|
||||
// Auslösefläche saßen dann am Rand dieser unsichtbaren Fläche
|
||||
// und lagen außerhalb des Ausschnitts — das Bild war da, alles
|
||||
// andere weg.
|
||||
background
|
||||
.frame(width: width, height: height)
|
||||
.clipped()
|
||||
|
||||
// Die Menüleiste als heller Streifen: sie erklärt, warum die
|
||||
// Fläche nicht beliebig breit werden sollte.
|
||||
@@ -153,23 +162,20 @@ private struct TriggerPreview: View {
|
||||
}
|
||||
}
|
||||
|
||||
/// Der eigene Schreibtischhintergrund — wenn er sich denn lesen lässt.
|
||||
/// Der Pfad des eigenen Schreibtischhintergrunds.
|
||||
///
|
||||
/// Die Prüfung ist der eigentliche Punkt: liegt das Bild in Schreibtisch,
|
||||
/// Dokumente oder Downloads, verweigert macOS den Zugriff, bis der Nutzer
|
||||
/// den Ordner freigibt. `NSWorkspace` liefert den Pfad trotzdem, und
|
||||
/// `NSImage` gibt dann still `nil` zurück — die Vorschau blieb schwarz, und
|
||||
/// zwar ohne jeden Hinweis, warum. Genau dieser Fall lag hier vor.
|
||||
/// Liegt er in Schreibtisch, Dokumente oder Downloads, fragt macOS beim
|
||||
/// ersten Lesen einmal nach — deshalb wird hier nicht vorab geprüft,
|
||||
/// sondern gleich gelesen. Eine Prüfung mit `isReadableFile` beantwortet
|
||||
/// macOS in diesen Ordnern mit „nein", ohne zu fragen; die Vorschau blieb
|
||||
/// damit dauerhaft beim Ersatzbild, obwohl eine Freigabe möglich gewesen
|
||||
/// wäre.
|
||||
///
|
||||
/// Um eine Ordnerfreigabe zu bitten, nur um ein Vorschaubildchen zu malen,
|
||||
/// wäre die falsche Frage. Also: lesbar oder nicht, und sonst weiter.
|
||||
/// Wird die Freigabe verweigert, kommt ein Standardhintergrund von macOS.
|
||||
@MainActor
|
||||
private static func ownWallpaperURL() -> URL? {
|
||||
guard let screen = NSScreen.main,
|
||||
let url = NSWorkspace.shared.desktopImageURL(for: screen),
|
||||
FileManager.default.isReadableFile(atPath: url.path)
|
||||
else { return nil }
|
||||
return url
|
||||
guard let screen = NSScreen.main else { return nil }
|
||||
return NSWorkspace.shared.desktopImageURL(for: screen)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user