On Wed, 10 Jan 2024 19:55:35 GMT, Johan Vos <j...@openjdk.org> wrote:

>> modules/javafx.graphics/src/main/java/com/sun/javafx/tk/quantum/GlassSystemMenu.java
>>  line 98:
>> 
>>> 96:             active.set(false);
>>> 97:         }
>>> 98:         active = new SimpleBooleanProperty(true);
>> 
>> should this be
>> 
>> if(active == null) {
>>   active = new ...
>> } else {
>>  active.set(false);
>> }
>> 
>> instead?
>
> No, the explicit goal of this construction is to set active to false (in case 
> it exists) so that existing listeners can be released; followed by creating a 
> new active property that is by default set to true until `setMenus` is called 
> again (e.g. after unfocus/focus events).
> I noticed however that it is not as simple as that, and the current PR 
> introduces regression, as the `SystemMenuBarTest.testMemoryLeak` test is now 
> failing. Listeners are not only registered when `setMenus` is called, but 
> also when menu(Item)s are added to menus. I'm not sure if a single `active` 
> property can address this, as we don't want to remove all listeners for all 
> menuitems in case a particular menuitem is added to a particular menu.
> @hjohn does that make sense?

thank you for clarification!  

perhaps we ought to add a comment explaining why: it's one thing to create a 
single chain of conditions linked to a property, but here we keep creating new 
property instance, so the side effects are not that obvious.

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

PR Review Comment: https://git.openjdk.org/jfx/pull/1283#discussion_r1447910710

Reply via email to