From ae0f48a9d9543d43b120674f0e58164d7cce95ad Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Sun, 14 Jun 2026 21:06:22 +0800
Subject: [PATCH] Refine Quick Switch UI states
---
C3.tools/round1-mouse-interaction-fixture-qa.sh | 23 ++++++++++++++++++-----
1 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/C3.tools/round1-mouse-interaction-fixture-qa.sh b/C3.tools/round1-mouse-interaction-fixture-qa.sh
index ce9793e..fe212d7 100755
--- a/C3.tools/round1-mouse-interaction-fixture-qa.sh
+++ b/C3.tools/round1-mouse-interaction-fixture-qa.sh
@@ -18,7 +18,7 @@
MOUSE_SEQUENCE="${ALIGNER_ROUND1_MOUSE_SEQUENCE:-hover-card:1:7,hover-app:5,hover-card:7:0,click-card:7:0}"
APP_ONLY_MOUSE_SEQUENCE="${ALIGNER_ROUND1_MOUSE_APP_ONLY_SEQUENCE:-hover-app:5,click-app:7}"
REPORT_WAIT="${ALIGNER_ROUND1_MOUSE_REPORT_WAIT:-6.0}"
-WINDOW_WAIT="${ALIGNER_ROUND1_MOUSE_WINDOW_WAIT:-3.0}"
+WINDOW_WAIT="${ALIGNER_ROUND1_MOUSE_WINDOW_WAIT:-6.0}"
fail() {
echo "Round01 mouse interaction fixture QA failed: $*" >&2
@@ -288,9 +288,18 @@
require(hovered_items[0].get("index") == expected_app_group_index, "hovered window card must link to App Shelf")
hovered_segments = [segment for segment in segments if "hover" in segment.get("visualStates", [])]
-require(len(hovered_segments) == 1, "hovered window card must link to exactly one Space Lane segment")
-require(hovered_segments[0].get("windowCount", 0) > 0, "hovered Space Lane segment must be a real space with windows")
-require(root.get("hoveredSpaceID") == expected_space_id, "root hoveredSpaceID must match clicked card primarySpaceID")
+space_focused_segments = [segment for segment in segments if "spaceFocus" in segment.get("visualStates", [])]
+window_associated_segments = [segment for segment in segments if segment.get("isWindowAssociated") is True]
+require(root.get("hoverTargetKind") == "window", "hovered Waterfall card must report window hover target")
+require(root.get("activeSpaceFocusID") is None, "hovered Waterfall card must not create Space Lane focus")
+require(len(hovered_segments) == 0, "hovered Waterfall card must not mark a Space Lane segment as hovered")
+require(len(space_focused_segments) == 0, "hovered Waterfall card must not mark a Space Lane segment as focused")
+require(root.get("hoveredSpaceID") == expected_space_id, "root hoveredSpaceID may still mirror clicked card primarySpaceID for window context")
+require(root.get("windowHoverAssociatedSpaceID") == expected_space_id, "hovered Waterfall card must expose its Space as windowHoverAssociatedSpaceID")
+require(len(window_associated_segments) == 1, "hovered Waterfall card must highlight exactly one associated Space segment")
+require(window_associated_segments[0].get("spaceID") == expected_space_id, "window-associated Space segment must match hovered card Space")
+require("windowAssociated" in window_associated_segments[0].get("visualStates", []), "window-associated Space segment must expose windowAssociated")
+require("focused" not in window_associated_segments[0].get("visualStates", []), "window-associated Space segment must not expose focused")
frame = selected_cards[0].get("visibleFrame", {})
require(frame.get("x", -1) >= 0, "clicked Waterfall card must be horizontally visible")
@@ -304,7 +313,9 @@
"lastActivationResult": report.get("lastActivationResult"),
"waterfallScrollOffset": root.get("waterfallScrollOffset"),
"hoveredSpaceID": root.get("hoveredSpaceID"),
- "hoveredSpaceLabel": hovered_segments[0].get("label")
+ "windowHoverAssociatedSpaceID": root.get("windowHoverAssociatedSpaceID"),
+ "hoverTargetKind": root.get("hoverTargetKind"),
+ "activeSpaceFocusID": root.get("activeSpaceFocusID")
}, indent=2, ensure_ascii=False))
PY
}
@@ -316,6 +327,7 @@
"$APP/Contents/MacOS/Aligner" \
--round0-skip-permissions \
--round01-open-quick-switch \
+ --round01-waterfall-view-mode=vertical \
--round01-fixture-app-count="$FIXTURE_APP_COUNT" \
--round01-fixture-windows-per-app="$FIXTURE_WINDOWS_PER_APP" \
--round01-disable-screenshot-refresh \
@@ -342,6 +354,7 @@
"$APP/Contents/MacOS/Aligner" \
--round0-skip-permissions \
--round01-open-quick-switch \
+ --round01-waterfall-view-mode=vertical \
--round01-fixture-app-count="$FIXTURE_APP_COUNT" \
--round01-fixture-windows-per-app="$FIXTURE_WINDOWS_PER_APP" \
--round01-disable-screenshot-refresh \
--
Gitblit v1.9.3