fix(next): a dragged tab stays glass in a translucent window
Summary
Ports the still-wanted half of #22202 (owner gone, CONFLICTING) onto feat-cmux-next. In a translucent window (appearance.backgroundOpacity below 1), a dragged tab turned from glass into a solid theme block the moment it lifted:
- the lifted tab in its strip painted
windowBackgroundat full alpha (TabCell), - the tab's drag image was drawn on a solid
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 DragLiftView per-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, so SidebarDragHandoff.imageOnGlass (from DragLiftView.isGlass, any overlay material but opaque) tells the ghost to stand the row's image on glass. Base also renamed Motion.* to Motion.tabs.* in TabDragSession, 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)aLiftedTabLetsTheWindowsGlassReadThroughtheDragGhostStandsOnGlassFromItsFirstFrameaWorkspacesOwnBackgroundDecidesTheGhostsGlassNotTheAppsaNewSecondaryWindowHasTheMainWindowsBackdrop
SubtleElevationTests' ghost cases pin onGlass: false.
Observed / Not run
prepush-gate.py: no new violations.- Fleet
package-test-lane.shforDragGlassTests|SubtleElevationTestsat this head: result recorded in a comment when it finishes. - Not run: live drag in a tagged build with a translucent theme (no Mac builds on this machine).
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-bot with 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.
- The lifted tab's fill is a thicker piece of the window tint (60% coverage) instead of full alpha.
- The tab's drag image is drawn without a card, and the drag ghost stands on glass from the first frame until the preview card unfolds.
- Opaque windows and Reduce Transparency keep the solid card.
- A lifted sidebar row's handoff now tells the ghost to stand the row's image on glass, since a snapshot does not draw glass.
- Supersedes #22202.