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.

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

Commit messages:
 - Comment fixes
 - Consistency in naming conventions and comment cleanup.
 - Merge remote-tracking branch 'upstream/master' into linuxcharcombo
 - Expanded robot lookup table, general cleanup
 - Merge remote-tracking branch 'upstream/master' into linuxcharcombo
 - Resolving duplicates for Robot, fallback for getKeyCodeForChar
 - Merge remote-tracking branch 'upstream/master' into linuxcharcombo
 - KeyCharacterCombination fixes on Linux

Changes: https://git.openjdk.org/jfx/pull/1373/files
 Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1373&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8273743
  Stats: 228 lines in 4 files changed: 210 ins; 10 del; 8 mod
  Patch: https://git.openjdk.org/jfx/pull/1373.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1373/head:pull/1373

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

Reply via email to