Summary: | Calc: With >16k column support, screen readers don't announce all cells | ||
---|---|---|---|
Product: | LibreOffice | Reporter: | Michael Weghorn <m.weghorn> |
Component: | Calc | Assignee: | Michael Weghorn <m.weghorn> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | m.weghorn |
Priority: | medium | Keywords: | accessibility |
Version: | 7.5.0.0 alpha0+ | ||
Hardware: | All | ||
OS: | All | ||
Whiteboard: | target:7.5.0 | ||
Crash report or crash signature: | Regression By: | ||
Bug Depends on: | |||
Bug Blocks: | 101912 | ||
Attachments: |
Screencast with Orca/gtk3
Screencast with NVDA/Windows |
Description
Michael Weghorn
2022-08-30 08:35:07 UTC
Created attachment 182092 [details]
Screencast with NVDA/Windows
From what I have seen so far, the problem is an integer overflow. The index currently used for a11y children/cells is sal_Int32 (i.e. 32 bit), but with 16k column support, Calc has more cells than that. Potential way forward that I'm currently looking into: 1) switch to use of 64-bit child/cell index internally * platform a11y APIs still use 32-bit indices, nothing we can change * but that can be used to avoid overflows internally and thus also make the table cell interfaces implementations work (currently implemented for qt6, winaccessibility) 2) in screen readers, avoid running into the issue of too large child/cell indices by querying the row/column from the table cell interface (IAccessibleTableCell for IAccessible2, AT-SPI TableCell for Linux), not the table interface * from what I have seen so far, NVDA already seems to do that, orca doesn't 3) implement support for the AT-SPI TableCell interface for the gtk3 VCL plugin That should hopefully *mostly* fix the problem. What's still problematic are cell selections including more than 2^31 cells, since the index into the selection is also limited to 32 bit in the platform a11y APIs and I currently don't see any way than using that for the screen readers to retrieve the first and last cell in the selection. For the case that whole rows/columns are selected, Orca already seems to apply a different handling (maybe querying the selected rows/columns from the Table interface), so that also works fine (e.g. Orca says "All cells selected", "Columns ... to ... selected". As a side note, UIA has specific methods in the ISelectionProvider2 interface that allow retrieving the first and last selected item, ISelectionProvider2::get_FirstSelectedItem and ISelectionProvider2::get_LastSelectedItem, but we currently don't support UIA on Windows. Michael Weghorn committed a patch related to this issue. It has been pushed to "master": https://git.libreoffice.org/core/commit/1dbf4a111486ee4e5e2d9da0bbf5544742ae7805 tdf#150683 qt a11y: Avoid using 32-bit child index here It will be available in 7.5.0. The patch should be included in the daily builds available at https://dev-builds.libreoffice.org/daily/ in the next 24-48 hours. More information about daily builds can be found at: https://wiki.documentfoundation.org/Testing_Daily_Builds Affected users are encouraged to test the fix and report feedback. Michael Weghorn committed a patch related to this issue. It has been pushed to "master": https://git.libreoffice.org/core/commit/5226e3889155ea22465d488174a6f8720085628a tdf#150683 qt a11y: Add bound checks for table methods It will be available in 7.5.0. The patch should be included in the daily builds available at https://dev-builds.libreoffice.org/daily/ in the next 24-48 hours. More information about daily builds can be found at: https://wiki.documentfoundation.org/Testing_Daily_Builds Affected users are encouraged to test the fix and report feedback. Michael Weghorn committed a patch related to this issue. It has been pushed to "master": https://git.libreoffice.org/core/commit/206543c7bef58fc559852553a3b2faba0b604259 [API CHANGE] tdf#150683 a11y: Switch a11y child index to 64 bit It will be available in 7.5.0. The patch should be included in the daily builds available at https://dev-builds.libreoffice.org/daily/ in the next 24-48 hours. More information about daily builds can be found at: https://wiki.documentfoundation.org/Testing_Daily_Builds Affected users are encouraged to test the fix and report feedback. Michael Weghorn committed a patch related to this issue. It has been pushed to "master": https://git.libreoffice.org/core/commit/d92ad32c98c6a094195e10f066968eb60105dff1 tdf#150683 sc a11y: Add a test case for 64-bit a11y cell index It will be available in 7.5.0. The patch should be included in the daily builds available at https://dev-builds.libreoffice.org/daily/ in the next 24-48 hours. More information about daily builds can be found at: https://wiki.documentfoundation.org/Testing_Daily_Builds Affected users are encouraged to test the fix and report feedback. (In reply to Michael Weghorn from comment #2) Current status: > Potential way forward that I'm currently looking into: > > 1) switch to use of 64-bit child/cell index internally > * platform a11y APIs still use 32-bit indices, nothing we can change > * but that can be used to avoid overflows internally and thus also make > the table cell interfaces implementations work (currently implemented for > qt6, winaccessibility) Done, s. above commits. > 2) in screen readers, avoid running into the issue of too large child/cell > indices by querying the row/column from the table cell interface > (IAccessibleTableCell for IAccessible2, AT-SPI TableCell for Linux), not the > table interface > * from what I have seen so far, NVDA already seems to do that, orca > doesn't Done: * NVDA "just works" * for Orca, there's https://gitlab.gnome.org/GNOME/orca/-/merge_requests/131 which has been merged today > 3) implement support for the AT-SPI TableCell interface for the gtk3 VCL > plugin That's still WIP, but announcement already works with a WIP change. FWIW, announcement also works with the qt6 VCL plugin with the additional Qt changes mentioned in the commit msg of https://git.libreoffice.org/core/commit/206543c7bef58fc559852553a3b2faba0b604259 Michael Weghorn committed a patch related to this issue. It has been pushed to "master": https://git.libreoffice.org/core/commit/dd5f021e08b0f6da1b5330c37db4c759e35941c6 tdf#150683 gtk3 a11y: Expose AtkTableCell interface for cells It will be available in 7.5.0. The patch should be included in the daily builds available at https://dev-builds.libreoffice.org/daily/ in the next 24-48 hours. More information about daily builds can be found at: https://wiki.documentfoundation.org/Testing_Daily_Builds Affected users are encouraged to test the fix and report feedback. (In reply to Michael Weghorn from comment #7) > > 3) implement support for the AT-SPI TableCell interface for the gtk3 VCL > > plugin > > That's still WIP, but announcement already works with a WIP change. That's now done too, s. commit from comment 9 -> Closing this bug as FIXED |