2013-06-05 10:37 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)

* src/rtl/gtwvt/gtwvt.c
    ! added workaround for AltGR and German keyboard

  * src/rtl/inkeyapi.c
    ! added missing 'static' in function declaration

  * src/rtl/hbgtcore.c
    ! added workarounds for HB_GTI_COMPAT_BUFFER switched to .F. by
      default.

  * tests/gtkeys.prg
    * switched to UTF8 CP by default
    + extended keycode information in Harbour
This commit is contained in:
Przemysław Czerpak
2013-06-05 10:37:34 +02:00
parent c44379e66e
commit 09298f8f31
5 changed files with 58 additions and 11 deletions

View File

@@ -10,6 +10,21 @@
* Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment
*/
2013-06-05 10:37 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
* src/rtl/gtwvt/gtwvt.c
! added workaround for AltGR and German keyboard
* src/rtl/inkeyapi.c
! added missing 'static' in function declaration
* src/rtl/hbgtcore.c
! added workarounds for HB_GTI_COMPAT_BUFFER switched to .F. by
default.
* tests/gtkeys.prg
* switched to UTF8 CP by default
+ extended keycode information in Harbour
2013-06-04 20:25 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
* src/pp/hbpp.c
! fixed memory leak due to unnecessary hb_strdup()

View File

@@ -2589,6 +2589,9 @@ static HB_BOOL hb_gt_wvt_KeyEvent( PHB_GTWVT pWVT, UINT message, WPARAM wParam,
break;
case WM_CHAR:
if( ( iFlags & HB_KF_CTRL ) != 0 && ( iFlags & HB_KF_ALT ) != 0 )
/* workaround for AltGR and German keyboard */
iFlags &= ~( HB_KF_CTRL | HB_KF_ALT );
case WM_SYSCHAR:
if( ! pWVT->IgnoreWM_SYSCHAR )
{

View File

@@ -1354,7 +1354,7 @@ static void hb_gt_def_DrawShadow( PHB_GT pGT, int iTop, int iLeft, int iBottom,
static void hb_gt_def_Scroll( PHB_GT pGT, int iTop, int iLeft, int iBottom, int iRight,
int iColor, HB_USHORT usChar, int iRows, int iCols )
{
int iColOld, iColNew, iColSize, iColClear, iClrs, iLength;
int iColOld, iColNew, iColSize, iColClear, iClrs, iLength, iFlag = 0;
iColSize = iRight - iLeft;
iLength = iColSize + 1;
@@ -1383,7 +1383,10 @@ static void hb_gt_def_Scroll( PHB_GT pGT, int iTop, int iLeft, int iBottom, int
HB_SIZE nSize = HB_GTSELF_RECTSIZE( pGT, iTop, iColOld, iTop, iColOld + iColSize );
if( nSize )
{
pBuffer = hb_xgrab( nSize );
iFlag = HB_GTSELF_SETFLAG( pGT, HB_GTI_COMPATBUFFER, 0 );
}
}
while( iTop <= iBottom )
@@ -1409,6 +1412,8 @@ static void hb_gt_def_Scroll( PHB_GT pGT, int iTop, int iLeft, int iBottom, int
if( pBuffer )
hb_xfree( pBuffer );
if( iFlag != 0 )
HB_GTSELF_SETFLAG( pGT, HB_GTI_COMPATBUFFER, iFlag );
}
}
@@ -1873,7 +1878,9 @@ static HB_BOOL hb_gt_def_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
if( nSize )
{
void * pBuffer = hb_xgrab( nSize + 1 );
int iFlag = HB_GTSELF_SETFLAG( pGT, HB_GTI_COMPATBUFFER, 0 );
HB_GTSELF_SAVE( pGT, 0, 0, iRow, iCol, pBuffer );
HB_GTSELF_SETFLAG( pGT, HB_GTI_COMPATBUFFER, iFlag );
hb_arraySetCLPtr( pInfo->pResult, 7, ( char * ) pBuffer, nSize );
}
break;
@@ -1885,9 +1892,11 @@ static HB_BOOL hb_gt_def_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
HB_GTSELF_DISPBEGIN( pGT );
if( hb_arrayGetCLen( pInfo->pNewVal, 7 ) > 0 )
{
int iFlag = HB_GTSELF_SETFLAG( pGT, HB_GTI_COMPATBUFFER, 0 );
HB_GTSELF_REST( pGT, 0, 0, hb_arrayGetNI( pInfo->pNewVal, 5 ),
hb_arrayGetNI( pInfo->pNewVal, 6 ),
hb_arrayGetCPtr( pInfo->pNewVal, 7 ) );
HB_GTSELF_SETFLAG( pGT, HB_GTI_COMPATBUFFER, iFlag );
}
HB_GTSELF_SETPOS( pGT, hb_arrayGetNI( pInfo->pNewVal, 1 ),
hb_arrayGetNI( pInfo->pNewVal, 2 ) );
@@ -2014,6 +2023,7 @@ static int hb_gt_def_Alert( PHB_GT pGT, PHB_ITEM pMessage, PHB_ITEM pOptions,
HB_UINT ulLines = 0, ulWidth = 0, ulCurrWidth = 0, ulMsg = 0, ulDst = 0,
ulLast = 0, ulSpace1 = 0, ulSpace2 = 0, ulDefWidth, ulMaxWidth;
HB_WCHAR * szMsgDsp;
int iFlag = 0;
ulMaxWidth = iCols - 4;
ulDefWidth = ( ulMaxWidth * 3 ) >> 2;
@@ -2131,6 +2141,7 @@ static int hb_gt_def_Alert( PHB_GT pGT, PHB_ITEM pMessage, PHB_ITEM pOptions,
if( nLen )
{
pBuffer = hb_xgrab( nLen );
iFlag = HB_GTSELF_SETFLAG( pGT, HB_GTI_COMPATBUFFER, 0 );
HB_GTSELF_SAVE( pGT, iTop, iLeft, iBottom, iRight, pBuffer );
}
HB_GTSELF_BOXS( pGT, iTop, iLeft, iBottom, iRight, NULL, iClrNorm );
@@ -2246,6 +2257,8 @@ static int hb_gt_def_Alert( PHB_GT pGT, PHB_ITEM pMessage, PHB_ITEM pOptions,
if( pBuffer )
{
HB_GTSELF_REST( pGT, iTop, iLeft, iBottom, iRight, pBuffer );
if( iFlag != 0 )
HB_GTSELF_SETFLAG( pGT, HB_GTI_COMPATBUFFER, iFlag );
hb_xfree( pBuffer );
}
HB_GTSELF_SETPOS( pGT, iRow, iCol );
@@ -2359,12 +2372,13 @@ static HB_BOOL hb_gt_def_Resize( PHB_GT pGT, int iRows, int iCols )
void * pBuffer = NULL;
HB_SIZE nLen = ( HB_SIZE ) iRows * iCols, nIndex;
HB_SIZE nSize;
int i;
int iFlag = 0, i;
nSize = HB_GTSELF_RECTSIZE( pGT, 0, 0, iRows - 1, iCols - 1 );
if( nSize )
{
pBuffer = hb_xgrab( nSize );
iFlag = HB_GTSELF_SETFLAG( pGT, HB_GTI_COMPATBUFFER, 0 );
HB_GTSELF_SAVE( pGT, 0, 0, iRows - 1, iCols - 1, pBuffer );
}
@@ -2403,6 +2417,8 @@ static HB_BOOL hb_gt_def_Resize( PHB_GT pGT, int iRows, int iCols )
if( nSize )
{
HB_GTSELF_REST( pGT, 0, 0, iRows - 1, iCols - 1, pBuffer );
if( iFlag != 0 )
HB_GTSELF_SETFLAG( pGT, HB_GTI_COMPATBUFFER, iFlag );
hb_xfree( pBuffer );
}
}

View File

@@ -377,7 +377,7 @@ HB_SIZE hb_inkeyKeyString( int iKey, char * buffer, HB_SIZE nSize )
return nLen;
}
int s_inkeyTransChar( int iKey, int iFlags, const HB_KEY_VALUE * pKeyVal )
static int s_inkeyTransChar( int iKey, int iFlags, const HB_KEY_VALUE * pKeyVal )
{
if( ( iFlags & HB_KF_KEYPAD ) != 0 &&
( iFlags & ( HB_KF_ALT | HB_KF_CTRL ) ) != 0 )

View File

@@ -15,10 +15,12 @@ REQUEST HB_CODEPAGE_PLMAZ
REQUEST HB_CODEPAGE_PLISO
REQUEST HB_CODEPAGE_PL852
REQUEST HB_CODEPAGE_PLWIN
REQUEST HB_CODEPAGE_UTF8EX
#else
#define hb_keyCode( n ) Asc( n )
#define hb_keyChar( c ) Chr( c )
#define hb_ntos( n ) LTrim( Str( n ) )
#xtranslate hb_keyStd( n ) ( n )
#xtranslate hb_keyCode( n ) Asc( n )
#xtranslate hb_keyChar( c ) iif( c >= 32 .AND. c <= 255, Chr( c ), "" )
#xtranslate hb_ntos( n ) LTrim( Str( n ) )
#endif
#ifndef HB_K_RESIZE
#define HB_K_RESIZE 1101
@@ -26,7 +28,7 @@ REQUEST HB_CODEPAGE_PLWIN
PROCEDURE Main( cTermCP, cHostCP, lBoxChar )
LOCAL k, i, s
LOCAL k, kX, i, s
LOCAL aKeys := { ;
{ "K_UP", 5, "Up arrow, Ctrl-E" }, ;
{ "K_DOWN", 24, "Down arrow, Ctrl-X" }, ;
@@ -242,7 +244,7 @@ PROCEDURE Main( cTermCP, cHostCP, lBoxChar )
#ifdef __HARBOUR__
Set( _SET_EVENTMASK, HB_INKEY_ALL )
Set( _SET_EVENTMASK, HB_INKEY_ALL + HB_INKEY_EXT )
hb_gtInfo( HB_GTI_CURSORBLINKRATE, 1000 )
hb_gtInfo( HB_GTI_ESCDELAY, 50 )
// hb_gtinfo( HB_GTI_FONTATTRIBUTE, 0 )
@@ -259,12 +261,12 @@ PROCEDURE Main( cTermCP, cHostCP, lBoxChar )
hb_gtInfo( HB_GTI_CLOSABLE, .F. )
hb_gtInfo( HB_GTI_SELECTCOPY, .T. )
IF Empty( cTermCP )
cTermCP := "PLISO"
cTermCP := "UTF8"
ELSE
cTermCP := Upper( cTermCP )
ENDIF
IF Empty( cHostCP )
cHostCP := "PLMAZ"
cHostCP := "UTF8"
ELSE
cHostCP := Upper( cHostCP )
ENDIF
@@ -290,14 +292,25 @@ PROCEDURE Main( cTermCP, cHostCP, lBoxChar )
?
WHILE .T.
k := Inkey( 0 )
kX := Inkey( 0 )
k := hb_keyStd( kX )
IF ( i := AScan( aKeys, {| x | x[ 2 ] == k } ) ) != 0
? " key:" + Str( aKeys[ i, 2 ], 7 ) + " " + PadR( aKeys[ i, 1 ], 18 ) + aKeys[ i, 3 ]
ELSEIF k >= 32 .AND. k <= 126 .OR. ( k >= 160 .AND. k <= 255 ) .OR. ;
Len( hb_keyChar( k ) ) > 0
#ifdef __HARBOUR__
? "char:" + iif( k > 256, " U+" + hb_numToHex( hb_keyVal( k ), 4 ), Str( k, 7 ) ) + ;
" " + hb_keyChar( k )
#else
? "char:" + Str( k, 7 ) + " " + hb_keyChar( k )
#endif
ELSE
#ifdef __HARBOUR__
? " key:" + Str( k, 7 ) + " ext: 0x" + hb_numToHex( kX, 8 ) + " -> " + ;
hb_numToHex( hb_keyMod( kX ), 2 ) + ":" + hb_numToHex( hb_keyVal( kX ), 8 )
#else
? " key:" + Str( k, 7 )
#endif
ENDIF
// ?? " (" + hb_ntos( MaxRow() ) + ":" + hb_ntos( MaxCol() ) + ")"