Don't unnecessarily repeat row and column headers when navigating ARIA grids in focus mode.#20091
Merged
Merged
Conversation
…A grids in focus mode.
seanbudd
approved these changes
May 15, 2026
Contributor
There was a problem hiding this comment.
Pull request overview
Fixes #17750 by addressing two issues that caused NVDA to repeat row/column headers when navigating ARIA grid cells in focus mode: (1) the speech cache was being updated before speaking the focused object, and (2) virtual buffers used a different table id format than NVDAObjects, preventing cache comparison.
Changes:
- In
browseMode.py, reorderevent_gainFocusto speak the object first and update the speech cache viaspeakTextInfo(..., ONLYCACHE)afterwards, so cached coordinates don't suppress row/column change reports. - In
gecko_ia2._normalizeControlField, normalizetable-idto(windowHandle, uniqueId)so it matches the IAccessible NVDAObjecttableID, and update_getTableCellAtto unpack the tuple viagetNVDAObjectFromIdentifier(*tableID). - Add a user changes entry for the bug fix.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| user_docs/en/changes.md | Adds a bug-fix entry describing the corrected ARIA grid header behaviour. |
| source/virtualBuffers/gecko_ia2.py | Normalizes vbuf table-id to a (docHandle, id) tuple and adapts _getTableCellAt to use it. |
| source/browseMode.py | Speaks the focused object before updating the speech cache so row/column changes are detected. |
Boumtchack
pushed a commit
to France-Travail/nvda
that referenced
this pull request
May 18, 2026
…A grids in focus mode. (nvaccess#20091) Fixes nvaccess#17750. Summary of the issue: When moving to an ARIA grid cell in focus mode in web browsers, NVDA previously reported both the row and column headers even if only the row or only the column changed. Description of user facing changes: When moving to an ARIA grid cell in focus mode in web browsers, NVDA no longer reports both the row and column headers even if only the row or only the column changed. Description of development approach: Previously, there were two problems: After c4c3da6 (BrowseModeDocumentTextInfo.getControlFieldSpeech: Report the name of groupings (such as fieldsets) for quicknav and focus jumps, similar to how landmark labels are reported. nvaccess#7435), Browse mode was updating the speech properties cache before speaking the focused object, even in focus mode. That meant that the row and column coordinates for the newly focused cell were already cached before NVDA spoke it, which made NVDA behave as if the coordinates never changed. The fix is to update the cache from the TextInfo after speaking the focused object. Virtual buffers just used the IA2 unique id as the table id, but NVDAObjects use both the window handle and id, meaning that these didn't compare correctly in the speech cache. The fix is to make the vbuf normalize table ids to windowHandle and id.
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.
Link to issue number:
Fixes #17750.
Summary of the issue:
When moving to an ARIA grid cell in focus mode in web browsers, NVDA previously reported both the row and column headers even if only the row or only the column changed.
Description of user facing changes:
When moving to an ARIA grid cell in focus mode in web browsers, NVDA no longer reports both the row and column headers even if only the row or only the column changed.
Description of development approach:
Previously, there were two problems:
Testing strategy:
In both Firefox and Edge:
Tested as described in #17750 (comment). Confirmed that this works as expected.
With the same test URL, also verified that table navigation (control+alt+arrows) still behaves correctly in browse mode.
To ensure this doesn't regress #7435, tested with the following test case:
Known issues with pull request:
None.
Code Review Checklist: