The fix looks good to me.
Thanks,
Alexandr.
On 5/17/2016 12:23 PM, Semyon Sadetsky wrote:
Hello,
Please review fix for JDK9:
bug: https://bugs.openjdk.java.net/browse/JDK-8139189
webrev: http://cr.openjdk.java.net/~ssadetsky/8139189/webrev.00/
The Programmer Dvorak keyboard layout uses compose-like key that allow
type glyphed letters like diacritic or caron.
This functionality does not work in JDK since the
https://bugs.openjdk.java.net/browse/JDK-4053800 fix which changed key
to java character mapping procedure to use ToAscii() call wiche later
was replaced by ToUnicodeEx() call. Both ToAscii() and ToUnicodeEx()
unrecoverably change the window state related to the keyboard during
key converting, so all dedicated dead keys stop to work. That is the
root cause of the issue.
Since those converting calls are required obtain UTF character for the
JDK KEY_PRESSED event at the moment of WM_KEYDOWN before, it is
impossible to get the UTF character for the dead key combination
without breaking it, because the resulting symbol will only be ready
after the WM_CHAR event designating that combination is over.
As a work-around the proposed fix does not call ToUnicodeEx() after
dead key combination is started and uses the MapVirtualKey() call
return as the value to send with java's KEY_PRESSED/KEY_RELEASED events.
--Semyon