On Tue, 20 Feb 2024 18:07:43 GMT, Martin Fox <m...@openjdk.org> wrote:
> On Linux getKeyCodeForChar does not consult the current keyboard layout. For > example, it assumes the “+” character is on KeyCode.PLUS even on layouts > which don’t generate KeyCode.PLUS. The result is that most > KeyCharacterCombinations don’t work. > > This PR fixes this using the same approach that Mac glass uses. When the user > types a key we lookup all the characters that key might generate and put them > in a map. getKeyCodeForChar then consults the map to find the Java key code. > This ensures that we only pay attention to keys that are on the user’s > physical keyboard. > > (Some Linux layout maps are expansive and include entries for keys that may > be on the user’s keyboard but probably aren’t, like “(“ and “)” on the > numeric keypad. If we simply ask for all entries that generate a given > character we can get multiple hits with no good way to determine which ones > are physically present.) > > This PR also contains fixes to the Robot to enable testing. When Glass > consults the GdkKeymap to determine which keys might generate a keyval GDK > returns a list covering every installed layout and shift level. The old Glass > code simply picked the first entry in the list. This PR iterates through the > list looking for one that works for the current layout and correct shift > level. This pull request has now been integrated. Changeset: c0757a2e Author: Martin Fox <m...@openjdk.org> URL: https://git.openjdk.org/jfx/commit/c0757a2ea5977c062b350335c09dd59671f88df5 Stats: 228 lines in 4 files changed: 210 ins; 10 del; 8 mod 8273743: KeyCharacterCombination for "+" does not work on US QWERTY keyboard layout Reviewed-by: angorya, kcr ------------- PR: https://git.openjdk.org/jfx/pull/1373