Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarolyn MacLeod2012-04-17 16:48:14 +0000
committerCarolyn MacLeod2012-04-17 16:48:39 +0000
commitc5308d73c1e46a1db4edf39db94dfada1b6e65dc (patch)
tree046d02b2f925265a5649ae9a647dad4b727b1733
parenta9bcfea463127dd8a6c52ce4af29eac7df4a241d (diff)
downloadeclipse.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.java20
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);
}

Back to the top