From 0a64c8163445e27f5123fdcf083fb3a5449b5c49 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Sat, 20 Jun 2026 03:43:08 +0800
Subject: [PATCH] Fix dark Space hover readability

---
 C1.source/Sources/Aligner/QuickSwitchSessionController.swift |   44 +++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 43 insertions(+), 1 deletions(-)

diff --git a/C1.source/Sources/Aligner/QuickSwitchSessionController.swift b/C1.source/Sources/Aligner/QuickSwitchSessionController.swift
index daff31e..f6b860a 100644
--- a/C1.source/Sources/Aligner/QuickSwitchSessionController.swift
+++ b/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()
@@ -280,7 +288,27 @@
 
     func retriggerFromShortcut() {
         DevelopmentDiagnostics.log("quickSwitch.session.retriggerFromShortcut")
-        show()
+        guard isVisible else {
+            show()
+            return
+        }
+
+        guard currentViewModel != nil else {
+            DevelopmentDiagnostics.log("quickSwitch.session.retriggerFromShortcut.noSnapshot", [
+                "action": "fallbackShow"
+            ])
+            show()
+            return
+        }
+
+        let didCycle = view.hoverNextAppGroupIndex()
+        DevelopmentDiagnostics.log("quickSwitch.session.retriggerFromShortcut.hoverApp", [
+            "didCycle": didCycle
+        ])
+
+        if !didCycle {
+            show()
+        }
     }
 
     func setWaterfallViewMode(_ mode: QuickSwitchWaterfallViewMode) {
@@ -300,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

--
Gitblit v1.9.3