RFR: JDK-8323615: PopupControl.skin.setSkin(Skin) fails to call dispose() on discarded Skin
Ambarish Rapte
arapte at openjdk.org
Thu Feb 1 12:12:11 UTC 2024
On Thu, 11 Jan 2024 20:13:09 GMT, Marius Hanl <mhanl at openjdk.org> wrote:
> For some reason the `skinProperty` did not allow to set a new skin when it is the same class as the previous one.
> This leads to multiple issues:
> 1. When creating a new skin (same class as previous), the skin will likely install listener but is then rejected when setting it due to the `skinProperty` class constraint
> -> `PopupControl` is in a weird state as the current skin was not disposed since it is still set, although we already created and 'set' a new skin
> 2. A skin of the same class can behave differently, so it is not really valid to reject a skin just because it is the same class as the previous
> -> Just imagine we have the following skin class
>
> class MyCustomSkin<C extends PopupControl> extends Skin<C> {
> public MyCustomSkin(C skinnable, boolean someFlag) { ... }
> }
>
> Now if we would change the skin of the `PopupControl` two times like this:
>
> popup.setSkin(new MyCustomSkin(popup, true));
> popup.setSkin(new MyCustomSkin(popup, false));
>
> The second time the skin will be rejected as it is the same class, although I may changed the skin behaviour, in this case demonstrated by a boolean flag for showing purposes.
>
> This is the same issue and fix as done for `Control` in [JDK-8276056](https://bugs.openjdk.org/browse/JDK-8276056) (PR: https://github.com/openjdk/jfx/pull/806)
@Maran23
This is ready for integration. If you were waiting for me. Thanks, It looks good, I don't have any comments.
-------------
PR Comment: https://git.openjdk.org/jfx/pull/1331#issuecomment-1921183306
More information about the openjfx-dev
mailing list