| | |
| | | case schemaVersion = "schemaVersion" |
| | | case showMinimizedWindows = "quickSwitch.showMinimizedWindows" |
| | | case showFullscreenWindows = "quickSwitch.showFullscreenWindows" |
| | | case quickSwitchWaterfallViewMode = "quickSwitch.waterfallViewMode" |
| | | case theme = "appearance.theme" |
| | | case language = "appearance.language" |
| | | case spaceDisplayStrategy = "spaces.displayStrategy" |
| | |
| | | case currentSpaceOnly |
| | | } |
| | | |
| | | public enum QuickSwitchWaterfallViewMode: String, CaseIterable, Equatable, Sendable { |
| | | case verticalColumns |
| | | case horizontalMasonry |
| | | } |
| | | |
| | | public struct AlignerPreferences: Equatable, Sendable { |
| | | public let showMinimizedWindows: Bool |
| | | public let showFullscreenWindows: Bool |
| | | public let quickSwitchWaterfallViewMode: QuickSwitchWaterfallViewMode |
| | | public let theme: ThemePreference |
| | | public let language: LanguagePreference |
| | | public let spaceDisplayStrategy: SpaceDisplayStrategy |
| | |
| | | public init( |
| | | showMinimizedWindows: Bool, |
| | | showFullscreenWindows: Bool, |
| | | quickSwitchWaterfallViewMode: QuickSwitchWaterfallViewMode, |
| | | theme: ThemePreference, |
| | | language: LanguagePreference, |
| | | spaceDisplayStrategy: SpaceDisplayStrategy |
| | | ) { |
| | | self.showMinimizedWindows = showMinimizedWindows |
| | | self.showFullscreenWindows = showFullscreenWindows |
| | | self.quickSwitchWaterfallViewMode = quickSwitchWaterfallViewMode |
| | | self.theme = theme |
| | | self.language = language |
| | | self.spaceDisplayStrategy = spaceDisplayStrategy |
| | |
| | | } |
| | | |
| | | public enum PreferenceSchema { |
| | | public static let version = 1 |
| | | public static let version = 2 |
| | | |
| | | public static let defaults = AlignerPreferences( |
| | | showMinimizedWindows: true, |
| | | showFullscreenWindows: true, |
| | | quickSwitchWaterfallViewMode: .verticalColumns, |
| | | theme: .system, |
| | | language: .system, |
| | | spaceDisplayStrategy: .includeVisibleAndFullscreen |
| | |
| | | PreferenceKey.schemaVersion.storageKey: version, |
| | | PreferenceKey.showMinimizedWindows.storageKey: defaults.showMinimizedWindows, |
| | | PreferenceKey.showFullscreenWindows.storageKey: defaults.showFullscreenWindows, |
| | | PreferenceKey.quickSwitchWaterfallViewMode.storageKey: defaults.quickSwitchWaterfallViewMode.rawValue, |
| | | PreferenceKey.theme.storageKey: defaults.theme.rawValue, |
| | | PreferenceKey.language.storageKey: defaults.language.rawValue, |
| | | PreferenceKey.spaceDisplayStrategy.storageKey: defaults.spaceDisplayStrategy.rawValue |
| | |
| | | return AlignerPreferences( |
| | | showMinimizedWindows: userDefaults.bool(forKey: PreferenceKey.showMinimizedWindows.storageKey), |
| | | showFullscreenWindows: userDefaults.bool(forKey: PreferenceKey.showFullscreenWindows.storageKey), |
| | | quickSwitchWaterfallViewMode: rawValue( |
| | | for: .quickSwitchWaterfallViewMode, |
| | | default: PreferenceSchema.defaults.quickSwitchWaterfallViewMode |
| | | ), |
| | | theme: rawValue(for: .theme, default: PreferenceSchema.defaults.theme), |
| | | language: rawValue(for: .language, default: PreferenceSchema.defaults.language), |
| | | spaceDisplayStrategy: rawValue( |
| | |
| | | userDefaults.set(PreferenceSchema.version, forKey: PreferenceKey.schemaVersion.storageKey) |
| | | userDefaults.set(preferences.showMinimizedWindows, forKey: PreferenceKey.showMinimizedWindows.storageKey) |
| | | userDefaults.set(preferences.showFullscreenWindows, forKey: PreferenceKey.showFullscreenWindows.storageKey) |
| | | userDefaults.set( |
| | | preferences.quickSwitchWaterfallViewMode.rawValue, |
| | | forKey: PreferenceKey.quickSwitchWaterfallViewMode.storageKey |
| | | ) |
| | | userDefaults.set(preferences.theme.rawValue, forKey: PreferenceKey.theme.storageKey) |
| | | userDefaults.set(preferences.language.rawValue, forKey: PreferenceKey.language.storageKey) |
| | | userDefaults.set(preferences.spaceDisplayStrategy.rawValue, forKey: PreferenceKey.spaceDisplayStrategy.storageKey) |