Integrated: 8276056: Control.skin.setSkin(Skin) fails to call dispose() on discarded Skin
Marius Hanl
mhanl at openjdk.org
Fri Jul 8 15:03:42 UTC 2022
On Wed, 29 Jun 2022 13:35:15 GMT, Marius Hanl <mhanl at openjdk.org> wrote:
> For some reason the `skinProperty` did not allow to set a new skin which 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 some children and listener but is then rejected when setting it due to the `skinProperty` class constraint
> -> Control 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 MyCustomButtonSkin extends ButtonSkin {
> public MyCustomButtonSkin(Button button, boolean someFlag) { super(button); ... }
> }
>
> Now if we would change the skin of the Button two times like this:
>
> button.setSkin(new MyCustomButtonSkin(button, true));
> button.setSkin(new MyCustomButtonSkin(button, 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 pull request has now been integrated.
Changeset: 178d8987
Author: Marius Hanl <mhanl at openjdk.org>
Committer: Kevin Rushforth <kcr at openjdk.org>
URL: https://git.openjdk.org/jfx/commit/178d8987e3c9524bf47cffd23d72149af204ac79
Stats: 49 lines in 2 files changed: 34 ins; 13 del; 2 mod
8276056: Control.skin.setSkin(Skin) fails to call dispose() on discarded Skin
Co-authored-by: Jeanette Winzenburg <fastegal at openjdk.org>
Reviewed-by: aghaisas
-------------
PR: https://git.openjdk.org/jfx/pull/806
More information about the openjfx-dev
mailing list