Skip to content

Commit

Permalink
Fix #421 present the text/plain;charset=utf-8 to the wayland clipboard
Browse files Browse the repository at this point in the history
Enables copy from eclipse to KDE/QT apps in a wayland session(RFC-1341)
  • Loading branch information
the-snowwhite authored and mickaelistria committed Nov 8, 2023
1 parent 2a5264b commit c7549d9
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,9 @@ boolean setData(Clipboard owner, Object[] data, Transfer[] dataTypes, int clipbo
System.arraycopy(entries, 0, tmp, 0, entries.length);
tmp[entries.length] = entry;
entries = tmp;
TransferData tdata = new TransferData();
tdata.type = typeIds[j];
transfer.javaToNative(data[i], tdata);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
*******************************************************************************/
package org.eclipse.swt.dnd;

import java.nio.charset.*;

import org.eclipse.swt.internal.*;
import org.eclipse.swt.internal.gtk.*;

Expand Down Expand Up @@ -109,8 +111,29 @@ public void javaToNative (Object object, TransferData transferData) {
transferData.pValue = string_target;
transferData.result = 1;
}
if (transferData.type == TEXT_PLAIN_UTF8_ID) {
// Convert the text into RFC-1341 format
byte[] rfc1341Data = encodeTextAsRFC1341(string);
transferData.format = 8; // Format for UTF-8
transferData.length = rfc1341Data.length;
transferData.pValue = OS.g_malloc(rfc1341Data.length);
if (transferData.pValue != 0) {
C.memmove(transferData.pValue, rfc1341Data, rfc1341Data.length);
transferData.result = 1;
}
}
}

// New method to encode text as RFC-1341
private byte[] encodeTextAsRFC1341(String text) {
// Implement encoding logic here, e.g., adding MIME headers and encoding text
// This is a simplified example; actual encoding depends on RFC-1341 standards
// String rfc1341Text = "Content-Type: " + TEXTPLAINUTF8 + "\r\n\r\n" + text;
String rfc1341Text = text;
return rfc1341Text.getBytes(StandardCharsets.UTF_8);
}


/**
* This implementation of <code>nativeToJava</code> converts a platform specific
* representation of plain text to a java <code>String</code>.
Expand Down

0 comments on commit c7549d9

Please sign in to comment.