A JButton's `AccessibleAction#getAccessibleActionDescription()` is localized.

For example: in German it returns "clicken", and in English it returns "click".

In JavaAccessibilityActions.m we have this method:

void initializeActions() {
    int actionsCount = 5;

    sActions = [[NSMutableDictionary alloc] initWithCapacity:actionsCount];

    [sActions setObject:NSAccessibilityPressAction forKey:@"click"];
    [sActions setObject:NSAccessibilityIncrementAction forKey:@"increment"];
    [sActions setObject:NSAccessibilityDecrementAction forKey:@"decrement"];
    [sActions setObject:NSAccessibilityShowMenuAction forKey:@"toggle popup"];
    [sActions setObject:NSAccessibilityPressAction forKey:@"toggleexpand"];
    ...


This sets up a mapping based on the constant fields in 
`javax.accessibility.AccessibleAction`.

But this mapping doesn't help if the String we interface with is translated. 
(This test focuses on German, but this principle applies to any non-English 
localization.)

For the most part this won't seriously affect German users, because VoiceOver 
has a fallback: if you ask to "click" a button that doesn't have a 
NSAccessibilityPressAction, then VoiceOver will temporarily move the mouse over 
the button, click it, and then restore the mouse.

This PR modifies CommonComponentAccessibility.m so it defines a 
NSAccessibilityPressAction, so VoiceOver doesn't have to move the mouse to 
activate buttons. This is based on the observation that VoiceOver is willing to 
try pressing the component anyway (with a simulated mouse click), therefore it 
should be safe (or at least "equally dangerous") to offer a 
NSAccessibilityPressAction instead.

If this is considered too generic / risky we could instead:
A. Limit this new logic to components with AccessibleRoles that act as buttons 
or
B. De-localize this text in CAccessibility. For ex: `if (axActionDesc == 
UIManager.getString("AbstractButton.clickText") return "click"`

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

Commit messages:
 - 8377938: use NSAccessibilityPressAction for only action

Changes: https://git.openjdk.org/jdk/pull/30181/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=30181&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8377938
  Stats: 109 lines in 2 files changed: 109 ins; 0 del; 0 mod
  Patch: https://git.openjdk.org/jdk/pull/30181.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/30181/head:pull/30181

PR: https://git.openjdk.org/jdk/pull/30181

Reply via email to