From c94c6166f54f85db265ceb12b76ca6c6418db43b Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Fri, 14 Aug 2026 14:18:06 +0200 Subject: [PATCH] Der Farbwechsel kommt jetzt auch an MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Farbton und Symbolfarbe standen beim **Erzeugen** der Fenster, also außerhalb jeder View. Damit wird der Wert genau einmal gelesen und SwiftUI erfährt nie, dass er sich geändert hat: die Reiter, Knöpfe und Symbole blieben in der Farbe stehen, die beim Öffnen galt, während der Farbwähler daneben schon die neue zeigte. Jetzt stehen beide im Rumpf der jeweiligen View — Panel, Einstellungen, Einrichtung. Dort registriert SwiftUI den Zugriff und zeichnet neu. Bei den Popovers blieb es beim Erzeugen: die entstehen bei jedem Öffnen neu, lesen also ohnehin den aktuellen Wert. Co-Authored-By: Claude Opus 5 --- Onyx/OnboardingView.swift | 3 +++ Onyx/OnboardingWindowController.swift | 4 +--- Onyx/OnyxApp.swift | 7 ++++--- Onyx/SettingsView.swift | 8 ++++++++ Onyx/SettingsWindowController.swift | 7 +------ 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/Onyx/OnboardingView.swift b/Onyx/OnboardingView.swift index 1e40ddb..37bd6b7 100644 --- a/Onyx/OnboardingView.swift +++ b/Onyx/OnboardingView.swift @@ -82,6 +82,9 @@ struct OnboardingView: View { footer } .frame(width: 520, height: 520) + // Im Rumpf gelesen, damit ein Farbwechsel ankommt. + .tint(Onyx.Color.accent) + .labelStyle(.onyx) .task { calendarGranted = calendarModel.hasAccess fanControl.refreshInstallState() diff --git a/Onyx/OnboardingWindowController.swift b/Onyx/OnboardingWindowController.swift index 0db504d..0a6dd3a 100644 --- a/Onyx/OnboardingWindowController.swift +++ b/Onyx/OnboardingWindowController.swift @@ -44,9 +44,7 @@ final class OnboardingWindowController: NSObject, NSWindowDelegate { rootView: OnboardingView( calendarModel: calendarModel, weatherModel: weatherModel, mixer: mixer, fanControl: fanControl, launchAtLogin: launchAtLogin, - onFinish: { [weak self] in self?.finish() }) - .tint(Onyx.Color.accent) - .labelStyle(.onyx)) + onFinish: { [weak self] in self?.finish() })) let window = NSWindow(contentViewController: hosting) window.title = "Onyx" diff --git a/Onyx/OnyxApp.swift b/Onyx/OnyxApp.swift index 21afaf7..f477a12 100644 --- a/Onyx/OnyxApp.swift +++ b/Onyx/OnyxApp.swift @@ -76,9 +76,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate { NotchHostingView( rootView: NotchContainer(presentation: presentation) { NotchPanelContent(model: model) - } - .tint(Onyx.Color.accent) - .labelStyle(.onyx), + }, presentation: presentation) } coordinator.start() @@ -366,5 +364,8 @@ private struct NotchPanelContent: View { var body: some View { WidgetGrid(placements: model.layout, availableWidth: AppModel.availableWidth) + // Im Rumpf gelesen, damit ein Farbwechsel ankommt. + .tint(Onyx.Color.accent) + .labelStyle(.onyx) } } diff --git a/Onyx/SettingsView.swift b/Onyx/SettingsView.swift index ff399b3..73dde69 100644 --- a/Onyx/SettingsView.swift +++ b/Onyx/SettingsView.swift @@ -71,6 +71,14 @@ struct SettingsView: View { // Systems, und die beiden liegen in Dunkelgrau ein, zwei Prozent // auseinander. Sichtbar wurde das als Kante quer durchs Fenster. .background(Color(nsColor: .windowBackgroundColor)) + // Farbton und Symbolfarbe hier und nicht beim Erzeugen des Fensters. + // + // Beim Erzeugen wird der Wert **einmal** gelesen, außerhalb jeder + // View — SwiftUI erfährt nie, dass er sich geändert hat. Die Reiter + // und Knöpfe blieben deshalb in der Farbe stehen, die beim Öffnen + // galt, während der Farbwähler daneben schon die neue zeigte. + .tint(Onyx.Color.accent) + .labelStyle(.onyx) // Nur ein Mindestmaß, keine feste Größe: sonst kann das Fenster // wachsen, der Inhalt aber nicht mit. .frame(minWidth: 740, minHeight: 460) diff --git a/Onyx/SettingsWindowController.swift b/Onyx/SettingsWindowController.swift index 81196bb..97ec9e1 100644 --- a/Onyx/SettingsWindowController.swift +++ b/Onyx/SettingsWindowController.swift @@ -61,12 +61,7 @@ final class SettingsWindowController: NSObject, NSWindowDelegate { showOnboarding: showOnboarding, selectedTab: Binding( get: { [weak self] in self?.selectedTab ?? .widgets }, - set: { [weak self] in self?.selectedTab = $0 })) - // Ohne das folgen Haken, Regler und Auswahlfelder der - // Systemfarbe statt der eingestellten. Genau daher kam das - // Grün, das in Onyx sonst nirgends vorkommt. - .tint(Onyx.Color.accent) - .labelStyle(.onyx)) + set: { [weak self] in self?.selectedTab = $0 }))) let window = NSWindow(contentViewController: hosting) window.title = "Onyx"