mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-111169 Selecting lines using drag over line numbers area forgets last line of selection, if Shift is pressed before release
This commit is contained in:
@@ -5726,8 +5726,6 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
|
||||
}
|
||||
|
||||
private class MyMouseAdapter extends MouseAdapter {
|
||||
private boolean mySelectionTweaked;
|
||||
|
||||
@Override
|
||||
public void mousePressed(@NotNull MouseEvent e) {
|
||||
requestFocus();
|
||||
@@ -5769,7 +5767,6 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
|
||||
clearDraggedRange();
|
||||
|
||||
|
||||
mySelectionTweaked = false;
|
||||
myMousePressedEvent = e;
|
||||
EditorMouseEvent event = new EditorMouseEvent(EditorImpl.this, e, getMouseEventArea(e));
|
||||
|
||||
@@ -5827,9 +5824,6 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
|
||||
myMultiSelectionInProgress = false;
|
||||
|
||||
myDragOnGutterSelectionStartLine = -1;
|
||||
if (!mySelectionTweaked) {
|
||||
tweakSelectionIfNecessary(e);
|
||||
}
|
||||
if (e.isConsumed()) {
|
||||
return;
|
||||
}
|
||||
@@ -5929,10 +5923,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
|
||||
if (eventArea == EditorMouseEventArea.LINE_MARKERS_AREA ||
|
||||
eventArea == EditorMouseEventArea.ANNOTATIONS_AREA ||
|
||||
eventArea == EditorMouseEventArea.LINE_NUMBERS_AREA) {
|
||||
if (tweakSelectionIfNecessary(e)) {
|
||||
mySelectionTweaked = true;
|
||||
}
|
||||
else {
|
||||
if (!tweakSelectionIfNecessary(e)) {
|
||||
myGutterComponent.mousePressed(e);
|
||||
}
|
||||
if (e.isConsumed()) return false;
|
||||
|
||||
@@ -405,4 +405,11 @@ public class EditorImplTest extends AbstractEditorTest {
|
||||
assertEquals(7, highlighters[0].getStartOffset());
|
||||
assertEquals(8, highlighters[0].getEndOffset());
|
||||
}
|
||||
|
||||
public void testShiftPressedBeforeDragOverLineNumbersIsFinished() throws Exception {
|
||||
initText("abc\ndef\nghi");
|
||||
EditorTestUtil.setEditorVisibleSize(myEditor, 1000, 1000); // enable drag testing
|
||||
mouse().pressAtLineNumbers(0).dragToLineNumbers(2).shift().release();
|
||||
checkResultByText("<selection>abc\ndef\nghi</selection>");
|
||||
}
|
||||
}
|
||||
|
||||
+39
-20
@@ -33,6 +33,7 @@ public class EditorMouseFixture {
|
||||
private int myModifiers;
|
||||
private int myButton = MouseEvent.BUTTON1;
|
||||
private int myLastId;
|
||||
private Component myLastComponent;
|
||||
|
||||
public EditorMouseFixture(EditorImpl editor) {
|
||||
myEditor = editor;
|
||||
@@ -46,9 +47,18 @@ public class EditorMouseFixture {
|
||||
return pressAt(1, getPoint(visualLine, visualColumn));
|
||||
}
|
||||
|
||||
public EditorMouseFixture pressAtLineNumbers(int visualLine) {
|
||||
assert myEditor.getSettings().isLineNumbersShown();
|
||||
return pressAt(myEditor.getGutterComponentEx(), 1, new Point(0, myEditor.visibleLineToY(visualLine)));
|
||||
}
|
||||
|
||||
private EditorMouseFixture pressAt(int clickCount, Point p) {
|
||||
JComponent component = myEditor.getContentComponent();
|
||||
component.dispatchEvent(new MouseEvent(component,
|
||||
return pressAt(component, clickCount, p);
|
||||
}
|
||||
|
||||
private EditorMouseFixture pressAt(Component component, int clickCount, Point p) {
|
||||
component.dispatchEvent(new MouseEvent(myLastComponent = component,
|
||||
myLastId = MouseEvent.MOUSE_PRESSED,
|
||||
System.currentTimeMillis(),
|
||||
getModifiers(),
|
||||
@@ -66,27 +76,27 @@ public class EditorMouseFixture {
|
||||
|
||||
private EditorMouseFixture release(int clickCount) {
|
||||
int oldLastId = myLastId;
|
||||
JComponent component = myEditor.getContentComponent();
|
||||
component.dispatchEvent(new MouseEvent(component,
|
||||
myLastId = MouseEvent.MOUSE_RELEASED,
|
||||
System.currentTimeMillis(),
|
||||
getModifiers(),
|
||||
myX,
|
||||
myY,
|
||||
clickCount,
|
||||
false,
|
||||
myButton));
|
||||
myLastComponent.dispatchEvent(new MouseEvent(myLastComponent,
|
||||
myLastId = MouseEvent.MOUSE_RELEASED,
|
||||
System.currentTimeMillis(),
|
||||
getModifiers(),
|
||||
myX,
|
||||
myY,
|
||||
clickCount,
|
||||
false,
|
||||
myButton));
|
||||
if (oldLastId == MouseEvent.MOUSE_PRESSED) {
|
||||
component.dispatchEvent(new MouseEvent(component,
|
||||
myLastId = MouseEvent.MOUSE_CLICKED,
|
||||
System.currentTimeMillis(),
|
||||
getModifiers(),
|
||||
myX,
|
||||
myY,
|
||||
clickCount,
|
||||
false,
|
||||
myButton));
|
||||
myLastComponent.dispatchEvent(new MouseEvent(myLastComponent,
|
||||
myLastId = MouseEvent.MOUSE_CLICKED,
|
||||
System.currentTimeMillis(),
|
||||
getModifiers(),
|
||||
myX,
|
||||
myY,
|
||||
clickCount,
|
||||
false,
|
||||
myButton));
|
||||
}
|
||||
myLastComponent = null;
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -107,10 +117,19 @@ public class EditorMouseFixture {
|
||||
return dragToXY(p.x, p.y);
|
||||
}
|
||||
|
||||
public EditorMouseFixture dragToLineNumbers(int visualLine) {
|
||||
assert myEditor.getSettings().isLineNumbersShown();
|
||||
return dragToXY(myEditor.getGutterComponentEx(), 0, myEditor.visibleLineToY(visualLine));
|
||||
}
|
||||
|
||||
public EditorMouseFixture dragToXY(int x, int y) {
|
||||
Assert.assertFalse("Cannot test mouse dragging: editor visible size is not set. Use EditorTestUtil.setEditorVisibleSize(width, height)",
|
||||
myEditor.getScrollingModel().getVisibleArea().isEmpty());
|
||||
JComponent component = myEditor.getContentComponent();
|
||||
return dragToXY(component, x, y);
|
||||
}
|
||||
|
||||
private EditorMouseFixture dragToXY(JComponent component, int x, int y) {
|
||||
component.dispatchEvent(new MouseEvent(component,
|
||||
myLastId = MouseEvent.MOUSE_DRAGGED,
|
||||
System.currentTimeMillis(),
|
||||
|
||||
Reference in New Issue
Block a user