From 499a327393369ee464ff86f55ddd88aa457b21f5 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 1 Oct 2008 19:12:44 +0400 Subject: [PATCH] Better multiselection for JList based popups --- .../src/com/intellij/openapi/ui/popup/PopupChooserBuilder.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/platform-api/src/com/intellij/openapi/ui/popup/PopupChooserBuilder.java b/platform-api/src/com/intellij/openapi/ui/popup/PopupChooserBuilder.java index 3ec8ec8f45..60bea0cc41 100644 --- a/platform-api/src/com/intellij/openapi/ui/popup/PopupChooserBuilder.java +++ b/platform-api/src/com/intellij/openapi/ui/popup/PopupChooserBuilder.java @@ -151,7 +151,7 @@ public class PopupChooserBuilder { myChooserComponent.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { - if (!e.isConsumed()) { + if (!isSelectionButtonDown(e) && !e.isConsumed()) { closePopup(true); } } @@ -320,6 +320,10 @@ public class PopupChooserBuilder { return this; } + private static boolean isSelectionButtonDown(MouseEvent e) { + return e.isShiftDown() || e.isControlDown() || e.isMetaDown(); + } + private class MyListWrapper extends JScrollPane implements DataProvider { @SuppressWarnings({"FieldAccessedSynchronizedAndUnsynchronized"}) private JList myList; @@ -329,7 +333,7 @@ public class PopupChooserBuilder { list.addMouseMotionListener(new MouseMotionAdapter() { boolean myIsEngaged = false; public void mouseMoved(MouseEvent e) { - if (myIsEngaged) { + if (myIsEngaged && !isSelectionButtonDown(e)) { Point point = e.getPoint(); int index = list.locationToIndex(point); list.setSelectedIndex(index); -- 2.11.4.GIT