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:
@@ -40,6 +40,12 @@
|
|||||||
<string>Onyx zeigt das Wetter an deinem aktuellen Standort. Du kannst stattdessen auch einen festen Ort wählen.</string>
|
<string>Onyx zeigt das Wetter an deinem aktuellen Standort. Du kannst stattdessen auch einen festen Ort wählen.</string>
|
||||||
<key>NSAppleEventsUsageDescription</key>
|
<key>NSAppleEventsUsageDescription</key>
|
||||||
<string>Onyx steuert Spotify und Musik, wenn die universelle Medienschnittstelle nicht verfügbar ist.</string>
|
<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>
|
<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>
|
<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>
|
<key>NSAudioCaptureUsageDescription</key>
|
||||||
|
|||||||
@@ -87,7 +87,16 @@ private struct TriggerPreview: View {
|
|||||||
let areaHeight = min(notchHeight + trigger.extraHeight * scale, height)
|
let areaHeight = min(notchHeight + trigger.extraHeight * scale, height)
|
||||||
|
|
||||||
ZStack(alignment: .top) {
|
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
|
background
|
||||||
|
.frame(width: width, height: height)
|
||||||
|
.clipped()
|
||||||
|
|
||||||
// Die Menüleiste als heller Streifen: sie erklärt, warum die
|
// Die Menüleiste als heller Streifen: sie erklärt, warum die
|
||||||
// Fläche nicht beliebig breit werden sollte.
|
// 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,
|
/// Liegt er in Schreibtisch, Dokumente oder Downloads, fragt macOS beim
|
||||||
/// Dokumente oder Downloads, verweigert macOS den Zugriff, bis der Nutzer
|
/// ersten Lesen einmal nach — deshalb wird hier nicht vorab geprüft,
|
||||||
/// den Ordner freigibt. `NSWorkspace` liefert den Pfad trotzdem, und
|
/// sondern gleich gelesen. Eine Prüfung mit `isReadableFile` beantwortet
|
||||||
/// `NSImage` gibt dann still `nil` zurück — die Vorschau blieb schwarz, und
|
/// macOS in diesen Ordnern mit „nein", ohne zu fragen; die Vorschau blieb
|
||||||
/// zwar ohne jeden Hinweis, warum. Genau dieser Fall lag hier vor.
|
/// damit dauerhaft beim Ersatzbild, obwohl eine Freigabe möglich gewesen
|
||||||
|
/// wäre.
|
||||||
///
|
///
|
||||||
/// Um eine Ordnerfreigabe zu bitten, nur um ein Vorschaubildchen zu malen,
|
/// Wird die Freigabe verweigert, kommt ein Standardhintergrund von macOS.
|
||||||
/// wäre die falsche Frage. Also: lesbar oder nicht, und sonst weiter.
|
|
||||||
@MainActor
|
@MainActor
|
||||||
private static func ownWallpaperURL() -> URL? {
|
private static func ownWallpaperURL() -> URL? {
|
||||||
guard let screen = NSScreen.main,
|
guard let screen = NSScreen.main else { return nil }
|
||||||
let url = NSWorkspace.shared.desktopImageURL(for: screen),
|
return NSWorkspace.shared.desktopImageURL(for: screen)
|
||||||
FileManager.default.isReadableFile(atPath: url.path)
|
|
||||||
else { return nil }
|
|
||||||
return url
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user