Skip to content

fix(ui): let a sidebar row's pin button catch the first press - #396

Merged
iamnbutler merged 2 commits into
mainfrom
pin-button
Oct 15, 2026
Merged

iamnbutler merged 2 commits into
mainfrom
pin-button

Conversation

@iamnbutler

Copy link
Copy Markdown
Contributor

Fixes #394

The row's hover actions (SESSION_ACTIONS) had pointer-events-none until :hover applied to the row. When a press arrives before hover styles do (a warped or just-arrived cursor, a window activation), pointerdown hits the row's select button underneath and pointerup hits the now-hit-testable pin, so click fires on their common ancestor and neither pins nor selects. Reproduced in headless Chromium against a source ace serve --loopback host by sending a CDP press/release at the pin with no prior mousemove: events were pointerdown:SPAN/alpha, pointerup:svg, click:DIV/alpha, and nothing was pinned. A second press at the same spot worked, matching "the first click did nothing".

The actions now always take hits. The 40px enlarged hit area still waits for the row's hover, since it spills into neighbouring rows and would otherwise steal presses meant for the row above or below.

Verified with Playwright page.mouse (hover then click) in headless Chromium and WebKit: pin and unpin both work and the click doesn't select the channel; a press with no prior hover now pins and unpins; a press at the bottom edge of one row hits that row's pin, not the next row's hit area; clicking a row body still selects it.

Built in Ace

No — built with Claude Code outside Ace by an overnight issue watcher, because this Mac's Ace Canary is a participant in the running two-person study (#218); dogfooding gap tracked in #5.

The row's hover actions ignored the pointer until :hover applied. A press that
arrived before hover styles did (a warped or just-arrived cursor, a window
activation) hit the row on pointerdown and the pin on pointerup, so the click
went to their common ancestor and neither pinned nor selected. The actions now
always take hits; only the enlarged hit area waits for hover so it can't catch
presses meant for a neighbouring row.

Why: packages/ui/src/components/session-item/session-item-actions.tsx#const SESSION_ACTIONS | row actions must be hit-testable without :hover, or a first press splits across row and button and is lost
Why: packages/ui/src/components/session-item/session-item-actions.tsx#const ACTION_BUTTON | the enlarged hit area only takes presses on the hovered row, since it spills into neighbouring rows
@iamnbutler
iamnbutler merged commit f0cfb8f into main Oct 15, 2026
1 check passed
iamnbutler added a commit that referenced this pull request Oct 15, 2026
* fix(ui): keep a channel row's facepile clear of its pin

The row's facepile sat under the hover actions at the same spot, so pointing at an avatar hit
the pin, which takes presses even before hover since #396, and the facepile faded out on hover.
The facepile and actions now share one trailing cluster, facepile first, so neither moves on
hover and the pin stays at the row's right edge.

Fixes #407

Why: packages/ui/src/components/session-item/session-item.tsx#const TRAILING | the gap between facepile and actions must cover the pin's hit-area spill so a face never pins

* lane: sync row-facepile memory
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Sidebar row's pin button doesn't pin

1 participant