JDK-8166858 : [macosx] Incorrect VoiceOver cursor behavior when selecting JList items
  • Type: Bug
  • Component: client-libs
  • Sub-Component: javax.accessibility
  • Affected Version: 9
  • Priority: P3
  • Status: Closed
  • Resolution: External
  • OS: os_x
  • Submitted: 2016-09-28
  • Updated: 2018-08-28
  • Resolved: 2016-11-01
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 9
9Resolved
Related Reports
Relates :  
Relates :  
Description
- make sure VoiceOver is set up as follows: 
  - System Preferences, Accessibility, VoiceOver, Open VoiceOver Utility, Navigation 
  - In Grouping behavior: Ignore groups 
  - Keyboard focus follows VoiceOver cursor: checked 
  - VoiceOver cursor follow keyboard focus: checked 
- start VoiceOver 
- start SwingSet2 
- click the ListDemo toolbar button to select the ListDemo 
- press control + option + right arrow 10 times to move focus to the text above the list box 
- press control + option + down arrow 1 time to move focus to the list 
- press shift + control + down arrow to interact with the list 

When using control + option + down arrow selection should move down one list item but the selection is getting extended instead. 

This worked back when JDK-8145207 was pushed.  Now it no longer works. I put the current 9 repo back to the point where the patch was pushed and the bug still occurs so the problem may be do to a recent upgrade to El Capitan.
Comments
might be re-open once we have a responce from Apple
01-11-2016

I opened 28609708 at https://bugreport.apple.com
10-10-2016

Posted to accessibility-dev@lists.apple.com: I noticed something interesting today regarding this. If I uncheck "Keyboard focus follows VoiceOver cursor" then the problem goes away, i.e. VO causes no selections when using control option up/down arrow. The selection only happens when using control option space. When that option is checked then when using control option up/down arrow VO will not deselect the old item when selecting the new item.
04-10-2016

Posted to accessibility-dev@lists.apple.com: After thinking about this more I think with 10.10.5 control option up/down arrow did not cause VO to send accessibilitySetSelectedAttribute: at all and that it wasn't until control option space was pressed that the item was selected.
30-09-2016

I see no a11y interface for VO to know that a list is either single or multi-select so I am guessing that it knows that through non-a11y means. Did anything change in the Java code recently such that the native code would not know that a list is multi-select? If VO doesn't know the list is multi-select it would not know that it needs to de-select the prior selection prior to selecting the new selection. This would explain the change of behavior between when JDK-8145207 was pushed and now.
29-09-2016

Posted to accessibility-dev@lists.apple.com: Here's what happens when in VO multi-select mode, i.e. control option command return. There is no problem with this. Add the first one... In -[JavaComponentAccessibility accessibilitySelectedChildrenAttribute] self role: list returning: ( "AXStaticText(title:'', desc:'text', value:'YoYoSystems')" ) In -[JavaComponentAccessibility accessibilitySelectedAttribute] self role: label self value: NetSoft returning: 0 In -[JavaComponentAccessibility accessibilitySetSelectedAttribute:] self role: label self value: NetSoft value: 1 In -[JavaComponentAccessibility postSelectionChanged] self role: list In -[JavaComponentAccessibility accessibilitySelectedAttribute] self role: label self value: NetSoft returning: 1 In -[JavaComponentAccessibility accessibilitySelectedChildrenAttribute] self role: list returning: ( "AXStaticText(title:'', desc:'text', value:'NetSoft')", "AXStaticText(title:'', desc:'text', value:'YoYoSystems')" ) Add the second one... In -[JavaComponentAccessibility accessibilitySelectedAttribute] self role: label self value: TeraSystems returning: 0 In -[JavaComponentAccessibility accessibilitySetSelectedAttribute:] self role: label self value: TeraSystems value: 1 In -[JavaComponentAccessibility postSelectionChanged] self role: list In -[JavaComponentAccessibility accessibilitySelectedAttribute] self role: label self value: TeraSystems returning: 1 In -[JavaComponentAccessibility accessibilitySelectedChildrenAttribute] self role: list returning: ( "AXStaticText(title:'', desc:'text', value:'TeraSystems')", "AXStaticText(title:'', desc:'text', value:'YoYoSystems')", "AXStaticText(title:'', desc:'text', value:'NetSoft')" )
29-09-2016

Posted to accessibility-dev@lists.apple.com: In response to control option downarrow VO sends back two accessibilitySetSelectedAttribute:, one for the prior list item and one for the new list item, each with value 1. A single post NSAccessibilitySelectedChildrenChangedNotification is sent back due to the newly added item to the selection. In -[JavaComponentAccessibility accessibilitySelectedChildrenAttribute] self role: list returning: ( "AXStaticText(title:'', desc:'text', value:'YoYoSystems')" ) In -[JavaComponentAccessibility accessibilitySetSelectedAttribute:] self role: label self value: YoYoSystems value: 1 In -[JavaComponentAccessibility accessibilitySetSelectedAttribute:] self role: label self value: MetaDynamics value: 1 In -[JavaComponentAccessibility postSelectionChanged] self role: list In -[JavaComponentAccessibility accessibilitySelectedChildrenAttribute] self role: list returning: ( "AXStaticText(title:'', desc:'text', value:'MetaDynamics')", "AXStaticText(title:'', desc:'text', value:'YoYoSystems')" ) In response to the next control option downarrow VO sends back one accessibilitySetSelectedAttribute: for the new list item. Again a single post is sent back due to the newly added item to the selection. In -[JavaComponentAccessibility accessibilitySetSelectedAttribute:] self role: label self value: NetSoft value: 1 In -[JavaComponentAccessibility postSelectionChanged] self role: list In -[JavaComponentAccessibility accessibilitySelectedChildrenAttribute] self role: list returning: ( "AXStaticText(title:'', desc:'text', value:'NetSoft')", "AXStaticText(title:'', desc:'text', value:'YoYoSystems')", "AXStaticText(title:'', desc:'text', value:'MetaDynamics')" )
29-09-2016

This the behavior of Finder using its list view: control option arrow: selects one item at new location control option command return: enters multi-selection mode and deselects the current item If you want that item selected you have to redo control option command return control option arrow: moves VO cursor without selecting a list item control option command return: adds one item to the selection I could not find a way to get out of multiselect mode - other than pressing command tab twice to move focus away from Finder and back again.
29-09-2016

This is how lists are currently working: control option arrow: extends the selection control option spacebar: selects one item control option command return: enters multi-selection mode control option arrow: moves VO cursor without selecting a list item control option command return: adds one item to the selection control option spacebar: exit multi-select mode and select the current list item I am checking with Apple to see if this is the correct behavior.
29-09-2016