Repository navigation
fix(desktop): keep macOS drag rows draggable over scrolled content - #1613
Merged
Merged
Conversation
Chromium 152 (Electron 44) collects app-region boxes without clipping them to their scroller, and app-region is now inherited (window-drag). A control scrolled beneath a chrome row therefore subtracts its whole box from the row's drag: the conversation header stopped dragging while an image or code block sat beneath it, and the sidebar rows, the right panel's tab strip and the Plugins page head lose drag the same way. Upstream master, the npm release and the official app carry the same rules with no guard. The Desktop window styles now reset the region of the content of the scrollers below chrome rows (transcript, Plugins body, workspace tree, dock pane bodies), keeping raised surfaces and drag rows, and trim the collapsed Plugins head to its painted part. verify:window-controls checks each row with a control run on the official rules alone, and a spec ties the reset to the official interactive no-drag list. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
On macOS the empty part of the conversation header stopped dragging the window while an image sat near the top of the transcript or partly beneath the header. Chromium 152 (Electron 44) collects each element's
app-regionbox without clipping it to its scroller, andapp-regionis now a surrogate of the inheritedwindow-dragproperty. The header precedes the transcript in document order, so any control scrolled beneath it (the image button and its inheritedimg, apre.shiki[tabindex=0], tool rows) subtracts its whole box from the header's drag. The same happens to the sidebar top strip and logo row over a long workspace list, to the right panel's tab strip over its pane, and to the Plugins page head over its cards. Upstream master (fcc0ad4621), the npm release (0.2.2-rc.1) and the installed official app (0.2.1-rc.5) carry the same rules with no guard; discussion #9112 measured the hollowed rows without finding the scroll trigger.src/client/styles.ts(Beta and Next) resets the region of the content of the scrollers below chrome rows ([data-conversation-scroll],[data-plugin-body],[role='tree'], dock pane bodies) through@scope, stopping at raised surfaces (dialog,[popover], dialog/menu/listbox/tooltip roles) and at drag rows. The reset on each root also cuts a region inherited from a no-drag pane body.::aftertrims the drag to the painted part, which also stops the invisible band from dragging the window over visible cards.verify:window-controlschecks the conversation header, both sidebar rows, the Plugins head and the dock tab strip: a control placed in each scroller beneath the row must not change the row's drag surface, and a control run without the Desktop sheet must show the official rules alone let it punch the row, so the reset can be retired once upstream guards it. The check reads the surface only after the official recall mark has stayed off for 12 frames.tests/window-styles.spec.tscompares the reset's control list with the official interactive no-drag rule in the frontend CSS and checks the hooks the reset targets.Performance
@scopeform is kept.Validation
corepack yarn check,check:desktop-variantsandcheck:bilingual-docspass; the Next and Beta package checks run 1241 tests each (9 skipped).verify:window-controlsin Beta and Next, three parallel rounds.dsh --profile web, Chromium, darwin mark, Chromium 152's collection rule): 5401 hole points across 19 states without the reset; 0 holes, 0 swallowed controls and 0 invisible drag points across 22 states with it, and the same in the Beta and Next compositions.🤖 Generated with Claude Code