Accessible name-changed events missing when files are renamed
Steps to reproduce:
- Create a folder with two files: "foo" and "bar"
- View the folder in Nautilus using the grid view or list view.
- Launch the attached accessible event listener.
- Arrow between "foo" and "bar" to verify the listener prints out the correct names.
- Move to "foo", press F2 to rename it, type "baz" and press Return.
- Arrow between "baz" and "bar" to verify the listener prints out the correct names.
Expected results: At step 6, arrowing to "baz" would cause the listener to print "baz".
Actual results: At step 6, arrowing to "baz" causes the listener to print "foo". This is due to Nautilus failing to fire an accessible name-changed event when the name of a file is changed.
Impact: Orca will present the old name if I (Orca maintainer) do not work around this bug.
Explanation:
Orca v46 uses the AT-SPI2 cache for everything, including the accessible name. Using the cache for names gives Orca a significant performance win because Orca ALWAYS wants the accessible name, and each time it asks for it without the cache being enabled, there is a dbus call to retrieve the name. What causes AT-SPI2 to update its cached properties, states, etc. is receiving the related accessible event from the application or toolkit (e.g. it updates the cached name in response to a name-changed event, the cached state in response to a state-changed event, etc.).
Because of bugs such as this one, Orca clears the cache on the focused/selected object so the user gets the correct name. Unfortunately clearing the cache means we lose some of the performance benefit because the dbus call becomes necessary.
Note: In the case of the grid view, it may be necessary to fire two name-changed events. That is because there is a table cell (which emits the focus event) which has a child table cell (the renderer perhaps??). Because some Gtk table cells expose the name/text in the child, Orca looks to the child. So if the parent has the updated name but the child does not, Orca might still present the wrong name when I remove the workaround.
Sample output list view:
bar table row is now focused
foo table row is now focused
New Filename text is now focused
New Filename text is now focused
New Filename text is now focused
foo table row is now focused # BUG: Should be "baz"
bar table row is now focused
foo table row is now focused # BUG: Should be "baz"
Sample output grid view:
bar table cell is now focused
foo table cell is now focused
text is now focused
text is now focused
text is now focused
foo table cell is now focused # BUG: Should be "baz"
bar table cell is now focused
foo table cell is now focused # BUG: Should be "baz"
@tyrylu: FYI.