> This PR adds code to ensure that KeyCodeCombinations match KeyEvents as 
> expected by more accurately mapping from a Mac key code to a Java key code 
> based on the user’s active keyboard layout (the existing code assumes a US 
> QWERTY layout). The new code first identifies a set of Mac keys which can 
> produce different characters based on the user’s keyboard layout. A Mac key 
> code outside that area is processed exactly as before. For a key inside the 
> layout-sensitive area the code calls UCKeyTranslate to translate the key to 
> an unshifted ASCII character based on the active keyboard and uses that to 
> determine the Java key code.
> 
> When performing the reverse mapping for the Robot the code first uses the old 
> QWERTY mapping to find a candidate key. If it lies in the layout-sensitive 
> area the code then scans the entire area calling UCKeyTranslate until it 
> finds a match. If the key lies outside the layout-sensitive area it’s 
> processed exactly as before.
> 
> There are multiple duplicates of these bugs logged against Mac applications 
> built with JavaFX.
> 
> https://bugs.openjdk.java.net/browse/JDK-8090257 Mac: Inconsistent KeyEvents 
> with alternative keyboard layouts
> https://bugs.openjdk.java.net/browse/JDK-8088120 [Accelerator, Mac] CMD + Z 
> accelerator is not working with French keyboard
> https://bugs.openjdk.java.net/browse/JDK-8087915 Mac: accelerator doesn't 
> take into account azerty keyboard layout
> https://bugs.openjdk.java.net/browse/JDK-8150709 Mac OSX and German Keyboard 
> Layout (Y/Z)

Martin Fox has updated the pull request with a new target base due to a merge 
or a rebase. The incremental webrev excludes the unrelated changes brought in 
by the merge/rebase. The pull request contains five additional commits since 
the last revision:

 - Merge branch 'master' into macshortcut
 - Fixed whitespace error.
 - A small number of keyboard layouts require the Option key to reach
   critical letters like 'Q'. Added a third probe (after Command and
   Shift+Command) to look for letters that require Option. The
   keyboards in question are Azeri, Turkmen, and the Sami layouts.
 - The code now queries both the shifted and unshifted characters for a key
   favoring digits and letters over everything else. This ensures we catch
   the digits on the French layout without interfering with Dvorak.
 - Mac - generate KeyCodes that match user's active keyboard layout.

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

Changes:
  - all: https://git.openjdk.java.net/jfx/pull/425/files
  - new: https://git.openjdk.java.net/jfx/pull/425/files/fb449d93..1037be20

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jfx&pr=425&range=04
 - incr: https://webrevs.openjdk.java.net/?repo=jfx&pr=425&range=03-04

  Stats: 463524 lines in 8239 files changed: 260160 ins; 130671 del; 72693 mod
  Patch: https://git.openjdk.java.net/jfx/pull/425.diff
  Fetch: git fetch https://git.openjdk.java.net/jfx pull/425/head:pull/425

PR: https://git.openjdk.java.net/jfx/pull/425

Reply via email to