On Mon, 14 Jul 2025 18:36:48 GMT, Martin Fox <m...@openjdk.org> wrote:

> In this PR setting hoistFocus on a control only updates the flag in the 
> control itself. What if the control’s skin introduces sub-nodes? I would 
> assume that setting hoistFocus on a control would automatically set that flag 
> on the control’s entire skin. Is that correct? If so what are the mechanics 
> of making that happen?

The `hoistFocus` flag only applies to the node on which it is set, and not to 
its descendants. Consider a control that uses a sub-control in its skin. If the 
sub-control also delegates focus to one of its own descendants, then those 
descendants individually get to decide whether to hoist focus to the 
sub-control; and if so, the sub-control will further hoist focus to the outer 
control.

Automatically setting this flag precludes the option to have sub-nodes that 
_don't_ hoist focus. Consider a Button: it has an optional sub-node (`graphic`) 
that is independently focusable and doesn't hoist focus. A custom button could 
conceivably have both: a delegate (maybe a text field), as well as an 
independently focusable sub-node.

> It seems hoistFocus is serving two roles. One is an optimization so that 
> requestFocus knows whether it should walk the scene graph looking for a 
> focus-scope node. For that use the flag should be propagated through 
> descendants in the graph. But it’s also being proposed as a hoisting barrier 
> e.g. when it’s _not_ set it prevents focus from hoisting upward even if 
> there's a focus-scope node higher up in the graph. But a barrier applies just 
> to a single node and should not be propagated. So I’m having a difficult time 
> figuring out when and how this flag should be propagated through the tree. 
> But I’m no expert on skins so maybe I’m assuming this is more complicated 
> than it actually is.

`hoistFocus` is not an optimization, it's semantically relevant in the way I 
described.

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

PR Review Comment: https://git.openjdk.org/jfx/pull/1632#discussion_r2212398078

Reply via email to