On Fri, 4 Nov 2022 16:07:54 GMT, Dean Wookey <dwoo...@openjdk.org> wrote:
> When menu buttons are added and removed from the scene, an accelerator change > listener is added to each menu item in the menu. There is nothing stopping > the same change listener being added multiple times. > > MenuButtonSkinBase calls the > ControlAcceleratorSupport.addAcceleratorsIntoScene(getSkinnable().getItems(), > getSkinnable()); method each time the button is added to the scene, but that > method itself also registers a listener to call itself. Each time the button > is added to the scene, the method is called at least twice. > > When it's removed from the scene, the remove accelerator method is also > called twice, but only the first call removes a change listener attached to > the accelerator because the first call removes the entry from the hashmap > changeListenerMap. The second call finds nothing in the map, and doesn't > remove the additional instance. > > This pull request just removes the redundant code in the MenuButtonSkinBase. modules/javafx.controls/src/main/java/javafx/scene/control/skin/MenuButtonSkinBase.java line 154: > 152: sceneChangeListener = (scene, oldValue, newValue) -> { > 153: if (oldValue != null) { > 154: > ControlAcceleratorSupport.removeAcceleratorsFromScene(getSkinnable().getItems(), > oldValue); will it handle a case where the menu button gets attached to a different scene? could you add a second test for this scenario please? And i wonder if the problem is in ControlAcceleratorSupport rather than here. We do have a similar code in Control:380, do we have a problem there? ------------- PR: https://git.openjdk.org/jfx/pull/937