fix: announce all content inside role="alert"#20056
Conversation
There was a problem hiding this comment.
Pull request overview
Fixes NVDA’s handling of HTML/ARIA role="alert" so that alert events announce the full contents of the alert container (not just focusable descendants), addressing #14990.
Changes:
- Update IAccessible alert event handling to speak all recursive descendants of an alert container.
- Add a user-facing changelog entry noting improved
role="alert"announcements.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
source/NVDAObjects/IAccessible/__init__.py |
Expands alert announcement logic to iterate through and announce all descendant content. |
user_docs/en/changes.md |
Documents the user-facing change for role="alert" announcements. |
| speech.speakObject(child, reason=controlTypes.OutputReason.FOCUS, priority=speech.Spri.NOW) | ||
| braille.handler.message(braille.getPropertiesBraille(name=self.name, role=self.role)) | ||
| speech.speakObject(child, reason=controlTypes.OutputReason.FOCUS, priority=speech.Spri.NOW) | ||
| braille.handler.message(braille.getPropertiesBraille(name=self.name, role=self.role)) |
There was a problem hiding this comment.
fixed even though this had been happening since before this PR
| speech.speakObject(child, reason=controlTypes.OutputReason.FOCUS, priority=speech.Spri.NOW) | ||
| braille.handler.message(braille.getPropertiesBraille(name=self.name, role=self.role)) | ||
| speech.speakObject(child, reason=controlTypes.OutputReason.FOCUS, priority=speech.Spri.NOW) | ||
| braille.handler.message(braille.getPropertiesBraille(name=self.name, role=self.role)) |
| speech.speakObject(self, reason=controlTypes.OutputReason.FOCUS, priority=speech.Spri.NOW) | ||
| braille.handler.message(braille.getPropertiesBraille(name=self.name, role=self.role)) | ||
| for child in self.recursiveDescendants: | ||
| if controlTypes.State.FOCUSABLE in child.states: |
There was a problem hiding this comment.
What kind of announcement do you think users don't want NVDA to speak? I couldn't think of anything.
I've fixed to filter out some redundant announcements, but if you want more filtering I'd like you to tell me.
There was a problem hiding this comment.
I should keep the current filtering and expand it for real use cases suggested in issues, right?
For these issues, I understand I should support heading, paragraph, list, and listitem announcements.
There was a problem hiding this comment.
Yes I think that's a good idea. Thoughts @SaschaCowley?
e20ded3 to
8989eb8
Compare
Link to issue number:
close #14990
Summary of the issue:
The content of HTML element with
role="alert"had only announced its focusable children contents.Description of user facing changes:
NVDA now announces all content inside
role="alert"elements.Description of developer facing changes:
Description of development approach:
I removed
ifconditional branch, so all children contents will be announced.This was introduced in mehm8128@370d052 18 years ago, but
is not correct now, this causes the issue I fixed for this PR, so I removed
ifconditional branch.Testing strategy:
test with sample code described in the original issue and confirm that all contents inside
role="alert"are announced.on both Chromium and Firefox, it performs as expected.
Known issues with pull request:
Code Review Checklist: