On Sun, 9 Feb 2025 18:23:47 GMT, Michael Strauß <mstra...@openjdk.org> wrote:
>>> @hjohn I think what's missing in your model is the option to have an >>> independently focusable node inside of a control. For example, think of a >>> Button placed within a Button (via its `graphic` property). Clicking the >>> nested button should not transfer the focus to its parent button. Whether a >>> focus request should be hoisted is a choice that depends on the specifics >>> of the control, and we probably need an API for that. >> >> Okay, agreed, so it would be good to have Nodes control whether or not the >> focus traverses up. >> >> I could imagine the flag could also in the future perhaps allow the Root >> Node or Scene to determine whether the Window should receive focus (perhaps >> special cases like popups or transparent overlays would allow interaction >> without hoisting focus to the Window?) >> >> Then what about the focus delegate? This is not a full FX property in this >> API, but seems very similar to `focusOwner` in Scene, in that it determines >> to which `Node` (keyboard) events are directed. One could say that, since >> Window/Scene are also focusable, Scene is **delegating** events/focus to a >> node. Would it be reasonable to have `focusDelegate` be a read-only >> property like in `Scene`, and perhaps rename it to focus owner (or if that's >> too drastic, ensure that `Scene` at some later stage --might-- implement the >> same interface and then duplicating its focus owner property as focus >> delegate)? >> >> This can be achieved later, just interested in hearing your thoughts: >> - A getter can later become a property >> - A getter can later become part of an interface >> - Scene can later implement an interface, even if it means duplicating the >> functionality of a property (if not named the same already) >> >> I see some overlap, and having Nodes/Scene/Window implement a common >> interface (like `EventTarget`) is not unheard of. >> >> Again, I love this proposal, and would like to move it forward. > >> > @hjohn I think what's missing in your model is the option to have an >> > independently focusable node inside of a control. For example, think of a >> > Button placed within a Button (via its `graphic` property). Clicking the >> > nested button should not transfer the focus to its parent button. Whether >> > a focus request should be hoisted is a choice that depends on the >> > specifics of the control, and we probably need an API for that. >> >> Okay, agreed, so it would be good to have Nodes control whether or not the >> focus traverses up. >> >> I could imagine the flag could also in the future perhaps allow the Root >> Node or Scene to determine whether the Window should receive focus (perhaps >> special cases like popups or transparent overlays would allow interaction >> without hoisting focus to the Window?) > > Do you mean window focus in a JavaFX sense, or in a window manager sense? For > example, in Windows you can make a window non-activatable, which means it > won't steal the focus from other windows when interacted with (for example, > an on-screen keyboard window). > > >> Then what about the focus delegate? This is not a full FX property in this >> API, but seems very similar to `focusOwner` in Scene, in that it determines >> to which `Node` (keyboard) events are directed. One could say that, since >> Window/Scene are also focusable, Scene is **delegating** events/focus to a >> node. Would it be reasonable to have `focusDelegate` be a read-only property >> like in `Scene`, and perhaps rename it to focus owner (or if that's too >> drastic, ensure that `Scene` at some later stage --might-- implement the >> same interface and then duplicating its focus owner property as focus >> delegate)? > > It works quite well to say that a `Scene` delegates focus to a `Node`. It > doesn't seem to work quite as well (linguistically) to say that a `TextField` > is the focus owner of a `ComboBox` (the `ComboBox` is also focused, why would > the `TextField` be its focus owner?). But linguistics aside, the question is > whether `focusOwner`/`focusDelegate` should be a read-only property. > > That's a very good question. It would allow observers to know when the focus > delegate changes. But can the focus delegate change? It can probably go from > non-null to null, and vice versa. Let's consider a hypothetical control that > is like a combo box, but it contains two separate text fields. It seems > reasonable that the focus delegate can probably change between the two text > fields. > > But the proposed API doesn't seem to easily support this scenario. When I > cl... @mstr2 do you think it is worth pursuing this further? ------------- PR Comment: https://git.openjdk.org/jfx/pull/1632#issuecomment-2815089505