diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 5545bf840d..6d8d901083 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,16 @@ 2002-12-01 13:30 UTC+0100 Foo Bar */ +2007-11-21 19:59 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/source/rtl/hbgtcore.c + + added emulation for clipboard in core GT code. + Now: + hb_gtInfo( GTI_CLIPBOARDDATA ) -> + and: + hb_gtInfo( GTI_CLIPBOARDDATA, ) + is working in all GTs even if such functionality is not supported + by OS. + 2007-11-21 18:30 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/make_vcce.bat * harbour/make_vcce.mak diff --git a/harbour/source/rtl/hbgtcore.c b/harbour/source/rtl/hbgtcore.c index 7ea9c446b2..09f105e97c 100644 --- a/harbour/source/rtl/hbgtcore.c +++ b/harbour/source/rtl/hbgtcore.c @@ -78,6 +78,9 @@ static USHORT s_uiClearChar = ' '; static BYTE s_bClearColor = 0x07; static FHANDLE s_hStdIn = 0, s_hStdOut = 1, s_hStdErr = 2; +static char * s_szClipboardData = NULL; +static ULONG s_ulClipboardLen = 0; + static BOOL s_fDispTrans = FALSE; static PHB_CODEPAGE s_cdpTerm = NULL; static PHB_CODEPAGE s_cdpHost = NULL; @@ -179,6 +182,11 @@ static void hb_gt_def_Exit( void ) hb_xfree( s_pColor ); s_iColorCount = 0; } + if( s_ulClipboardLen ) + { + hb_xfree( s_szClipboardData ); + s_ulClipboardLen = 0; + } } static BOOL hb_gt_def_CheckPos( int iRow, int iCol, long *plIndex ) @@ -1525,6 +1533,25 @@ static BOOL hb_gt_def_Info( int iType, PHB_GT_INFO pInfo ) } break; + case GTI_CLIPBOARDDATA: + if( hb_itemType( pInfo->pNewVal ) & HB_IT_STRING ) + { /* set new Clipboard value */ + if( s_ulClipboardLen ) + hb_xfree( s_szClipboardData ); + s_ulClipboardLen = hb_itemGetCLen( pInfo->pNewVal ); + if( s_ulClipboardLen ) + { + s_szClipboardData = ( char * ) hb_xgrab( s_ulClipboardLen + 1 ); + memcpy( s_szClipboardData, hb_itemGetCPtr( pInfo->pNewVal ), + s_ulClipboardLen ); + s_szClipboardData[ s_ulClipboardLen ] = '\0'; + } + } + else /* get Clipboard value */ + pInfo->pResult = hb_itemPutCL( pInfo->pResult, s_szClipboardData, + s_ulClipboardLen ); + break; + default: return FALSE; }