| | |
| | | private let systemCriticalWindowDetector: any SystemCriticalWindowDetecting |
| | | private let disableScreenshotRefresh: Bool |
| | | private var waterfallViewMode: QuickSwitchWaterfallViewMode |
| | | private var theme: ThemePreference |
| | | private var closeConfirmationRequired: Bool |
| | | private let onCloseConfirmationDisabled: (() -> Void)? |
| | | private let debugOverlayWidth: CGFloat? |
| | |
| | | private var lifecycleResidualVisibleOverlayWindows = 0 |
| | | var onSnapshotUpdated: (() -> Void)? |
| | | var onToggleWaterfallViewMode: (() -> Void)? |
| | | var onToggleTheme: (() -> Void)? |
| | | |
| | | private struct PendingCloseVerification { |
| | | let request: QuickSwitchCloseRequest |
| | |
| | | systemCriticalWindowDetector: any SystemCriticalWindowDetecting = CGWindowSystemCriticalWindowDetector(), |
| | | disableScreenshotRefresh: Bool = false, |
| | | waterfallViewMode: QuickSwitchWaterfallViewMode = .verticalColumns, |
| | | theme: ThemePreference = .light, |
| | | closeConfirmationRequired: Bool = true, |
| | | onCloseConfirmationDisabled: (() -> Void)? = nil, |
| | | debugHoveredAppGroupIndex: Int? = nil, |
| | |
| | | self.systemCriticalWindowDetector = systemCriticalWindowDetector |
| | | self.disableScreenshotRefresh = disableScreenshotRefresh |
| | | self.waterfallViewMode = waterfallViewMode |
| | | self.theme = theme |
| | | self.closeConfirmationRequired = closeConfirmationRequired |
| | | self.onCloseConfirmationDisabled = onCloseConfirmationDisabled |
| | | self.debugOverlayWidth = debugOverlayWidth |
| | |
| | | view.onToggleWaterfallViewMode = { [weak self] in |
| | | self?.onToggleWaterfallViewMode?() |
| | | } |
| | | view.onToggleTheme = { [weak self] in |
| | | self?.onToggleTheme?() |
| | | } |
| | | view.setSuppressEventInput(!debugMouseSequence.isEmpty || !debugKeySequence.isEmpty) |
| | | view.onRequestClose = { [weak self] request in |
| | | self?.requestClose(request) |
| | |
| | | } |
| | | view.setCloseConfirmationRequired(closeConfirmationRequired) |
| | | view.setWaterfallViewMode(waterfallViewMode) |
| | | view.setTheme(theme) |
| | | view.apply(viewModel: nil) |
| | | view.beginPerformanceFirstFrameMeasurement() |
| | | coordinator.openQuickSwitch() |
| | |
| | | onSnapshotUpdated?() |
| | | } |
| | | |
| | | func setTheme(_ theme: ThemePreference) { |
| | | guard self.theme != theme else { return } |
| | | |
| | | self.theme = theme |
| | | DevelopmentDiagnostics.log("quickSwitch.session.themeChanged", [ |
| | | "theme": theme.rawValue, |
| | | "visible": isVisible, |
| | | "hasViewModel": currentViewModel != nil |
| | | ]) |
| | | |
| | | view.setTheme(theme) |
| | | onSnapshotUpdated?() |
| | | } |
| | | |
| | | func reportDictionary() -> [String: Any] { |
| | | let spaceCount = currentViewModel?.spaceCount ?? 0 |
| | | let appCount = currentViewModel?.appShelf.count ?? 0 |