<AWT Dev> [8] Review request for 7197619 Using modifiers for the dead key detection on Windows
Leonid Romanov
leonid.romanov at oracle.com
Mon Sep 24 23:46:55 PDT 2012
3176 if(isDeadKey){
Please, add space here. Otherwise looks OK, although I'm not an expert in
this area.
> -----Original Message-----
> From: awt-dev-bounces at openjdk.java.net [mailto:awt-dev-
> bounces at openjdk.java.net] On Behalf Of Alexander Scherbatiy
> Sent: Thursday, September 20, 2012 6:48 PM
> To: Oleg Pekhovskiy; awt-dev at openjdk.java.net; Alexey Utkin
> Subject: Re: <AWT Dev> [8] Review request for 7197619 Using modifiers for
> the dead key detection on Windows
>
>
> Could you review the updated fix:
> http://cr.openjdk.java.net/~alexsch/7197619/webrev.02/
>
> - cast to BOOL type is fixed for the isDeadKey
> - isDeadKey parameter is passed by reference in the WindowsKeyToJavaChar
> method
>
> Thanks,
> Alexandr.
>
> On 9/19/2012 8:16 PM, Oleg Pekhovskiy wrote:
> > Hi Alexander,
> >
> > let me advice you further changes:
> >
> > 3397 UINT AwtComponent::WindowsKeyToJavaChar(UINT wkey, UINT
> > modifiers, TransOps ops, BOOL *isDeadKey)
> > 3398 {
> > 3399 static Hashtable transTable("VKEY translations");
> > 3400 static Hashtable deadKeyFlagTable("Dead Key Flags");
> > 3401 *isDeadKey = FALSE;
> > 3402
> > 3403 // Try to translate using last saved translation
> > 3404 if (ops == LOAD) {
> > 3405 void* deadKeyFlag =
> >
> deadKeyFlagTable.remove(reinterpret_cast<void*>(static_cast<INT_PTR>(wke
> y)));
> > 3406 void* value =
> > transTable.remove(reinterpret_cast<void*>(static_cast<INT_PTR>(wkey)));
> > 3407 if (value != NULL) {
> > 3408 *isDeadKey =
> > static_cast<UINT>(reinterpret_cast<BOOL>(deadKeyFlag));
> > 3409 return
> > static_cast<UINT>(reinterpret_cast<INT_PTR>(value));
> > 3410 }
> > 3411 }
> >
> > 1. Casting at row 3408 should be corrected to:
> >
> > static_cast<BOOL>(reinterpret_cast<INT_PTR>(deadKeyFlag))
> >
> >
> > 2. Seems like it makes sense to use a reference instead of a pointer
for:
> >
> > BOOL *isDeadKey
> >
> > as this is a required parameter.
> >
> > Thanks,
> > Oleg
> >
> > 9/19/2012 5:42 PM, Alexander Scherbatiy wrote:
> >>
> >> 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