From 0045898e8cd7b2d8972bb24c8ac27e514bdd8c70 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Thu, 11 Jun 2026 16:46:31 +0800
Subject: [PATCH] Implement Quick Switch Space filtering

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

diff --git a/C1.source/Sources/Aligner/AlignerApplicationDelegate.swift b/C1.source/Sources/Aligner/AlignerApplicationDelegate.swift
index 4218d77..b2d0fa9 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,12 @@
             let controller = QuickSwitchSessionController(
                 snapshotLoader: quickSwitchSnapshotLoader(),
                 windowActivationService: quickSwitchWindowActivationService(),
+                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 +428,12 @@
             let controller = QuickSwitchSessionController(
                 snapshotLoader: quickSwitchSnapshotLoader(),
                 windowActivationService: quickSwitchWindowActivationService(),
+                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 +517,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 +546,26 @@
         return CGWindowAXWindowService(spaceIDsByWindowIDProvider: { _ in [:] })
     }
 
+    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