Skip to content

fw/applib/ui: Open plain menu rows on a single tap - #1903

Merged
jplexer merged 1 commit into
coredevices:mainfrom
jplexer:jp/firm-4102-scrolling-on-obelix-requires-two-taps-to-open-menu-items
Aug 21, 2026
Merged

fw/applib/ui: Open plain menu rows on a single tap#1903
jplexer merged 1 commit into
coredevices:mainfrom
jplexer:jp/firm-4102-scrolling-on-obelix-requires-two-taps-to-open-menu-items

Conversation

@jplexer

@jplexer jplexer commented Aug 21, 2026

Copy link
Copy Markdown
Member

Summary

Opening a menu item on touch devices took two taps: the first tap only selected the row, the second activated it (FIRM-4102).

Plain (non-center-focused) menus now behave like a phone list: a single tap on any row selects it (selection_will_change honoured) and activates it in the same gesture — scroll, tap the item you want, and it opens. This also makes settings checkboxes toggle on one tap.

Details:

  • Pan/fling behavior is untouched: a pan only scrolls, a tap that catches a moving fling is still swallowed as a stop.
  • A selection_will_change veto still changes nothing; a redirect only selects the redirected row without opening it (opening a row the finger never touched would be a misfire).
  • The selection commits with MenuRowAlignNone so the content does not shift as the activated window pushes.
  • Center-focused carousels (round) keep the two-step model (tap centres, tap on the centred row activates); the double-tap window machinery is now carousel-only.
  • Short-item action menus keep the two-step tap via the new internal menu_layer_set_tap_select_only(): their rows hold several columns and the row-granular tap hit-test cannot tell which one the finger meant.

Fixes FIRM-4102

Testing

  • Rewrote the plain-menu tap unit tests for the one-tap model; ported the double-tap edge-case tests (clamped recording, button-nav disarm, reload disarm) to carousels; updated the ActionMenuLayer wide-item test.
  • Full ./pbl test suite passes; obelix firmware builds cleanly.

🤖 Generated with Claude Code

A tap on a not-selected row of a plain (non-center-focused) menu used
to only select it, so opening an item after a scroll took two taps.
Make plain menus behave like a phone list instead: a single tap selects
the row (selection_will_change honoured) and activates it in the same
gesture. A veto still changes nothing, and a redirect only selects the
redirected row - opening a row the finger never touched would be a
misfire. The commit uses MenuRowAlignNone so the content does not shift
as the activated window pushes.

Center-focused carousels keep the two-step model (tap centres, tap on
the centred row activates); the double-tap window machinery is now
carousel-only, since plain menus activate on the first tap.

Short-item action menus keep the two-step tap via the new internal
menu_layer_set_tap_select_only(): their rows hold several columns and
the row-granular tap hit-test cannot tell which one the finger meant.

Fixes FIRM-4102

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Joshua Jun <lets@throw.rocks>
@jplexer
jplexer requested a review from gmarull as a code owner August 21, 2026 15:08
@jplexer
jplexer merged commit 9fc5847 into coredevices:main Aug 21, 2026
42 checks passed
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.

1 participant