Ariver
2026-06-20 1fea9bfc8a7639bb3573a7cf2a449ab55065ab9e
C1.source/Sources/Aligner/QuickSwitchSessionController.swift
@@ -20,6 +20,7 @@
    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?
@@ -87,6 +88,7 @@
    private var lifecycleResidualVisibleOverlayWindows = 0
    var onSnapshotUpdated: (() -> Void)?
    var onToggleWaterfallViewMode: (() -> Void)?
    var onToggleTheme: (() -> Void)?
    private struct PendingCloseVerification {
        let request: QuickSwitchCloseRequest
@@ -123,6 +125,7 @@
        systemCriticalWindowDetector: any SystemCriticalWindowDetecting = CGWindowSystemCriticalWindowDetector(),
        disableScreenshotRefresh: Bool = false,
        waterfallViewMode: QuickSwitchWaterfallViewMode = .verticalColumns,
        theme: ThemePreference = .light,
        closeConfirmationRequired: Bool = true,
        onCloseConfirmationDisabled: (() -> Void)? = nil,
        debugHoveredAppGroupIndex: Int? = nil,
@@ -139,6 +142,7 @@
        self.systemCriticalWindowDetector = systemCriticalWindowDetector
        self.disableScreenshotRefresh = disableScreenshotRefresh
        self.waterfallViewMode = waterfallViewMode
        self.theme = theme
        self.closeConfirmationRequired = closeConfirmationRequired
        self.onCloseConfirmationDisabled = onCloseConfirmationDisabled
        self.debugOverlayWidth = debugOverlayWidth
@@ -216,6 +220,9 @@
        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)
@@ -227,6 +234,7 @@
        }
        view.setCloseConfirmationRequired(closeConfirmationRequired)
        view.setWaterfallViewMode(waterfallViewMode)
        view.setTheme(theme)
        view.apply(viewModel: nil)
        view.beginPerformanceFirstFrameMeasurement()
        coordinator.openQuickSwitch()
@@ -320,6 +328,20 @@
        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