|
|
@@ -69,7 +69,7 @@ final class ViewController: NSViewController {
|
|
69
|
69
|
private var darkModeEnabled: Bool {
|
|
70
|
70
|
get {
|
|
71
|
71
|
let hasValue = UserDefaults.standard.object(forKey: darkModeDefaultsKey) != nil
|
|
72
|
|
- return hasValue ? UserDefaults.standard.bool(forKey: darkModeDefaultsKey) : true
|
|
|
72
|
+ return hasValue ? UserDefaults.standard.bool(forKey: darkModeDefaultsKey) : systemPrefersDarkMode()
|
|
73
|
73
|
}
|
|
74
|
74
|
set { UserDefaults.standard.set(newValue, forKey: darkModeDefaultsKey) }
|
|
75
|
75
|
}
|
|
|
@@ -96,6 +96,8 @@ final class ViewController: NSViewController {
|
|
96
|
96
|
|
|
97
|
97
|
override func viewDidLoad() {
|
|
98
|
98
|
super.viewDidLoad()
|
|
|
99
|
+ // Sync toggle + palette with current macOS appearance on launch.
|
|
|
100
|
+ darkModeEnabled = systemPrefersDarkMode()
|
|
99
|
101
|
palette = Palette(isDarkMode: darkModeEnabled)
|
|
100
|
102
|
setupRootView()
|
|
101
|
103
|
buildMainLayout()
|
|
|
@@ -136,6 +138,14 @@ private extension ViewController {
|
|
136
|
138
|
view.layer?.backgroundColor = palette.pageBackground.cgColor
|
|
137
|
139
|
}
|
|
138
|
140
|
|
|
|
141
|
+ func systemPrefersDarkMode() -> Bool {
|
|
|
142
|
+ // Use the system-wide appearance setting (not app/window effective appearance).
|
|
|
143
|
+ // When the key is missing, macOS is in Light mode.
|
|
|
144
|
+ let global = UserDefaults.standard.persistentDomain(forName: UserDefaults.globalDomain)
|
|
|
145
|
+ let style = global?["AppleInterfaceStyle"] as? String
|
|
|
146
|
+ return style?.lowercased() == "dark"
|
|
|
147
|
+ }
|
|
|
148
|
+
|
|
139
|
149
|
func buildMainLayout() {
|
|
140
|
150
|
let splitContainer = NSStackView()
|
|
141
|
151
|
splitContainer.translatesAutoresizingMaskIntoConstraints = false
|