RFR: JDK-8284445: macOS 12 prints a warning when a function key shortcut is assigned to a menu

vlaaad duke at openjdk.org
Mon Oct 30 11:30:44 UTC 2023


On Sun, 22 Oct 2023 21:25:45 GMT, Martin Fox <duke at openjdk.org> wrote:

>> This PR addresses [JDK-8284445](https://bugs.openjdk.org/browse/JDK-8284445).
>> 
>> Context: the warning might be more important than it seems. Our JavaFX-based desktop app has [an issue](https://github.com/defold/defold/issues/7845) — when the user opens 2 instances of the app, one of the instances hangs after a while. While debugging the issue, I found that it's somehow related to the system menu bar — not refreshing it fixes the issue. Further investigations revealed that the app hangs only if we show menus that use F1-F24 shortcuts. This reminded me of the warnings we get about `NSEventModifierFlagFunction specified to -setKeyEquivalentModifierMask` for such shortcuts. I experimented with removing the modifier for these shortcuts, and it helped with our issue!
>
> With this change the Quit menu item shows up as Cmd+F2.
> 
> To fix the bug we just need to stop setting the NSFunctionKeyMask in the equivalent's modifier mask. The rest of the code removed in this PR needs to be restored.
> 
> When the core code is converting from Java internals to the data structure passed to Glass it only has one field to specify the shortcut. Normally this is a character but for keys like F2 it passes down a Java KeyCode. To signal the difference it sets the MODIFIER_FUNCTION flag. Otherwise it can't distinguish KeyCode F2 from character Q.
> 
> The naming of this flag is confusing since it's not a modifier but a bit used solely for this purpose. And I don't know why this flag is set only for the function keys, it should be set whenever the core code is passing down a KeyCode rather than a character. This is probably part of what's going wrong in [JDK-8088445](https://bugs.openjdk.org/browse/JDK-8088445).

Thanks for reviewing the changes @beldenfox, I applied your suggestions (if I understood them correctly). Using the new changeset, I see the <kbd>Cmd+Q</kbd> shortcut displayed as <kbd>Cmd+Q</kbd>.

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

PR Comment: https://git.openjdk.org/jfx/pull/1252#issuecomment-1784990142


More information about the openjfx-dev mailing list