See ChangeLog entry 2000-06-12 20:25 UTC-0400 David G. Holm <dholm@jsd-llc.com>

This commit is contained in:
David G. Holm
2000-06-13 00:28:38 +00:00
parent 34e36a29ef
commit 5511c0fe38
2 changed files with 38 additions and 24 deletions

View File

@@ -1,3 +1,8 @@
2000-06-12 20:25 UTC-0400 David G. Holm <dholm@jsd-llc.com>
* source/rtl/gtwin/gtwin.c
! Partial fix for international keyboard AltGr handling.
20000612-23:10 GMT+2 Maurilio Longo <maurilio.longo@libero.it>
* source/rtl/tedior.prg

View File

@@ -314,6 +314,9 @@ int hb_gt_ReadKey( HB_inkey_enum eventmask )
/* Save the keyboard state and ASCII key code */
DWORD dwState = s_irInBuf[ s_cNumIndex ].Event.KeyEvent.dwControlKeyState;
ch = s_irInBuf[ s_cNumIndex ].Event.KeyEvent.uChar.AsciiChar;
printf( "\n\nhb_gt_ReadKey: The keyboard state is 0x%04X, the character code is %d", dwState, ch );
printf( ", the virtual key code is %d", s_irInBuf[ s_cNumIndex ].Event.KeyEvent.wVirtualKeyCode );
printf( ", the virtual scan code is %d", s_irInBuf[ s_cNumIndex ].Event.KeyEvent.wVirtualScanCode );
if( ch == 224 )
{
/* Strip extended key lead-in codes */
@@ -327,17 +330,18 @@ int hb_gt_ReadKey( HB_inkey_enum eventmask )
else if( ch == 0 || ( dwState & ( ENHANCED_KEY | LEFT_ALT_PRESSED | LEFT_CTRL_PRESSED | RIGHT_ALT_PRESSED | RIGHT_CTRL_PRESSED | SHIFT_PRESSED ) ) )
{
/* Process non-ASCII key codes */
WORD wKey;
if( eventmask & INKEY_RAW )
wKey = s_irInBuf[ s_cNumIndex ].Event.KeyEvent.wVirtualKeyCode;
else
wKey = s_irInBuf[ s_cNumIndex ].Event.KeyEvent.wVirtualScanCode;
WORD wChar = s_irInBuf[ s_cNumIndex ].Event.KeyEvent.wVirtualKeyCode;
WORD wKey = s_irInBuf[ s_cNumIndex ].Event.KeyEvent.wVirtualScanCode;
if( eventmask & INKEY_RAW ) wKey = wChar;
/* Discard standalone state key presses for normal mode only */
if( ( eventmask & INKEY_RAW ) == 0 ) switch( wKey )
{
/* Virtual scan codes to ignore */
case 29: /* Ctrl */
case 40: /* Circle Accent */
case 41: /* Tick Accent */
case 42: /* Left Shift */
case 43: /* Reverse Tick Accent */
case 54: /* Right Shift */
case 56: /* Alt */
case 58: /* Caps Lock */
@@ -374,21 +378,25 @@ int hb_gt_ReadKey( HB_inkey_enum eventmask )
if( bAlt )
{
/* Alt key held */
if( wKey == 1 ) ch = K_ALT_ESC; /* Esc */
else if( wKey == 15 ) ch = K_ALT_TAB; /* Tab */
else if( wKey <= 12 ) ch = wKey + 374; /* Numeric row */
else if( wKey == 28 ) ch = KP_ALT_ENTER; /* Num Pad Enter */
else if( wKey <= 52 ) ch = wKey + 256; /* Alpha rows */
else if( wKey == 53 && bEnhanced ) ch = KP_ALT_SLASH; /* Num Pad / */
else if( wKey == 55 ) ch = KP_ALT_ASTERISK; /* Num Pad * */
else if( wKey <= 58 ) ch = wKey + 367; /* ? */
else if( wKey <= 68 ) ch = 29 - wKey; /* F1 - F10 */
else if( wKey == 74 ) ch = KP_ALT_MINUS; /* Num Pad - */
else if( wKey == 76 ) ch = KP_ALT_5; /* Num Pad 5 */
else if( wKey == 78 ) ch = KP_ALT_PLUS; /* Num Pad + */
else if( wKey <= 86 ) ch = wKey + 336; /* Cursor */
else if( wKey <= 88 ) ch = 41 - wKey; /* F11, F12 */
else ch = wKey + 384;
if( ch == 0 || ch == wChar || tolower( ch ) == tolower( wChar ) )
{
/* Only translate if not AltGr */
if( wKey == 1 ) ch = K_ALT_ESC; /* Esc */
else if( wKey == 15 ) ch = K_ALT_TAB; /* Tab */
else if( wKey <= 12 ) ch = wKey + 374; /* Numeric row */
else if( wKey == 28 ) ch = KP_ALT_ENTER; /* Num Pad Enter */
else if( wKey <= 52 ) ch = wKey + 256; /* Alpha rows */
else if( wKey == 53 && bEnhanced ) ch = KP_ALT_SLASH; /* Num Pad / */
else if( wKey == 55 ) ch = KP_ALT_ASTERISK; /* Num Pad * */
else if( wKey <= 58 ) ch = wKey + 367; /* ? */
else if( wKey <= 68 ) ch = 29 - wKey; /* F1 - F10 */
else if( wKey == 74 ) ch = KP_ALT_MINUS; /* Num Pad - */
else if( wKey == 76 ) ch = KP_ALT_5; /* Num Pad 5 */
else if( wKey == 78 ) ch = KP_ALT_PLUS; /* Num Pad + */
else if( wKey <= 86 ) ch = wKey + 336; /* Cursor */
else if( wKey <= 88 ) ch = 41 - wKey; /* F11, F12 */
else ch = wKey + 384;
}
}
else if( bCtrl )
{
@@ -533,10 +541,10 @@ int hb_gt_ReadKey( HB_inkey_enum eventmask )
case 75: /* Left */
ch = K_LEFT;
break;
default: /* Any thing not explicitly translated */
default:
/* Only provide a translation for those key
codes that don't have a character code. */
if( ch == 0 )
/* Only provide a translation for those key
codes that don't have a default one. */
ch = wKey + 128;
}
}
@@ -591,7 +599,7 @@ int hb_gt_ReadKey( HB_inkey_enum eventmask )
ch = 332;
break;
default:
ch = wKey + 128;
ch = wKey;
}
}
}
@@ -655,6 +663,7 @@ int hb_gt_ReadKey( HB_inkey_enum eventmask )
s_cNumIndex++;
}
if( ch ) printf( ", and the return code is %d", ch );
return ch;
}