Repository navigation
Conversation
lippdev
force-pushed
the
fix/controller-navigation
branch
from
October 21, 2026 19:22
6bd2ad4 to
e7248d4
Compare
…eaches the toolbar - A on a text field (any page, the new tab's box included) opens the controller keyboard. Walking over a field or a page's autofocus no longer pops it up; a real click still does (mouse, or A in Cursor mode). - The keyboard always takes the window's focus. Closing it hands the focus back to the tab, so from the second time on the D-pad walked the keys while Chromium drew no focus on them, and the keyboard looked dead. The first press now lands on the first key, not on the close button. - Up from the top of a page moves the D-pad to the toolbar (address field, back, forward, reload, favorite, menu) and the tab strip; A presses, the address field opens the keyboard, and down past the toolbar or B goes back to the page. Minimize, maximize and close stay off the D-pad. In TV mode the bar stays on screen while it has the focus. - The address field opens the keyboard on a click instead of on focus, so reaching it with the D-pad does not open it on the way past. - Spatial focus: the first press takes the first item instead of looking past the middle of the screen; sharing a column or a row counts more than where the centres sit, which made the D-pad jump over wide text fields. The shell walks its own controls edge to edge as well, so left from the address field reaches reload instead of the tab strip, and the close button inside a tab card stays reachable. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
lippdev
force-pushed
the
fix/controller-navigation
branch
from
October 21, 2026 19:29
e7248d4 to
1da0e72
Compare
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
Fixes the three controller problems found in a hands-on test.
1. A on a text field opens the keyboard (instead of Y).
spatial.jsreturnseditwhen A lands on a text field, andInputRouterthen opens the controller keyboard for the page. This works on every page, including ours (the new tab's search box).focusin. That used to pop it up when the D-pad walked over a field or a site usedautofocus. It now opens only when the focus follows a real pointer press (mouse, or A in Cursor mode), and this hook also runs on internal pages now.mousedowninstead of on focus, so reaching it with the D-pad doesn't open it on the way past.2. The keyboard keys didn't move.
keyboard-closehands the window's focus back to the tab. From the second opening on, the D-pad walked the keys in a document without system focus, so Chromium drew no focus and the keyboard looked dead.openKeyboardnow always callsfocusChrome().3. Up from the top of the page reaches the toolbar and the tabs.
spatial.jsreturnsedgeon up when nothing is above and the page is at its top.Shell.enterChromereveals the bar (in TV mode it stays visible while it has the focus), takes the window's focus and puts it on the address field (newshell:focus-chromechannel).focus-pagecommand, which is validated.Spatial scoring (both bugs were found by the new tests):
docs/CONTROLLER-TEST.mdgains two scenarios for the TV session.Test plan
npm run typechecknpm test(104 passed)npm run test:e2e(51 passed, 3 skipped), with two new tests incontroller.spec.ts:docs/CONTROLLER-TEST.mdscenarios 5 and 6)🤖 Generated with Claude Code