Bug 575872 - Paste is broken
Change-Id: I509a09555789b634e956b81e89ceb1150f45af6a
Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.text/+/185587
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 53e9c55..0154c98 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
@@ -414,10 +414,17 @@
public void testPasteMultiLines() {
fShell= new Shell();
TextViewer textViewer= new TextViewer(fShell, SWT.NONE);
- textViewer.setDocument(new Document());
+ Document document= new Document();
+ textViewer.setDocument(document);
new Clipboard(fShell.getDisplay()).setContents(new Object[] { "a\na" }, new Transfer[] { TextTransfer.getInstance() }, DND.CLIPBOARD);
textViewer.doOperation(ITextOperationTarget.PASTE);
assertEquals("a\na", textViewer.getTextWidget().getText());
+ //
+ document.set("a\na\na\nb");
+ textViewer.setSelectedRange(0, 6);
+ new Clipboard(fShell.getDisplay()).setContents(new Object[] { "b" }, new Transfer[] { TextTransfer.getInstance() }, DND.CLIPBOARD);
+ textViewer.doOperation(ITextOperationTarget.PASTE);
+ assertEquals("bb", textViewer.getTextWidget().getText());
}
@Test
diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewer.java b/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewer.java
index 7938bc5..d886741 100644
--- a/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewer.java
+++ b/org.eclipse.jface.text/src/org/eclipse/jface/text/TextViewer.java
@@ -3981,7 +3981,7 @@
}
private void delete() {
- if (!fTextWidget.getBlockSelection() && fTextWidget.getSelectionRanges().length < 2) {
+ if (!fTextWidget.getBlockSelection() && isWidgetSelectionSingleRange()) {
fTextWidget.invokeAction(ST.DELETE_NEXT);
} else {
wrapCompoundChange(() -> {
@@ -3997,9 +3997,13 @@
fireSelectionChanged(selection.x, selection.y);
}
+ private boolean isWidgetSelectionSingleRange() {
+ return fTextWidget.getSelectionRanges().length <= 2;
+ }
+
private void paste() {
// ignoreAutoEditStrategies(true);
- if (fTextWidget.getSelectionRanges().length < 2) { // single selection
+ if (isWidgetSelectionSingleRange()) { // single selection
fTextWidget.paste();
} else {
wrapCompoundChange(() -> {