RFR: 8089373: Translation from character to key code is not sufficient

Andy Goryachev angorya at openjdk.org
Thu Feb 8 19:31:03 UTC 2024


On Fri, 17 Nov 2023 20:05:09 GMT, Martin Fox <mfox at openjdk.org> wrote:

> On Windows a common shortcut like Ctrl+'+' could only be invoked from the main keyboard and not the numeric keypad. Toolkit.getKeyCodeForChar did not have enough context to know whether it should return a result from the main keyboard or the keypad.
> 
> This PR alters getKeyCodeForChar to pass in the code of the key the system is trying to match against. Only the Windows platform actually uses this additional information.
> 
> On the Mac the numeric keypad has always worked due to the odd way getKeyCodeForChar is implemented (until PR #1209 the keypad worked more reliably than the main keyboard). On Linux getKeyCodeForChar is a mess; neither the main keyboard or the numeric keypad work reliably. I have an upcoming PR which should make both work correctly.

sorry this PR was out waiting for too long.  could you sync it up with the latest master please?

modules/javafx.graphics/src/main/java/com/sun/glass/events/KeyEvent.java line 255:

> 253:      * character with respect to the currently active keyboard layout or
> 254:      * VK_UNDEFINED if the character isn't present in the current layout.
> 255:      * The hint is the KeyCode of the key the system is attempting to match.

is this clear enough or should we say that it's KeyCode.getCode()?

(also Application:746)

modules/javafx.graphics/src/main/java/com/sun/glass/events/KeyEvent.java line 257:

> 255:      * The hint is the KeyCode of the key the system is attempting to match.
> 256:      * It can be used to optimize the search or to distinguish between the
> 257:      * main keyboard and the numeric keypad.

should we mention that it is supposed to be `KeyEvent.VK_UNDEFINED` when not available?

tests/system/src/test/java/test/robot/com/sun/glass/ui/monocle/MonocleApplicationTest.java line 143:

> 141:                 char ch = (char) TEST_CASES[i][0];
> 142:                 int expectedCode = TEST_CASES[i][1];
> 143:                 int code = MonocleApplicationShim._getKeyCodeForChar(ch, KeyEvent.VK_UNDEFINED);

Do you want to add a new test(s) for the cases when the hint is important?

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

PR Review: https://git.openjdk.org/jfx/pull/1289#pullrequestreview-1871084872
PR Review Comment: https://git.openjdk.org/jfx/pull/1289#discussion_r1483488977
PR Review Comment: https://git.openjdk.org/jfx/pull/1289#discussion_r1483493173
PR Review Comment: https://git.openjdk.org/jfx/pull/1289#discussion_r1483495224


More information about the openjfx-dev mailing list