Bug 575872 - Paste is broken
Change-Id: I88d659da7acce06359040cfc3f5537a5e85d70a7
Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.text/+/185178
Tested-by: Platform Bot <platform-bot@eclipse.org>
Reviewed-by: Mickael Istria <mistria@redhat.com>
diff --git a/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/TextViewerTest.java b/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/TextViewerTest.java
index 9de19b4..e07f094 100644
--- a/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/TextViewerTest.java
+++ b/org.eclipse.jface.text.tests/src/org/eclipse/jface/text/tests/TextViewerTest.java
@@ -31,6 +31,10 @@
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.custom.StyledTextContent;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
@@ -432,4 +436,14 @@
shell.dispose();
}
}
+
+ @Test
+ public void testPasteMultiLines() {
+ Shell shell= new Shell();
+ TextViewer textViewer= new TextViewer(shell, SWT.NONE);
+ textViewer.setDocument(new Document());
+ new Clipboard(shell.getDisplay()).setContents(new Object[] { "a\na" }, new Transfer[] { TextTransfer.getInstance() }, DND.CLIPBOARD);
+ textViewer.doOperation(ITextOperationTarget.PASTE);
+ assertEquals("a\na", textViewer.getTextWidget().getText());
+ }
}
diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/SelectionProcessor.java b/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/SelectionProcessor.java
index 8dfadea..f2ab696 100644
--- a/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/SelectionProcessor.java
+++ b/org.eclipse.jface.text/src/org/eclipse/jface/internal/text/SelectionProcessor.java
@@ -1033,7 +1033,7 @@
private <T extends ISelection> Implementation<T> getImplementation(ISelection selection) {
if (selection instanceof IBlockTextSelection) {
return (Implementation<T>) COLUMN_IMPLEMENTATION;
- } else if (selection instanceof IMultiTextSelection) {
+ } else if (selection instanceof IMultiTextSelection && ((IMultiTextSelection)selection).getRegions().length > 1) {
return (Implementation<T>) RANGES_IMPLEMENTATION;
} else if (selection instanceof ITextSelection) {
return (Implementation<T>) RANGE_IMPLEMENTATION;