On Tue, 13 Feb 2024 12:29:49 GMT, Ambarish Rapte <ara...@openjdk.org> wrote:

> This is accessibility specific fix.
> 
> **Issue**: When a ListView is shown for first time then accessibility focus 
> rectangle is not drawn around the focused ListIem
> 
> **Cause:** 
>    The ListView takes a little time to create it's skin(ListViewSkin) and the 
> skins for ListItems(ListCellSkin)
>    If the Accessibility client application requests focused item before 
> ListView is completely ready then JavaFX return null.
> 
> **Fix**: Send a focus item change notification to accessibility client 
> application after the ListIteam is ready
> 
> **Verification:**
> - On Windows machine, launch Narrator. Issue is observed only with Narrator
> - Execute the 
> [program](https://bugs.openjdk.org/secure/attachment/104180/Main.java) 
> attached to the JBS issue 
> [JDK-8309374](https://bugs.openjdk.org/browse/JDK-8309374)
>      Move through the TextFields and press `Alt+down`, observe that focus 
> rectangle is drawn correctly.
>      Once the ListView is showing Press and hold `Up/Down` or `Ctrl + 
> Up/Down` keys, observe that focus rectangle is always drawn.

The fix looks good to me, and my initial testing shows that it works as 
expected. I left a few suggestions on minor wording changes inline. I'll 
reapprove if you make the changes.

modules/javafx.controls/src/main/java/javafx/scene/control/ListCell.java line 
351:

> 349: 
> 350:     /*
> 351:      * The layoutChildren() method is overloaded to address a specific 
> accessibility issue: JBS-8309374

Minor typos: "overloaded" --> "overridden"; "JBS" --> "JDK"

modules/javafx.controls/src/main/java/javafx/scene/control/ListCell.java line 
366:

> 364:             if (listView != null) {
> 365:                 /*
> 366:                  * The notifyAccessibleAttributeChanged() call is 
> submitted on the Application thread, because:

This method is already being run on the application thread.

Suggestion: "is submitted via runLater to defer it until after the layout 
completes, because:"

modules/javafx.controls/src/main/java/javafx/scene/control/ListCell.java line 
371:

> 369:                  * notification from here.
> 370:                  * We observed that this scenario occurs when client 
> application is trying to get the
> 371:                  * UIA_HasKeyboardFocusPropertyId property of a focused 
> ListItem's parent(ListView).

I might replace `UIA_HasKeyboardFocusPropertyId`, which is Windows-specific, 
with something more generic like "the focus item".

modules/javafx.controls/src/main/java/javafx/scene/control/ListCell.java line 
372:

> 370:                  * We observed that this scenario occurs when client 
> application is trying to get the
> 371:                  * UIA_HasKeyboardFocusPropertyId property of a focused 
> ListItem's parent(ListView).
> 372:                  * This scenario is avoided by submitting the call 
> notifyAccessibleAttributeChanged() on Application thread,

Similar comment to the earlier one about the thread. I suggest something like:

"This scenario is avoided by submitting the call via runLater,"

-------------

Marked as reviewed by kcr (Lead).

PR Review: https://git.openjdk.org/jfx/pull/1363#pullrequestreview-1878722288
PR Review Comment: https://git.openjdk.org/jfx/pull/1363#discussion_r1488437475
PR Review Comment: https://git.openjdk.org/jfx/pull/1363#discussion_r1488442179
PR Review Comment: https://git.openjdk.org/jfx/pull/1363#discussion_r1488445070
PR Review Comment: https://git.openjdk.org/jfx/pull/1363#discussion_r1488447524

Reply via email to