From 58d2b47f563b6a0378a659fba0eca083b08efe4a Mon Sep 17 00:00:00 2001 From: Sergey Simonchik Date: Mon, 21 Dec 2015 19:58:15 +0300 Subject: [PATCH] fix checkbox togging with mouse (do not access `checkbox.getX()` as these components are not layouted and the return value is unreliable) --- .../src/com/intellij/ui/CheckBoxList.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/platform/platform-api/src/com/intellij/ui/CheckBoxList.java b/platform/platform-api/src/com/intellij/ui/CheckBoxList.java index 37ff932fce49..d600de017047 100644 --- a/platform/platform-api/src/com/intellij/ui/CheckBoxList.java +++ b/platform/platform-api/src/com/intellij/ui/CheckBoxList.java @@ -42,7 +42,8 @@ public class CheckBoxList extends JBList { super(); //noinspection unchecked setModel(dataModel); - setCellRenderer(new CellRenderer()); + final CellRenderer cellRenderer = new CellRenderer(); + setCellRenderer(cellRenderer); setSelectionMode(ListSelectionModel.SINGLE_SELECTION); setBorder(BorderFactory.createEtchedBorder()); addKeyListener(new KeyAdapter() { @@ -75,7 +76,8 @@ public class CheckBoxList extends JBList { catch (ClassCastException c) { iconArea = DEFAULT_CHECK_BOX_WIDTH; } - if (e.getX() < iconArea + checkbox.getX()) { + int checkboxX = e.getX() - cellRenderer.getLeftBorderThickness(); + if (checkboxX >= 0 && checkboxX < iconArea) { setSelected(checkbox, index); return true; } @@ -180,11 +182,13 @@ public class CheckBoxList extends JBList { private class CellRenderer implements ListCellRenderer { private final Border mySelectedBorder; private final Border myBorder; + private final int myLeftBorderThickness; private CellRenderer() { mySelectedBorder = UIManager.getBorder("List.focusCellHighlightBorder"); final Insets borderInsets = mySelectedBorder.getBorderInsets(new JCheckBox()); myBorder = new EmptyBorder(borderInsets); + myLeftBorderThickness = borderInsets.left; } @Override @@ -239,6 +243,10 @@ public class CheckBoxList extends JBList { return rootComponent; } + + private int getLeftBorderThickness() { + return myLeftBorderThickness; + } } @Nullable