Skip to content

Support screen reader focus and activate on chat list rows#30769

Open
rezabakhshilaktasaraei wants to merge 2 commits into
telegramdesktop:devfrom
rezabakhshilaktasaraei:acc-chat-list-move-focus
Open

Support screen reader focus and activate on chat list rows#30769
rezabakhshilaktasaraei wants to merge 2 commits into
telegramdesktop:devfrom
rezabakhshilaktasaraei:acc-chat-list-move-focus

Conversation

@rezabakhshilaktasaraei

@rezabakhshilaktasaraei rezabakhshilaktasaraei commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

The chat list rows are painted/virtual (no real QWidget), so a screen reader couldn't move focus to a row or activate one. With the action interface added in desktop-app/lib_ui#303, those requests now reach InnerWidget:

Move focus (e.g. NVDA+Shift+Numpad Minus) -> accessibilityChildSetFocus(int index):

  • hops to the main thread (UIA invokes provider actions on a background thread);
  • moves the list's internal selection to that row (Default and Filtered states);
  • scrolls it into view and reports it via the existing announceSelectedFocus() path.

Activate (e.g. NVDA+Numpad Enter / UIA Invoke) -> accessibilityChildActivate(int index):

  • on the main thread, selects that row and opens the chat via chooseRow().

The selection logic shared by both is extracted into selectChildByIndex(), and the filtered-mode scroll is extracted from selectSkip() into a reusable scrollToFilteredSelected().

Depends on desktop-app/lib_ui#303 (adds the accessibilityChildSetFocus / accessibilityChildActivate virtuals); CI will not compile until that is merged and the submodule is updated.

@rezabakhshilaktasaraei rezabakhshilaktasaraei changed the title Move chat list selection to navigated row on screen reader focus Support screen reader focus and activate on chat list rows Jun 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant