From 3d8d37306e39db5c8eb41fafd95a13112d573f62 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Thu, 11 Jun 2026 22:24:39 +0800
Subject: [PATCH] Center filtered Waterfall columns

---
 C1.source/Sources/Aligner/AlignerApplicationDelegate.swift |   49 ++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 48 insertions(+), 1 deletions(-)

diff --git a/C1.source/Sources/Aligner/AlignerApplicationDelegate.swift b/C1.source/Sources/Aligner/AlignerApplicationDelegate.swift
index 4218d77..4fcad5f 100644
--- a/C1.source/Sources/Aligner/AlignerApplicationDelegate.swift
+++ b/C1.source/Sources/Aligner/AlignerApplicationDelegate.swift
@@ -4,6 +4,8 @@
 
 @MainActor
 final class AlignerApplicationDelegate: NSObject, NSApplicationDelegate {
+    private static let quickSwitchConfirmBeforeCloseDefaultsKey = "QuickSwitchConfirmBeforeClose"
+
     private let permissionChecker = SystemPermissionChecker()
     private let launchOptions = Round0DebugLaunchOptions.parse(arguments: ProcessInfo.processInfo.arguments)
     private let round1PoCOptions = Round1PerformancePoCOptions.parse(arguments: ProcessInfo.processInfo.arguments)
@@ -352,7 +354,13 @@
             let controller = QuickSwitchSessionController(
                 snapshotLoader: quickSwitchSnapshotLoader(),
                 windowActivationService: quickSwitchWindowActivationService(),
+                spaceActivationService: quickSwitchSpaceActivationService(),
+                windowCloseService: quickSwitchWindowCloseService(),
                 disableScreenshotRefresh: round1QuickSwitchOptions.disableScreenshotRefresh,
+                closeConfirmationRequired: quickSwitchConfirmBeforeClose,
+                onCloseConfirmationDisabled: { [weak self] in
+                    self?.setQuickSwitchConfirmBeforeClose(false)
+                },
                 debugHoveredAppGroupIndex: round1QuickSwitchOptions.debugHoveredAppGroupIndex,
                 debugOverlayWidth: round1QuickSwitchOptions.debugOverlayWidth,
                 debugKeySequence: round1QuickSwitchOptions.debugKeySequence,
@@ -421,7 +429,13 @@
             let controller = QuickSwitchSessionController(
                 snapshotLoader: quickSwitchSnapshotLoader(),
                 windowActivationService: quickSwitchWindowActivationService(),
+                spaceActivationService: quickSwitchSpaceActivationService(),
+                windowCloseService: quickSwitchWindowCloseService(),
                 disableScreenshotRefresh: round1QuickSwitchOptions.disableScreenshotRefresh,
+                closeConfirmationRequired: quickSwitchConfirmBeforeClose,
+                onCloseConfirmationDisabled: { [weak self] in
+                    self?.setQuickSwitchConfirmBeforeClose(false)
+                },
                 debugHoveredAppGroupIndex: round1QuickSwitchOptions.debugHoveredAppGroupIndex,
                 debugOverlayWidth: round1QuickSwitchOptions.debugOverlayWidth,
                 debugKeySequence: round1QuickSwitchOptions.debugKeySequence,
@@ -505,11 +519,16 @@
             return FixtureQuickSwitchSnapshotLoader(appCount: 1, mode: .candidateFiltering)
         }
 
+        if round1QuickSwitchOptions.fixtureSpaceFilter {
+            return FixtureQuickSwitchSnapshotLoader(appCount: 1, mode: .spaceFilter)
+        }
+
         if let fixtureAppCount = round1QuickSwitchOptions.fixtureAppCount {
             return FixtureQuickSwitchSnapshotLoader(
                 appCount: fixtureAppCount,
                 windowsPerApp: round1QuickSwitchOptions.fixtureWindowsPerApp ?? 1,
-                mode: .layout
+                mode: .layout,
+                usesMultipleDisplays: round1QuickSwitchOptions.fixtureMultiDisplay
             )
         }
 
@@ -529,6 +548,34 @@
         return CGWindowAXWindowService(spaceIDsByWindowIDProvider: { _ in [:] })
     }
 
+    private func quickSwitchSpaceActivationService() -> any SpaceActivationServiceProtocol {
+        if round1QuickSwitchOptions.debugWindowActivation {
+            return DebugSpaceActivationService()
+        }
+
+        return PrivateSpaceActivationService()
+    }
+
+    private func quickSwitchWindowCloseService() -> any WindowCloseServiceProtocol {
+        if round1QuickSwitchOptions.debugWindowClose {
+            return DebugWindowCloseService()
+        }
+
+        return CGWindowAXWindowService(spaceIDsByWindowIDProvider: { _ in [:] })
+    }
+
+    private var quickSwitchConfirmBeforeClose: Bool {
+        let value = UserDefaults.standard.object(forKey: Self.quickSwitchConfirmBeforeCloseDefaultsKey)
+        return (value as? Bool) ?? true
+    }
+
+    private func setQuickSwitchConfirmBeforeClose(_ enabled: Bool) {
+        UserDefaults.standard.set(enabled, forKey: Self.quickSwitchConfirmBeforeCloseDefaultsKey)
+        DevelopmentDiagnostics.log("app.quickSwitch.closeConfirmationPreferenceChanged", [
+            "confirmBeforeClose": enabled
+        ])
+    }
+
     @objc private func showPermissions() {
         DevelopmentDiagnostics.log("app.permissions.show", [
             "accessibility": permissionStatusString(accessibilityStatus()),

--
Gitblit v1.9.3