On Thu, 20 Nov 2025 12:55:09 GMT, Jurgen <[email protected]> wrote:

>> What I mean is:
>> Everything is part of the `RichTextArea`. Requesting a layout from a node 
>> inside should request a layout for each parent, also `RichTextArea`. So you 
>> should normally know that on the `RichTextArea` level, which also manages 
>> the `VFlow`. So it can do the corresponding actions, just by the node 
>> requesting the layout.
>> 
>> If we take a look at other more complex Controls, they do the following:
>> - `VirtualFlow.requestCellLayout` -> sets a flag
>> - `layout` is requested, and due to the flag, we know what to do
>> 
>> Maybe something that could be done here as well? Could also be done by 
>> `Properties` perhaps.
>> 
>>> A specific member can be a child of a certain Parent, direct or otherwise, 
>>> by design, and this method allows to get to that parent easily.
>>> ...
>>> Also, keep in mind this is not public API, it's a utility.
>> 
>> Yes, we can always get the parent hierarchy. But that does not mean we 
>> should. 
>> Making assumptions about the hierarchy will make subclasses and 
>> customizations (e.g. in the Skin) worse. If we extend `RichTextArea` and use 
>> another Node then `VFlow`, then we can expect `TextCell`s not to work 
>> anymore?
>> 
>> In JavaFX, as you can also see in the codebase and other controls, 
>> retrieving an ancestor somewhere in the scene graph is pretty much never 
>> done or needed. 
>> I did not have a look on this particular issue, but what I want to suggest 
>> is to take another look at the problem and how to solve it. So we don't need 
>> to rely on finding a specific node that might be somewhere in the scene 
>> graph.
>
> If I remember correctly from what I've traced, is that _requestLayout_ from 
> the embedded node is propagating upwards until it reaches `TextCell` which 
> extends a `BorderPane`. At this point _requestLayout_ in `Parent` invokes 
> _markDirtyLayout_ with the **forceParentLayout** parameter/flag being 
> **false** and the propagation stops.

I know why. Because the `TextCell` is not managed. 
https://github.com/openjdk/jfx/blob/f87448ec156608527d77a4204e98e08052ffecd1/modules/jfx.incubator.richtext/src/main/java/com/sun/jfx/incubator/scene/control/richtext/TextCell.java#L70

Therefore, this will be set:
https://github.com/openjdk/jfx/blob/f87448ec156608527d77a4204e98e08052ffecd1/modules/javafx.graphics/src/main/java/javafx/scene/Parent.java#L1331-L1334

Indeed, the `TextCell` will be handled as layout root, therefore not 
propagating any layout request further up.
So the real problem is, that the `TextCell` is not managed.

Otherwise the layout would be propagated to the `RichTextArea`, which can do 
the corresponding actions. So I would suggest looking into that.

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

PR Review Comment: https://git.openjdk.org/jfx/pull/1975#discussion_r2546046293

Reply via email to