Bug 161444 - When switching sheets, newly-focused sheet should fire object:state-changed:focused prior to object:active-descendant-changed
Summary: When switching sheets, newly-focused sheet should fire object:state-changed:f...
Status: NEW
Alias: None
Product: LibreOffice
Classification: Unclassified
Component: Calc (show other bugs)
Version:
(earliest affected)
24.2.3.2 release
Hardware: All Linux (All)
: medium normal
Assignee: Not Assigned
URL:
Whiteboard:
Keywords: accessibility
Depends on:
Blocks: a11y-Linux
  Show dependency treegraph
 
Reported: 2024-06-06 16:14 UTC by Joanmarie Diggs
Modified: 2024-07-15 11:10 UTC (History)
3 users (show)

See Also:
Crash report or crash signature:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Joanmarie Diggs 2024-06-06 16:14:09 UTC
Steps to reproduce:

1. Launch Orca
2. Launch Calc and create a second sheet
3. Use Ctrl+PageUp/Ctrl+PageDown to switch sheets

Expected results: Orca would announce the name of the sheet before announcing the selected cell.

Actual results: Orca just announces the selected cell.

From debugging things on the Orca side, it looks like the following is taking place when moving from Sheet 1 to Sheet 2:

1. The document fires object:children-changed:remove for Sheet 1
2. The document fires object:children-changed:add for Sheet 2
3. Sheet 2 fires object:active-descendant-changed for the selected cell

When Orca goes to present the new focus/object of interest, it always looks for the new ancestors so that it can give context to the user about their new location.

In the case described in this issue, Orca checks for the common ancestors between the old focus (cell selected on Sheet 1) and the new focus (cell selected on sheet 2). This fails because Sheet 1 is being (has been?) destroyed.

Orca doesn't want to be too chatty and speak the sheet, and the document, and the root pane, and the window, so it doesn't speak any ancestors in this case. Instead it just announces the new active descendant.

I potentially could handle this situation in Orca. HOWEVER, Orca already has similar code in its web support for recovery from destroyed object. And those heuristics have a tendency to get things wrong, which leads to more heuristics, which leads to new things being wrong, .... :( I really don't want to add more fragile heuristics to Orca if it can be avoided.

ALSO: What is functionally taking place is that Sheet 2 gains focus. So I don't think it would be a hack for Sheet 2 to fire object:state-changed:focused prior to firing active-descendant change.

Related aside: I've noticed that Orca recently only announces the root pane when Calc is initially launched. I've not yet debugged to see whether that's an Orca change or a Calc change. But, if the active sheet fired object:state-changed:focused upon launch of Calc, I believe it would also solve that issue.

Michael: Thoughts?
Comment 1 Milton 2024-06-06 18:15:01 UTC
Confirmed, Ubuntu 24.04 with Orca main, Version: 24.2.3.2 (X86_64) / LibreOffice Community
Build ID: 420(Build:2)
CPU threads: 4; OS: Linux 6.8; UI render: default; VCL: gtk3
Locale: nl-NL (nl_NL.UTF-8); UI: nl-NL
Ubuntu package version: 4:24.2.3-0ubuntu0.24.04.2
Calc: threaded