diff --git a/Flixy/Views/Player/PlayerView.swift b/Flixy/Views/Player/PlayerView.swift index 90cf939..f941839 100644 --- a/Flixy/Views/Player/PlayerView.swift +++ b/Flixy/Views/Player/PlayerView.swift @@ -22,6 +22,14 @@ struct PlayerView: View { @Environment(PlaybackDiagnostics.self) private var diagnostics @Environment(\.flixyAccent) private var accent + /// Wie hoch die Fensterleiste auf dem Mac ist. + /// + /// Fest, weil es keine Auskunft darüber gibt, die hier ankäme: die + /// Sicherheitsränder einer Szene kennen die Fensterleiste nicht, sie + /// gehört dem System. Achtundzwanzig Punkte sind das Maß eines + /// gewöhnlichen Fensters. + private static let titleBarHeight: CGFloat = 28 + @State private var showsControls = true @State private var trackPicker: TrackPickerSheet.Kind? @State private var showsQualityChoice = false @@ -105,6 +113,18 @@ struct PlayerView: View { Spacer() } .padding(FlixySpacing.loose) + // **Unter der Fensterleiste beginnen.** + // + // Der Player deckt das ganze Fenster ab, und auf dem Mac + // zeichnet das System seine Ampelknöpfe darüber. Die + // Kopfzeile lag dadurch nicht nur optisch unter ihnen: der + // ganze Streifen gehört der Fensterleiste, und die + // schluckt jeden Klick. Verkleinern, Schließen, Tonspur, + // Untertitel und die Qualitätsstufe waren dort tot — und + // ein zweiter Klick auf dieselbe Stelle legte das Fenster + // ins Dock, weil das der Doppelklick auf eine + // Fensterleiste tut. + .padding(.top, FlixyPlatform.isMac ? Self.titleBarHeight : 0) } } } diff --git a/Flixy/Views/SignIn/JellyfinSignInView.swift b/Flixy/Views/SignIn/JellyfinSignInView.swift index 79df354..e3adbb5 100644 --- a/Flixy/Views/SignIn/JellyfinSignInView.swift +++ b/Flixy/Views/SignIn/JellyfinSignInView.swift @@ -190,6 +190,16 @@ struct JellyfinSignInView: View { .submitLabel(.next) .focused($focusedField, equals: .userName) .onSubmit { focusedField = .password } + // **Tabulator weiterreichen, von Hand.** + // + // Auf dem Mac ist „Name, Tab, Passwort, Eingabe" der Weg, den + // jeder nimmt, der einen Passwortspeicher benutzt. SwiftUI + // schiebt den Fokus hier aber nicht selbst weiter: die Taste + // kommt im Feld an und bleibt dort liegen. + .onKeyPress(.tab) { + focusedField = .password + return .handled + } .padding(FlixySpacing.regular) .background(Color.flixyElevated, in: .rect(cornerRadius: FlixyRadius.control)) @@ -198,6 +208,12 @@ struct JellyfinSignInView: View { .submitLabel(.go) .focused($focusedField, equals: .password) .onSubmit { Task { await model.signInWithPassword() } } + // Und zurück: sonst wäre der Weg eine Einbahnstraße, und ein + // Vertipper im Namen hieße, zur Maus greifen. + .onKeyPress(.tab) { + focusedField = .userName + return .handled + } .padding(FlixySpacing.regular) .background(Color.flixyElevated, in: .rect(cornerRadius: FlixyRadius.control))