RFR: 8091673: Public focus traversal API for use in custom controls [v3]
Kevin Rushforth
kcr at openjdk.org
Tue Oct 29 12:26:13 UTC 2024
On Mon, 28 Oct 2024 23:53:44 GMT, Michael Strauß <mstrauss at openjdk.org> wrote:
>> Perhaps we need to further clarify what the focused/focusVisible/focusWithin properties are for?
>
> How about this for `focusVisible`:
>
> /**
> * Indicates whether this {@code Node} should visibly indicate focus.
> * <p>
> * This flag is set when the node is {@link #focusedProperty() focused} via keyboard navigation,
> * or when the input focus was programmatically moved from another node to this node with
> * {@link #requestFocusTraversal} while the other node visibly indicated focus.
> * <p>
> * The {@code focusVisible} flag can be used by applications that do not want a permanent focus
> * indicator, and opt for a focus indicator that is only visible when it is most helpful to the
> * user. This is not the case when the user clicks on a control (because they would know which
> * control they clicked on), but only when a keyboard-initiated focus traversal moves the input
> * focus to another control.
> */
>
>
> As `requestFocusTraversal` is concerned, I think we can simply this a bit. We don't need users to check whether `focusVisible` is set on the current node; the implementation can do this internally. Here's a revised parameter doc:
>
> * @param keyNavigation {@code true} if this method is called as a result of keyboard navigation;
> * {@code false} otherwise.
>
>
> The implementation would then set `focusVisible` to true if either the `keyNavigation` argument is true, or if the current node's `focusVisible` flag is true.
This is better than the previous, since it only asks the caller of this method, typically the Skin of a custom control, to provide the one missing piece of information -- whether or not the method is in response to keyboard navigation -- and not ask the caller to compute the final answer. That's good. The only question I have is: can we do even better? Is there enough information for the implementation of `requestFocusTraversal` to know whether it was called from keyboard event? If not, then this updated proposal seems reasonable.
-------------
PR Review Comment: https://git.openjdk.org/jfx/pull/1604#discussion_r1820696736
More information about the openjfx-dev
mailing list