Repository navigation
fix(next): a dragged tab stays glass in a translucent window - #22807
Conversation
Ports the tab half of #22202 onto base: the lifted tab's fill, the tab drag image and the drag ghost follow the source scope's backdrop (WindowBackdrop dragsOnGlass). The sidebar half is superseded: base lifts a row on the overlay glass (u5506); its handoff now tells the ghost to stand the row's image on glass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba7-3152-78b2-bfdf-bb6eb0d5a053&host=cosmic-gray
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Not verified: macOS jobs did not run: compile and app tests were skipped on CI passes on Written by web and size checks: green |
|
Bead |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba7-3152-78b2-bfdf-bb6eb0d5a053&host=cosmic-gray
|
owner: 01a15ba7-3152-78b2-bfdf-bb6eb0d5a053 |
|
Merged after review PASS. Fleet: DragGlassTests and SubtleElevationTests passed (step 04c9fe0c4d32, on this change plus the #22821 base compile fix, since base did not compile). The one red, generated drift, died on a GitHub API rate limit (HTTP 403) before checking anything. Compile and swift test checks were still pending at merge. |
|
Shipped in:
|
|
Shipped in:
|
…, Pinned and custom sections, multi-row drags and motion; a dragged tab stays glass (#23542) * test(next): sidebar rebuild invariant covers Group by Folder, filters, Pinned and custom sections, multi-row drags and motion; a dragged tab stays glass Extends SidebarIncrementalMatchesRebuildTests (#23389) to the gaps it named, each through the list's own pointer and key handlers, and pins #22807: the tab drag lands in Work between docs and web, and a lifted strip tab keeps its glass fill at every step of a real pointer drag. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba7-3152-78b2-bfdf-bb6eb0d5a053&host=cosmic-gray * test(next): the rebuild check waits for the list's springs with motion on; the gap drags move like a hand With motion on the check compared after 90 ms, while springs and fades still ran: half-point offsets and rows mid-fade. It now waits until no animation runs in the list (at most 3 s), then compares. The gap scenarios' drags move 4 pt per step, and the Pinned and two-row drags check what they are about. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba7-3152-78b2-bfdf-bb6eb0d5a053&host=cosmic-gray * test(next): the rebuild check waits until the list stops moving, not for layer animations A row's spring writes its frame on each display frame and leaves no layer animation, so the check now waits until two looks 50 ms apart agree (at most 3 s) before it compares. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15ba7-3152-78b2-bfdf-bb6eb0d5a053&host=cosmic-gray --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Summary
Ports the still-wanted half of #22202 (owner gone, CONFLICTING) onto feat-cmux-next. In a translucent window (
appearance.backgroundOpacitybelow 1), a dragged tab turned from glass into a solid theme block the moment it lifted:windowBackgroundat full alpha (TabCell),windowBackgroundcard, and the drag ghost's glass stayed at alpha 0 until the preview card unfolded (TabStripView.snapshot,TabDragGhostPanel).WindowBackdrop.dragPreview(scope)(CmuxNextDesign) now decides both from the source scope's backdrop. Over glass the lifted tab's fill is a thicker piece of the window tint, and the tab image has no card and stands on the ghost's glass from the first frame. Opaque windows and Reduce Transparency keep the solid card.Dropped from #22202: its
DragLiftViewper-window glass/tint. Base now lifts a sidebar row on the one overlay glass (OverlaySurfaceView, Lawrence 2026-10-20, u5506). What stays from that half: a snapshot does not draw the glass, soSidebarDragHandoff.imageOnGlass(fromDragLiftView.isGlass, any overlay material but opaque) tells the ghost to stand the row's image on glass. Base also renamedMotion.*toMotion.tabs.*inTabDragSession, so that conflict was resolved to base's names.Testing
DragGlassTests(CmuxNextAppTests, from #22202 minus the superseded sidebar lift cases):liftAndCardFillsAreGlassOnlyInATranslucentWindowaLiftedSidebarRowHandsItsGlassToTheGhost(new: glass for liquid glass and vibrancy, not for opaque)aLiftedTabLetsTheWindowsGlassReadThroughtheDragGhostStandsOnGlassFromItsFirstFrameaWorkspacesOwnBackgroundDecidesTheGhostsGlassNotTheAppsaNewSecondaryWindowHasTheMainWindowsBackdropSubtleElevationTests' ghost cases pinonGlass: false.Observed / Not run
prepush-gate.py: no new violations.package-test-lane.shforDragGlassTests|SubtleElevationTestsat this head: result recorded in a comment when it finishes.Changelog
Fixed: Dragging a tab in a translucent window keeps it glass instead of turning it into a solid theme-colored block
Localization: no user-facing strings changed.
Supersedes #22202.
🤖 Generated with Claude Code
Agent session: cosmic-gray
Need help on this PR? Tag
@codesmith-botwith what you need.Summary by cubic
Fixes dragged tabs turning from glass into solid theme-colored blocks in translucent windows.
Drag previews now follow the source scope's backdrop (
WindowBackdrop.dragPreview), not the app's, so a workspace that pins its own background decides its own glass.Written for commit 63625dd. Summary will update on new commits.