From 146fbcf6430d2513df7fb536c7e9ace81f1e57b9 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Tue, 09 Jun 2026 21:45:32 +0800
Subject: [PATCH] Fix Quick Switch grouped display visuals

---
 C3.tools/round1-three-zone-linkage-fixture-qa.sh |   38 +++++++++++++++++++++++++++++++++++++-
 1 files changed, 37 insertions(+), 1 deletions(-)

diff --git a/C3.tools/round1-three-zone-linkage-fixture-qa.sh b/C3.tools/round1-three-zone-linkage-fixture-qa.sh
index 93a8bc2..3510d7f 100755
--- a/C3.tools/round1-three-zone-linkage-fixture-qa.sh
+++ b/C3.tools/round1-three-zone-linkage-fixture-qa.sh
@@ -534,6 +534,7 @@
 root = report.get("rootView", {})
 groups = root.get("spaceLaneDisplayGroups", [])
 segments = root.get("spaceLaneSegments", [])
+lane_background = root.get("spaceLaneBackgroundColor", {})
 
 require(report.get("snapshotLoaded") is True, "snapshotLoaded must be true")
 require(report.get("quickSwitchVisible") is True, "multi-display report must keep Quick Switch visible")
@@ -544,6 +545,8 @@
 require(len(segments) == 5, "Space segment reports must contain five segments")
 require(groups[0].get("spaceLabels") == ["A1", "A2", "A3"], "first Display group must contain A spaces")
 require(groups[1].get("spaceLabels") == ["B1", "B2"], "second Display group must contain B spaces")
+require(lane_background.get("alpha", 1) <= 0.01, "Space Lane outer background must be transparent")
+require(root.get("spaceLaneCornerRadius") == 0, "Space Lane outer layer must not draw a rounded white rectangle")
 
 first_group_frame = groups[0].get("visibleFrame", {})
 second_group_frame = groups[1].get("visibleFrame", {})
@@ -556,9 +559,23 @@
 for group in groups:
     group_frame = group.get("visibleFrame", {})
     labels = group.get("spaceLabels", [])
+    require(group.get("borderWidth") == 0, "Display group container must be borderless")
+    require(group.get("shadowOpacity") == 0, "Display group container must not add a floating shadow")
+    require(group.get("backgroundColor", {}).get("alpha", 0) >= 0.98, "Display group container must use an opaque system surface")
+    require(group.get("groupHorizontalPadding", 0) >= 24, "Display group horizontal padding must be widened")
     for label in labels:
         require(label in segments_by_label, f"segment report must include {label}")
         require(contains(group_frame, segments_by_label[label].get("visibleFrame", {})), f"{label} must be inside its Display group")
+    first_segment = segments_by_label[labels[0]].get("visibleFrame", {})
+    last_segment = segments_by_label[labels[-1]].get("visibleFrame", {})
+    require(
+        first_segment.get("x", 0) - group_frame.get("x", 0) >= group.get("groupHorizontalPadding", 0) - 1.0,
+        "Display group leading padding must match widened padding"
+    )
+    require(
+        right_edge(group_frame) - right_edge(last_segment) >= group.get("groupHorizontalPadding", 0) - 1.0,
+        "Display group trailing padding must match widened padding"
+    )
 
 for group in groups:
     labels = group.get("spaceLabels", [])
@@ -578,6 +595,25 @@
 require(len(focused) == 1, "exactly one Space segment must be focused")
 require(focused[0].get("label") == "B1", "hovered multi-display Space must be B1")
 require("focused" in focused[0].get("visualStates", []), "focused B1 segment must expose focused visual state")
+
+idle_empty_segments = [
+    segment for segment in segments
+    if segment.get("windowCount") == 0
+    and segment.get("isFocused") is not True
+    and segment.get("isCurrent") is not True
+    and segment.get("isAppAssociated") is not True
+    and segment.get("isWindowAssociated") is not True
+]
+require(idle_empty_segments, "multi-display visual fixture must include at least one idle empty Space")
+require(
+    all(segment.get("backgroundColor", {}).get("alpha", 1) <= 0.01 for segment in idle_empty_segments),
+    "idle empty Spaces must not keep a dirty gray fill"
+)
+fullscreen_segments = [segment for segment in segments if segment.get("type") == "fullscreen"]
+require(fullscreen_segments, "multi-display visual fixture must include a fullscreen Space")
+for segment in fullscreen_segments:
+    marker_frame = segment.get("fullscreenMarkerFrame", {})
+    require(marker_frame.get("y") == 30, "fullscreen Space marker must keep the previous vertical style")
 
 print(json.dumps({
     "displayGroups": [
@@ -626,7 +662,7 @@
 run_report "$SCROLL_REPORT" "scroll-app-shelf:99999" "scroll-app-shelf:99999" 60 1
 assert_app_shelf_scroll_report "$SCROLL_REPORT"
 
-run_report "$DISPLAY_GROUP_REPORT" "hover-space:4" "hover-space:4" 6 3 report-only multi-display
+run_report "$DISPLAY_GROUP_REPORT" "hover-space:4" "hover-space:4" 1 1 report-only multi-display
 assert_display_group_report "$DISPLAY_GROUP_REPORT"
 
 swift "$SCRIPT_DIR/window-logic-qa.swift" --expect-no-quick-switch >&2

--
Gitblit v1.9.3