Skip to content

Commit 68b0882

Browse files
committed
Solve mouseover + dropdown deadly combo
1 parent 0c7fa88 commit 68b0882

File tree

4 files changed

+34
-6
lines changed

4 files changed

+34
-6
lines changed

app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCellEditor.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,12 @@ public Component getTableCellEditorComponent(JTable table, Object value,
7676
ContributedLibrary lib = (ContributedLibrary) chooser.getSelectedItem();
7777
onInstall(lib, editorValue.getInstalled());
7878
});
79-
editorCell.versionToInstallChooser.addItemListener(e -> editorValue
80-
.select((ContributedLibrary) editorCell.versionToInstallChooser
81-
.getSelectedItem()));
79+
editorCell.versionToInstallChooser.addActionListener(e -> {
80+
editorValue.select((ContributedLibrary) editorCell.versionToInstallChooser.getSelectedItem());
81+
if (editorCell.versionToInstallChooser.getSelectedIndex() != 0) {
82+
InstallerTableCell.dropdownSelected(true);
83+
}
84+
});
8285

8386
setEnabled(true);
8487

app/src/cc/arduino/contributions/libraries/ui/ContributedLibraryTableCellJPanel.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,13 @@ public ContributedLibraryTableCellJPanel(JTable parentTable, Object value,
5454
downgradeChooser.addItem("-");
5555
downgradeChooser.setMaximumSize(new Dimension((int)downgradeChooser.getPreferredSize().getWidth() + 50, (int)downgradeChooser.getPreferredSize().getHeight()));
5656
downgradeChooser.setMinimumSize(new Dimension((int)downgradeChooser.getPreferredSize().getWidth() + 50, (int)downgradeChooser.getPreferredSize().getHeight()));
57-
downgradeChooser.addItemListener(e -> {
57+
downgradeChooser.addActionListener(e -> {
5858
Object selectVersionItem = downgradeChooser.getItemAt(0);
59-
boolean disableDowngrade = (e.getItem() == selectVersionItem);
59+
boolean disableDowngrade = (downgradeChooser.getSelectedItem() == selectVersionItem);
6060
downgradeButton.setEnabled(!disableDowngrade);
61+
if (!disableDowngrade) {
62+
InstallerTableCell.dropdownSelected(true);
63+
}
6164
});
6265

6366
versionToInstallChooser = new JComboBox();

app/src/cc/arduino/contributions/ui/InstallerJDialog.java

+13-1
Original file line numberDiff line numberDiff line change
@@ -171,10 +171,22 @@ public void keyReleased(KeyEvent keyEvent) {
171171

172172
contribTable.addMouseMotionListener(new MouseMotionListener() {
173173

174+
int previousRowAtPoint = -1;
175+
174176
public void mouseDragged(MouseEvent e) {}
175177

176178
public void mouseMoved(MouseEvent e) {
177-
contribTable.editCellAt(contribTable.rowAtPoint(e.getPoint()), 0);
179+
// avoid firing edits events until:
180+
int rowAtPoint = contribTable.rowAtPoint(e.getPoint());
181+
if (!InstallerTableCell.isDropdownSelected() && rowAtPoint != previousRowAtPoint) {
182+
contribTable.editCellAt(rowAtPoint, 0);
183+
previousRowAtPoint = rowAtPoint;
184+
InstallerTableCell.dropdownSelected(false);
185+
}
186+
if (InstallerTableCell.isDropdownSelected() && rowAtPoint == previousRowAtPoint) {
187+
// back to the original cell, can drop dropdown selector lock
188+
InstallerTableCell.dropdownSelected(false);
189+
}
178190
}
179191
});
180192

app/src/cc/arduino/contributions/ui/InstallerTableCell.java

+10
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,16 @@ public abstract class InstallerTableCell extends AbstractCellEditor implements T
4141

4242
abstract public void setEnabled(boolean b);
4343

44+
private static boolean dropdownSelected = false;
45+
46+
public static boolean isDropdownSelected( ) {
47+
return dropdownSelected;
48+
}
49+
50+
public static void dropdownSelected(boolean b) {
51+
dropdownSelected = b;
52+
}
53+
4454
abstract public void setStatus(String s);
4555

4656
public static void setJTextPaneDimensionToFitContainedText(JTextPane jTextPane, int width) {

0 commit comments

Comments
 (0)