Hi Alexander,

here are my comments:
1. Why did you decide to make WindowsKeyToJavaChar void? Maybe it takes sense to leave signature closer to its original look? 2. Seems like WindowsKeyToJavaChar method could be simplifed (ToAsciiEx -> ToUnicodeEx, remove MultiByteToWideChar),
like this:

3504     WORD wChar[2];
3505     UINT scancode = ::MapVirtualKey(wkey, 0);
3506     int converted = ::ToUnicodeEx(wkey, scancode, keyboardState,
3507&wChar, 2, 0, GetKeyboardLayout());
3508
3509     UINT translation;
3510     BOOL deadKeyFlag = (converted == 2);
3511
3512     // Dead Key
3513     if (converted<  0) {
3514         translation = java_awt_event_KeyEvent_CHAR_UNDEFINED;
3515     } else
3516     // No translation available -- try known conversions or else punt.
3517     if (converted == 0) {
3518         if (wkey == VK_DELETE) {
3519             translation = '\177';
3520         } else
3521         if (wkey>= VK_NUMPAD0&&  wkey<= VK_NUMPAD9) {
3522             translation = '0' + wkey - VK_NUMPAD0;
3523         } else {
3524             translation = java_awt_event_KeyEvent_CHAR_UNDEFINED;
3525         }
3526     } else
3527     // the caller expects a Unicode character.
3528     if (converted>  0) {
3533         translation = wChar[0];
3534     }


Thanks,
Oleg


9/11/2012 5:24 PM, Alexander Scherbatiy wrote:

bug: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7197619
webrev: http://cr.openjdk.java.net/~alexsch/7197619/webrev.00/

Only a virtual key code is used for the dead key detection on Windows in the current implementation. This does not take into account that dead keys can be pressed with modifiers like ctrl+alt+2 (caron dead key) on Hungarian keyboard.

The fix gets isDeadKey flag and a character from the ToAsciiEx method and uses them for the windows dead key to java key translation.

Thanks,
Alexandr.


Reply via email to