diff options
author | Carolyn MacLeod <Carolyn_MacLeod@ca.ibm.com> | 2012-04-17 12:48:14 -0400 |
---|---|---|
committer | Carolyn MacLeod <Carolyn_MacLeod@ca.ibm.com> | 2012-04-17 12:48:39 -0400 |
commit | c5308d73c1e46a1db4edf39db94dfada1b6e65dc (patch) | |
tree | 046d02b2f925265a5649ae9a647dad4b727b1733 | |
parent | a9bcfea463127dd8a6c52ce4af29eac7df4a241d (diff) | |
download | eclipse.platform.swt-c5308d73c1e46a1db4edf39db94dfada1b6e65dc.tar.gz eclipse.platform.swt-c5308d73c1e46a1db4edf39db94dfada1b6e65dc.tar.xz eclipse.platform.swt-c5308d73c1e46a1db4edf39db94dfada1b6e65dc.zip |
Bug 376589 - clipboard.getContents(HTMLTransfer.getInstance()) returns
gibberish on gtk
-rw-r--r-- | bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/HTMLTransfer.java | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/HTMLTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/HTMLTransfer.java index 5d0ccaeb91..52fd5268c6 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/HTMLTransfer.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/HTMLTransfer.java @@ -88,10 +88,22 @@ public Object nativeToJava(TransferData transferData){ if ( !isSupportedType(transferData) || transferData.pValue == 0 ) return null; /* Ensure byteCount is a multiple of 2 bytes */ int size = (transferData.format * transferData.length / 8) / 2 * 2; - if (size <= 0) return null; - char[] chars = new char [size/2]; - OS.memmove (chars, transferData.pValue, size); - String string = new String (chars); + if (size <= 0) return null; + char[] bom = new char[1]; // look for a Byte Order Mark + if (size > 1) OS.memmove (bom, transferData.pValue, 2); + String string; + if (bom[0] == '\ufeff' || bom[0] == '\ufffe') { + // utf16 + char[] chars = new char [size/2]; + OS.memmove (chars, transferData.pValue, size); + string = new String (chars); + } else { + byte[] utf8 = new byte[size]; + OS.memmove(utf8, transferData.pValue, size); + // convert utf8 byte array to a unicode string + char [] unicode = org.eclipse.swt.internal.Converter.mbcsToWcs (null, utf8); + string = new String (unicode); + } int end = string.indexOf('\0'); return (end == -1) ? string : string.substring(0, end); } |