<AWT Dev> [8] Review request for 7197619 Using modifiers for the dead key detection on Windows

Alexander Scherbatiy alexandr.scherbatiy at oracle.com
Wed Sep 19 06:42:39 PDT 2012


Could you review the updated fix:
   http://cr.openjdk.java.net/~alexsch/7197619/webrev.01/

- The WindowsKeyToJavaChar method returns a char as it was before the fix
- ToAsciiEx is changed to ToUnicodeEx as it is suggested in the comment.

  Thanks,
  Alexandr.


On 9/14/2012 9:11 PM, Oleg Pekhovskiy wrote:
> 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.
>>
>




More information about the awt-dev mailing list