diff --git a/harbour/ChangeLog b/harbour/ChangeLog index cfe1d623ca..fc375998fd 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,22 @@ 2008-12-31 13:59 UTC+0100 Foo Bar */ +2008-06-17 18:49 UTC+0200 Viktor Szakats (harbour.01 syenar hu) + * source/rtl/gtclip.c + ! Fixed get/set clipboard when UNICODE is #defined. + (WinCE mostly). + ! Fixed get/set clipboard when format is CF_UNICODETEXT. + (untested, please someone review me) + ! Fixed get clipboard when CF_TEXT/CF_OEMTEXT format + is used, so that an additionaly zero byte won't be + appended anymore to the returned string. + [TOMERGE RC1 if correct] + + * source/rtl/gtwvt/gtwvt.c + * "HARBOUR_WVT" -> "Harbour WVT". This text is visible, + so it's better to make it "desktop friendlier"". + [TOMERGE RC1] + 2008-06-17 13:28 UTC+0200 Viktor Szakats (harbour.01 syenar hu) * contrib/hbmzip/hbmzip.ch * contrib/hbmzip/hbmzip.c diff --git a/harbour/source/rtl/gtclip.c b/harbour/source/rtl/gtclip.c index 5bbbaf9413..846e246637 100644 --- a/harbour/source/rtl/gtclip.c +++ b/harbour/source/rtl/gtclip.c @@ -100,15 +100,23 @@ BOOL hb_gt_w32_setClipboard( UINT uFormat, char * szClipData, ULONG ulLen ) EmptyClipboard(); /* Allocate a global memory object for the text. */ - hglbCopy = GlobalAlloc( GMEM_MOVEABLE, ulLen + 1 ); + hglbCopy = GlobalAlloc( GMEM_MOVEABLE, uFormat == CF_UNICODETEXT ? ( ulLen + 1 ) * sizeof( wchar_t ) : ulLen + 1 ); if( hglbCopy ) { /* Lock the handle and copy the text to the buffer. */ lptstrCopy = ( LPTSTR ) GlobalLock( hglbCopy ); if( lptstrCopy ) { - HB_TCHAR_SETTO( lptstrCopy, szClipData, ulLen ); - lptstrCopy[ ulLen ] = '\0'; + if( uFormat == CF_UNICODETEXT ) + { + hb_mbtowcset( lptstrCopy, szClipData, ulLen ); + lptstrCopy[ ulLen * sizeof( wchar_t ) ] = L'\0'; + } + else + { + memcpy( lptstrCopy, szClipData, ulLen ); + lptstrCopy[ ulLen ] = '\0'; + } fResult = TRUE; } GlobalUnlock( hglbCopy ); @@ -122,27 +130,44 @@ BOOL hb_gt_w32_setClipboard( UINT uFormat, char * szClipData, ULONG ulLen ) BOOL hb_gt_w32_getClipboard( UINT uFormat, char ** pszClipData, ULONG *pulLen ) { - HGLOBAL hglb; - LPTSTR lptstr; - *pulLen = 0; *pszClipData = NULL; if( IsClipboardFormatAvailable( uFormat ) && OpenClipboard( NULL ) ) { - hglb = GetClipboardData( uFormat ); + HGLOBAL hglb = GetClipboardData( uFormat ); if( hglb ) { - lptstr = ( LPTSTR ) GlobalLock( hglb ); + LPTSTR lptstr = ( LPTSTR ) GlobalLock( hglb ); if( lptstr != NULL ) { - *pulLen = GlobalSize( hglb ); - - if( *pulLen ) + switch( uFormat ) { - *pszClipData = ( char * ) hb_xgrab( *pulLen + 1 ); - HB_TCHAR_GETFROM( *pszClipData, lptstr, *pulLen ); - ( *pszClipData )[ *pulLen ] = '\0'; + case CF_UNICODETEXT: + *pulLen = wcslen( lptstr ); + if( *pulLen ) + *pszClipData = hb_wctomb( lptstr ); + break; + case CF_OEMTEXT: + case CF_TEXT: + *pulLen = strlen( lptstr ); + if( *pulLen ) + { + *pszClipData = ( char * ) hb_xgrab( *pulLen + 1 ); + memcpy( *pszClipData, lptstr, *pulLen ); + ( *pszClipData )[ *pulLen ] = '\0'; + } + break; + default: + *pulLen = GlobalSize( hglb ); + if( *pulLen ) + { + *pszClipData = ( char * ) hb_xgrab( *pulLen + 1 ); + memcpy( *pszClipData, lptstr, *pulLen ); + ( *pszClipData )[ *pulLen ] = '\0'; + } + break; } + GlobalUnlock( hglb ); } } diff --git a/harbour/source/rtl/gtwvt/gtwvt.c b/harbour/source/rtl/gtwvt/gtwvt.c index 851cdd1808..3eb0f1ce43 100644 --- a/harbour/source/rtl/gtwvt/gtwvt.c +++ b/harbour/source/rtl/gtwvt/gtwvt.c @@ -1554,7 +1554,7 @@ static HWND hb_gt_wvt_CreateWindow( HINSTANCE hInstance, HINSTANCE hPrevInstance hWnd = CreateWindow( s_szAppName, /* classname */ - TEXT( "HARBOUR_WVT" ), /* window name */ + s_szAppName, /* window name */ WS_THICKFRAME|WS_OVERLAPPED|WS_CAPTION| WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX, /* style */ 0, /* x */ @@ -1568,8 +1568,7 @@ static HWND hb_gt_wvt_CreateWindow( HINSTANCE hInstance, HINSTANCE hPrevInstance if( hWnd == NULL ) { - MessageBox( NULL, TEXT( "Failed to create window." ), - TEXT( "HARBOUR_WVT" ), MB_ICONERROR ); + MessageBox( NULL, TEXT( "Failed to create window." ), s_szAppName, MB_ICONERROR ); return NULL; } @@ -2135,8 +2134,8 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) &szClipboardData, &ulLen ) ) { pInfo->pResult = hb_itemPutCLPtr( pInfo->pResult, - szClipboardData, - ulLen ); + szClipboardData, + ulLen ); } else {