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(){