diff --git a/README.md b/README.md index 054fddc..08b5d4b 100644 --- a/README.md +++ b/README.md @@ -223,13 +223,17 @@ carry covers what a list-driven application actually uses: * **Content** — `Items`, `Columns`, and per-column `Width` with the `AutoSizeToContent` / `AutoSizeToHeader` constants for widths measured rather than guessed. -* **Selection** — `SelectedItems`, `FocusedItem`, `MultiSelect`, `ClearSelection`, - `EnsureVisible`, and `Selected` / `Focused` on a row, both settable before the control has - a window so a list populated during form construction comes up on the right row. +* **Selection** — `SelectedItems`, `FocusedItem`, `ClearSelection`, `EnsureVisible`, and + `Selected` / `Focused` on a row, both settable before the control has a window so a list + populated during form construction comes up on the right row. +* **Multiple selection** — `MultiSelect`, off by default as on a WinForms `ListView`. Turning + it on gives the usual keyboard vocabulary: Shift with the arrows to extend, Ctrl with them to + move the focus without extending, Ctrl+Space to add the focused row. Screen readers announce + all three correctly, so this is a mode worth using rather than one to avoid. * **Appearance** — `BackColor` and `ForeColor`, per-row `ForeColor`, `BorderStyle`, and a - column's `Alignment` and `SortOrder` arrow, both settable at any time. Left alone, the colors follow the system - theme: light, dark and high contrast, and a switch between them while the application is - running. + column's `Alignment` and `SortOrder` arrow, both settable at any time. Left alone, the colors + follow the system theme: light, dark and high contrast, and a switch between them while the + application is running. * **Hit testing and layout** — `GetItemAt`, `GetItemBounds`, `SetInsertionMark` / `ClearInsertionMark` for a drop indicator during a reorder, and `BeginUpdate` / `EndUpdate` for bulk changes. @@ -296,11 +300,23 @@ French and Ukrainian catalogs. The menus are verified by ear with **JAWS**, **NVDA** and **Narrator**, and behave as expected on all three. -`NativeListView` is verified on the same three. Every WinForms-based variation reads only the +`NativeListView` is verified on the same three, in single and multiple selection alike. +Extending a selection, moving the focus without extending it, and selecting every row at once +are all announced correctly. The one shortfall is that no reader names the mode: a stock list +box is announced as a "multi select list box" and there is no equivalent wording for a list +view, so the behavior is described well while the mode itself never is. Every WinForms-based variation reads only the first column on all of them; the real `SysListView32` reads every column on all of them. Reports from other configurations are welcome. -RTL rendering is implemented but has not been verified against a real RTL locale. +Right-to-left rendering is verified against a real right-to-left catalog: the sample's Hebrew +translation, with Hebrew text in the menus, the column headers and the rows, and Hebrew +mnemonics through the collision validator. Submenu direction and the mirrored tree beside the +list both behave, the latter only once the tree is told to mirror — `RightToLeft` is an ambient +property and `RightToLeftLayout` is not, so a control that right-aligns its text has not +necessarily flipped its arrow keys. + +What has not been checked is a machine whose Windows display language is itself right-to-left, +which is a different test from switching language inside a left-to-right system. ## Building from source diff --git a/samples/NoteBook/LISTENING.md b/samples/NoteBook/LISTENING.md index 8e2d009..1964669 100644 --- a/samples/NoteBook/LISTENING.md +++ b/samples/NoteBook/LISTENING.md @@ -94,7 +94,40 @@ window that WinForms does not own. This is the step most likely to fail. - Right-click a **column header**. A different menu should open — the one about columns. - Right-click a **row**. The note menu should open instead. -## 6. A language change, and right to left +## 6. Multiple selection + +Open. The list is multi-select and nothing here is settled - this step exists to find out what +readers actually do with it, not to confirm something already known. Whatever you hear is the +result, including "nothing". + +- With focus on a row, hold **Shift** and press **Down arrow** to extend the selection. You + should hear the row you moved to. Whether you also hear that it was *added to* a selection, + and whether any reader tells you how many rows are now selected, is exactly what is being + measured. +- Press **Ctrl+Down arrow** a few times to move the focus without changing the selection, then + **Ctrl+Space** to add that row. A reader that does not distinguish these two is telling you + something worth writing down: the focus rectangle and the selection are separate things, and + a user who cannot hear which one moved cannot use this mode. +- Open the context menu with **Shift+F10** and choose **Select All**. Listen for whether the + new state is announced at all, or whether the list goes silent after a command that changed + every row in it. +- Shift-click and Ctrl-click with the mouse and compare. Readers sometimes announce a + mouse-driven selection change differently from a keyboard-driven one. + +Worth trying on all three readers, because this is the area where they diverge most. + +What has been heard so far, September 2026: selection behavior is announced well, on all three. +Extending, moving the focus without extending, and selecting everything at once all come across. + +The one gap is the label rather than the behavior. Readers announce a stock multi-select list +box as a "multi select list box", and there appears to be no equivalent wording for a list view +from any of them - so the mode itself is never named, however well its effects are described. +Whether that can be influenced from the control is unresolved: a multi-select list view, a +single-select one and a multi-select list box were all measured reporting identical MSAA state, +which suggests readers decide this from the control class rather than from anything the control +reports. If you can confirm that with a speech viewer, it is worth knowing. + +## 7. A language change, and right to left This is the part of the library with the least real-world verification, and the reason the sample ships a Hebrew catalog rather than only a layout switch: mirroring English text proves