in IDEtalk/core/src/jetbrains/communicator/util/MultipleSelectionListUI.java [20:120]
protected MouseInputListener createMouseInputListener() {
return new MouseInputListener() {
@Override
public void mouseClicked(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {
if (e.isConsumed()) {
selectedOnPress = false;
return;
}
selectedOnPress = true;
adjustFocusAndSelection(e);
}
void adjustFocusAndSelection(MouseEvent e) {
if (!SwingUtilities.isLeftMouseButton(e)) {
return;
}
if (!list.isEnabled()) {
return;
}
/* Request focus before updating the list selection. This implies
* that the current focus owner will see a focusLost() event
* before the lists selection is updated IF requestFocus() is
* synchronous (it is on Windows). See bug 4122345
*/
if (!list.hasFocus() && list.isRequestFocusEnabled()) {
IdeFocusManager.getGlobalInstance().doWhenFocusSettlesDown(() -> IdeFocusManager.getGlobalInstance().requestFocus(list, true));
}
int row = locationToIndex(list, e.getPoint());
if (row != -1) {
myLastPressedRow = row;
boolean adjusting = e.getID() == MouseEvent.MOUSE_PRESSED;
list.setValueIsAdjusting(adjusting);
int anchorIndex = list.getAnchorSelectionIndex();
if (e.isShiftDown() && (anchorIndex != -1)) {
list.setSelectionInterval(anchorIndex, row);
} else {
toggleSelection(row);
}
}
}
@Override
public void mouseDragged(MouseEvent e) {
if (e.isConsumed()) {
return;
}
if (!SwingUtilities.isLeftMouseButton(e)) {
return;
}
if (!list.isEnabled()) {
return;
}
if (e.isShiftDown() || e.isControlDown()) {
return;
}
int row = locationToIndex(list, e.getPoint());
if (row != -1 && row != myLastDraggedRow && row != myLastPressedRow) {
myLastDraggedRow = row;
Rectangle cellBounds = getCellBounds(list, row, row);
if (cellBounds != null) {
list.scrollRectToVisible(cellBounds);
toggleSelection(row);
//list.setSelectionInterval(row, row);
}
}
if (row == -1) {
list.clearSelection();
}
}
@Override
public void mouseMoved(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
if (selectedOnPress) {
if (!SwingUtilities.isLeftMouseButton(e)) {
return;
}
list.setValueIsAdjusting(false);
} else {
adjustFocusAndSelection(e);
}
}
private boolean selectedOnPress;
};
}