nvaccess / nvda

NVDA, the free and open source Screen Reader for Microsoft Windows
Other
2.02k stars 625 forks source link

Grid cells with focusable controls get read twice #10096

Open mibadget opened 4 years ago

mibadget commented 4 years ago

Steps to reproduce:

  1. Go to https://www.w3.org/TR/wai-aria-practices-1.1/examples/grid/LayoutGrids.html#ex2_label

  2. Start NVDA.

  3. Navigate to the level 3 heading called "Example 2: Pill List For a List of Message Recipients".

  4. Press tab to put focus on the link inside the first grid cell of the table below the heading.

  5. Switch NVDA to Focus Mode.

  6. Use arrow keys to move focus between focusable elements in the cells in the table.

  7. Listen to what NVDA reads for each cell.

    Actual behavior:

    NVDA Reads "Recipient Name 1 not selected row 1 column 1 Recipient Name 1 link row 1" when moving into the first cell from another element in the table.

    Expected behavior:

    NVDA Should read "row 1 column 1 Recipient Name 1 link".

System configuration

NVDA installed/portable/running from source:

installed

NVDA version:

2019.2

Windows version:

Version 10.0.18362 Build 18362

Name and version of other software in use when reproducing the issue:

Chrome Version 76.0.3809.100 (Official Build) (64-bit) Firefox Developer Edition 69.0b13 (64-bit)

Other questions

Does the issue still occur after restarting your PC?

Yes

Have you tried any other versions of NVDA? If so, please report their behaviors.

No

Adriani90 commented 4 years ago

cc: @MarcoZehe, @jcsteh, we see this issue in several cases in browsers, also checkboxes or edit fields in forms and modal dialogs are often reported twice by NVDA.

jcsteh commented 4 years ago

This is not Firefox specific. It occurs because you're focusing a link inside the cell and both the cell and the link have the same name. The cell inherits its name from the link, since ARIA says cells should get name from contents. Annoying, yes, but not a spec violation (quite the opposite).

The question is whether there's a way to improve this for users without breaking other use cases in the process.

Adriani90 commented 4 years ago

cc: @JulienCochuyt

JulienCochuyt commented 4 years ago

I guess that in focus mode, table cells should not have their name inferred from their content when reporting the focus ancestry as contextual info. @jcsteh, what do you think? Is that something easily feasible with the current architecture? Or maybe can you think of a case where the above statement would not be satisfying?

jcsteh commented 4 years ago

I guess that in focus mode, table cells should not have their name inferred from their content when reporting the focus ancestry as contextual info.

NVDA isn't inferring name from content. The browser is inferring the name from content, as required by the ARIA spec. If NVDA wanted to "fix" this, it would need to avoid reading the name of the cell in this case.

edwardskrod commented 3 years ago

This also happens in DataGrid cells in WPF applications.

The problem here is that NVDA is reading both the DATAGRID Cell Name and also the text. Maybe WPF sets the cell name to the text? However, because the DataGrid cell Name is the same as the text, the value gets read twice.

Data Grid Cell 'KeyVaultCertificate' DataGrid

Text 'KeyVaultCertificate' DataGrid_Text

Here's the NVDA Speech Viewer output. You can see that all of the DataGrid Cells and their respective values are being output twice. For example, with the following DataGrid: Name | Thumbprint | Status | Expiration Date | KeyVaultCertificate | xxxxxxxxx | Enabled | 4/17/2021 | test | xxxxxxxxx | Enabled | 5/29/2012 |

Anytime you tab to one of the values in the column, such as Name, you'll see the following in the SpeechViewer:

KeyVaultCertificate KeyVaultCertificate row 1 Name column 1 xxxxxxxxx xxxxxxxxx row 1 Thumbprint column 2 Enabled Enabled row 1 Status column 3 4/17/2021 4/17/2021 row 1 Expiration Date column4

Here's an image since I wasn't able to copy paste from the Screen Reader. I scrubbed sensitive information. NVDA SpeechViewer

Adriani90 commented 2 weeks ago

Still reproducible in Firefox 127, Chrome Canary 128 or Edge 127 with NVDA 2024.2.

cc: @SaschaCowley