mirror of
https://github.com/serrebidev/SerrebiTorrent.git
synced 2026-08-13 08:46:52 -07:00
-
V1.7.4 Stable
released this
2026-06-21 09:35:32 -07:00 | 27 commits to main since this releaseBreaking
- None
Features
- None
Fixes
- fix(a11y): announce virtual list rows to NVDA on arrow navigation
Other
- docs: add NVDA virtual list memory
- The torrent list, file list, peers, trackers, and RSS article lists are all
- wx.LC_VIRTUAL controls. NVDA announces the row carrying wx.LIST_STATE_FOCUSED,
- but these lists never re-asserted a focused row after a refresh, so arrowing
- went silent while Tabbing in still worked:
-
- The torrent list's per-row Select() loop ran on every 2-second refresh, and
- Select() sets only LVIS_SELECTED (never LVIS_FOCUSED), churning the focused
- row out from under the user.
-
- The Files/Peers/Trackers/Article lists called SetItemCount() on every refresh
- (which wipes the focused row on a virtual list) and never established one.
- Add AccessibleVirtualListMixin: after each populate it re-asserts a single
- LIST_STATE_FOCUSED row via SetItemState (the state that fires the native MSAA
- focus event NVDA reads), but only moves focus when the list actually holds
- keyboard focus, so background refreshes never yank focus from elsewhere. The
- torrent list preserves the focused row by hash across sort/refresh and
- re-applies selection only when the row set actually changed; SetItemCount is
- skipped when the count is unchanged.
- Non-virtual controls (ListBox, CheckListBox, LC_SINGLE_SEL ListCtrl, TreeCtrl)
- keep real per-item accessibles and were already fine.
- Adds display-free unit tests for the focus-restoration decision logic.
- Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads