diff --git a/Onyx/Info.plist b/Onyx/Info.plist index 0ed7710..800b61c 100644 --- a/Onyx/Info.plist +++ b/Onyx/Info.plist @@ -40,6 +40,12 @@ Onyx zeigt das Wetter an deinem aktuellen Standort. Du kannst stattdessen auch einen festen Ort wählen. NSAppleEventsUsageDescription Onyx steuert Spotify und Musik, wenn die universelle Medienschnittstelle nicht verfügbar ist. + NSDesktopFolderUsageDescription + 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. + NSDocumentsFolderUsageDescription + Onyx zeigt dein Hintergrundbild in der Vorschau der Auslösefläche. Liegt das Bild in „Dokumente", braucht Onyx dafür einmal deine Erlaubnis. + NSDownloadsFolderUsageDescription + Onyx zeigt dein Hintergrundbild in der Vorschau der Auslösefläche. Liegt das Bild in „Downloads", braucht Onyx dafür einmal deine Erlaubnis. NSMicrophoneUsageDescription Onyx zeigt im Mixer an, wie stark dein Mikrofon gerade ausschlägt. Gemessen wird nur, solange die Ansicht offen ist — aufgezeichnet wird nichts. NSAudioCaptureUsageDescription diff --git a/Packages/OnyxKit/Sources/OnyxNotch/TriggerAreaSettings.swift b/Packages/OnyxKit/Sources/OnyxNotch/TriggerAreaSettings.swift index c7a790d..5ecace8 100644 --- a/Packages/OnyxKit/Sources/OnyxNotch/TriggerAreaSettings.swift +++ b/Packages/OnyxKit/Sources/OnyxNotch/TriggerAreaSettings.swift @@ -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) } }