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:
Scarriffle
2026-08-13 23:54:11 +02:00
parent a2be84f4d5
commit 152d36c904
2 changed files with 25 additions and 13 deletions

View File

@@ -40,6 +40,12 @@
<string>Onyx zeigt das Wetter an deinem aktuellen Standort. Du kannst stattdessen auch einen festen Ort wählen.</string>
<key>NSAppleEventsUsageDescription</key>
<string>Onyx steuert Spotify und Musik, wenn die universelle Medienschnittstelle nicht verfügbar ist.</string>
<key>NSDesktopFolderUsageDescription</key>
<string>Onyx zeigt dein Hintergrundbild in der Vorschau der Auslösefläche, damit man den nachgebildeten Bildschirm wiedererkennt. Liegt das Bild auf dem Schreibtisch, braucht Onyx dafür einmal deine Erlaubnis.</string>
<key>NSDocumentsFolderUsageDescription</key>
<string>Onyx zeigt dein Hintergrundbild in der Vorschau der Auslösefläche. Liegt das Bild in „Dokumente", braucht Onyx dafür einmal deine Erlaubnis.</string>
<key>NSDownloadsFolderUsageDescription</key>
<string>Onyx zeigt dein Hintergrundbild in der Vorschau der Auslösefläche. Liegt das Bild in „Downloads", braucht Onyx dafür einmal deine Erlaubnis.</string>
<key>NSMicrophoneUsageDescription</key>
<string>Onyx zeigt im Mixer an, wie stark dein Mikrofon gerade ausschlägt. Gemessen wird nur, solange die Ansicht offen ist — aufgezeichnet wird nichts.</string>
<key>NSAudioCaptureUsageDescription</key>

View File

@@ -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)
}
}