Mercurial > projects > dwt-linux
changeset 359:fd2409fb852e
transfered data shall be utf16. Thanks hduregger.
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Tue, 27 Jan 2009 10:15:27 +0100 |
parents | 558cbe388376 |
children | ee1dd551f5b1 5b585873fec2 |
files | dwt/dnd/URLTransfer.d |
diffstat | 1 files changed, 16 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/dwt/dnd/URLTransfer.d Tue Jan 27 10:09:26 2009 +0100 +++ b/dwt/dnd/URLTransfer.d Tue Jan 27 10:15:27 2009 +0100 @@ -72,14 +72,15 @@ if (!checkURL(object) || !isSupportedType(transferData)) { DND.error(DND.ERROR_INVALID_DATA); } - String string = (cast(ArrayWrapperString)object).array; - char* pValue = cast(char*)OS.g_malloc(string.length+1); + wchar[] string = (cast(ArrayWrapperString)object).array.toString16(); + int byteCount = (string.length+1)*2; + wchar* pValue = cast(wchar*)OS.g_malloc(byteCount); if (pValue is null) return; pValue[ 0 .. string.length ] = string[]; pValue[ string.length ] = '\0'; - transferData.length = string.length; + transferData.length = byteCount; transferData.format = 8; - transferData.pValue = pValue; + transferData.pValue = cast(char*)pValue; transferData.result = 1; } @@ -95,11 +96,18 @@ */ public Object nativeToJava(TransferData transferData){ if (!isSupportedType(transferData) || transferData.pValue is null) return null; - int size = (transferData.format * transferData.length / 8); + /* Ensure byteCount is a multiple of 2 bytes */ + int size = (transferData.format * transferData.length / 8) / 2 * 2; if (size <= 0) return null; - String string = fromStringz(cast(char*)transferData.pValue).dup; - int end = string.indexOf('\0'); - return new ArrayWrapperString((end is -1) ? string : string.substring(0, end)); + // The string can be terminated with NULL or it is as a maximum of length size + for( int i = 0; i < size; i++ ){ + if( (cast(wchar*)transferData.pValue)[i] == '\0' ){ + size = i; + break; + } + } + String string = tango.text.convert.Utf.toString((cast(wchar*)transferData.pValue)[ 0 .. size ]); + return new ArrayWrapperString( string ); } protected int[] getTypeIds(){