Alt key sticks even after app loses focus (JDK-8090647)
John Hendrikx
john.hendrikx at gmail.com
Sun Feb 12 22:28:09 UTC 2023
Well, it is not a permanent solution, just a way to test to see if it
actually solves your problem.
--John
On 12/02/2023 23:23, Pedro Duque Vieira wrote:
> .. all in all of course, I'd prefer a solution that properly fixes
> this bug and not have to rely on hacks that are prone to break in the
> future or code that needs to circumvent encapsulation or the module
> system. So either one is unlikely to be a fix I'm happy with.
>
> Thanks for considering submitting a PR to properly fix this issue!
>
> Kind regards,
>
>
>
> On Sun, Feb 12, 2023 at 10:15 PM Pedro Duque Vieira
> <pedro.duquevieira at gmail.com> wrote:
>
> John,
>
> Thank you very much for submitting a work around. Unfortunately,
> since there were other higher priority bugs and features and we're
> very close to a release, I wasn't allocated time to work on this
> much more than sending a message to this mailing list to warn
> of the existence of this bug.
> Not sure when I can get back to this. I'll submit your suggestion
> to the dev team and if someone is allocated time to do it, I'll
> get back here and let you know if it works.
>
> There's also this suggestion that I forgot to mention (I haven't
> been able to test it though):
> https://stackoverflow.com/questions/65765656/release-mnemonic-when-application-loses-focus
>
> Thanks again, kind regards,
>
>
> On Sun, Feb 12, 2023 at 10:06 PM John Hendrikx
> <john.hendrikx at gmail.com> wrote:
>
> I'm not sure if you are able to test this yourself, but I made
> a fix for this problem.
>
> You could potentially test it by copying the class
> `javafx.scene.Scene` in your project (without changing the
> package -- and if modules will allow it, I don't use them
> personally) and then using this piece of code:
>
> private void setWindowFocused(boolean value) {
> windowFocused = value;
>
> Node node = getFocusOwner();
> if (node != null) {
> node.setFocusQuietly(windowFocused,
> focusOwner.focusVisible);
> node.notifyFocusListeners();
> }
>
> if (windowFocused && accessible != null) {
> accessible.sendNotification(AccessibleAttribute.FOCUS_NODE);
> }
>
> if (!windowFocused) {
> getInternalEventDispatcher().getKeyboardShortcutsHandler().setMnemonicsDisplayEnabled(false);
> }
> }
>
> The last three lines are what I added. A quick test on Windows
> here shows that the mnemonics get disabled as soon as the
> window loses focus, and when returning, they're not responding
> as you'd expect.
>
> I'll submit a PR as well.
>
> --John
>
> On 12/02/2023 15:52, Pedro Duque Vieira wrote:
>>
>> The behavior on Windows is all over the place for different
>> applications.? I tested a few I've got running:
>>
>>
>> Notepad, Notepad++, Eclipse:
>>
>>
>> - Alt-down: Shows mnemonics on menu bar
>> - Alt-up: Highlights file menu on alt release
>> - Alt-tab: Shows mnemonics but doesn't highlight menu
>> when it loses
>> focus; when returning, mnemonics still highlighted, but
>> doesn't act on
>> them as menu not selected
>>
>>
>> -> Looks buggy
>>
>>
>> Thunderbird / Opera / Firefox:
>>
>>
>> - Alt-down: nothing
>> - Alt-up: shows menu bar (it is hidden normally)
>> - Alt-tab: works as expected, no highlighting
>>
>>
>> -> Looks well behaved
>>
>>
>> Explorer / Excel / Wordpad:
>>
>>
>> - Alt-down: nothing
>> - Alt-up: shows mnemonics
>> - Alt-tab: works as expected, no highlighting
>>
>>
>> -> Looks well behaved
>>
>>
>> Visual Studio Code:
>>
>>
>> - Alt-down: Shows mnemonics on menu bar
>> - Alt-up: Highlights file menu on alt release
>> - Alt-tab: Shows mnemonics, but hides them once it loses
>> focus; on
>> return doesn't show mnemonics
>>
>>
>> -> Looks well behaved
>>
>>
>> Chrome / IntelliJ:
>>
>>
>> -> Looks well behaved, doesn't react to alt presses in
>> any way
>>
>>
>> None of the applications tested reacted on a mnemonic key
>> after
>> regaining focus however, even though they may have them still
>> highlighted (which I think is a bug).
>>
>>
>> In my opinion, the behavior of notepad/notepad++/eclipse
>> is incorrect
>> (they need to hide the mnemonics on focus lost, like
>> Visual Studio Code
>> does, but they don't).
>>
>>
>> There seems to be two correct ways of handling mnemonics
>> in applications
>> that use them, either:
>>
>>
>> a) shows mnemonics immediately on alt-down, but hide them
>> on focus lost
>> (if the alt-down becomes an alt-tab, or probably any
>> other alt combination)
>>
>>
>> b) only show mnemonics on a naked alt-up
>>
>>
>> Ticket JDK-8090647 mentions a spec that has been updated,
>> but I can't
>> find it.? It also mentions that the behavior for JavaFX
>> should be what I
>> described in a), so I think this is a bug that can simply
>> be fixed.
>>
>>
>> --John
>>
>>
>>
>> Yap, there's quite different behaviors across apps. If you
>> test on windows 11 you'll get yet another set of different
>> behaviors.
>>
>> But all in all, if you: alt+tab (without release) and alt+tab
>> again so your app regains focus, you'll have the mnemonic
>> still activated, which, as you say, sounds like a bug no
>> matter the difference in behaviors across apps.
>>
>> I agree with your suggestion: "a".
>>
>> My client was quite disappointed and started to rant about
>> javafx. It didn't help that we were hit by a couple other
>> bugs (perhaps bad luck). The fact that the bug was filed on
>> 2013 (10 years later) and is still happening can be quite
>> problematic.
>> Perhaps it would make sense to review all bugs filed, giving
>> highest priority to the bugs that were submitted longer ago?
>>
>> Thanks!
>>
>> --
>> Pedro Duque Vieira - https://www.pixelduke.com
>
>
>
> --
> Pedro Duque Vieira - https://www.pixelduke.com
>
>
>
> --
> Pedro Duque Vieira - https://www.pixelduke.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20230212/c2d83796/attachment-0001.htm>
More information about the openjfx-dev
mailing list