This PR fixes https://bugs.openjdk.org/browse/JDK-8263959, an issue on macOS 
that happens when a menu is disabled, and then enabled back again, where leaf 
menuItems remain disabled unexpectedly, by re-syncing the native NSMenuItem 
enabled state from Java menuItem enabled state. 

Explanation: We create the native NSMenuItems with `autoenablesItems:YES`, 
which means the OS calls `GlassMenu::validateMenuItem:` on each item's target 
to determine if it should be enabled. This calls the Java 
`GlassSystemMenu::validate` callback, which updates the accelerator bindings, 
but it doesn't update the enabled state:  It remains as it was (in this case, 
disabled when the parent menu was disabled) as `[glassTargetItem->item 
isEnabled]` returns the old state (NO/disabled) rather than the updated Java 
state (`!menuitem.isDisable()`/enabled).

One possible and valid fix would be changing `autoenablesItems:YES` to 
`autoenablesItems:NO`, as the Java layer already manages the enable state via 
`GlassMenu::_setEnabled` (making `validateMenuItem:` redundant for this case).

However, the proposed fix doesn't change that, and simply syncs the native side 
with the Java side while validation is being performed.

A system test has been included, if fails before this patch, passes after it.

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

Commit messages:
 - re-sync native NSMenuItem enabled state from Java menuItem enabled state, 
include test

Changes: https://git.openjdk.org/jfx/pull/2103/files
  Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=2103&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8263959
  Stats: 190 lines in 2 files changed: 187 ins; 1 del; 2 mod
  Patch: https://git.openjdk.org/jfx/pull/2103.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/2103/head:pull/2103

PR: https://git.openjdk.org/jfx/pull/2103

Reply via email to