Skip to content

Commit 4286522

Browse files
committed
Library manager: update filters combo box only if there are changes
The filters content is unlikely to change, so just prevent it from live updating it because it has some side effects: - it's slow - it changes the selection back to the default and it's very tricky to make it re-select the previous selection. Fixes arduino#10439
1 parent ea84e73 commit 4286522

File tree

1 file changed

+18
-19
lines changed

1 file changed

+18
-19
lines changed

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

+18-19
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import java.awt.Frame;
3636
import java.awt.event.ActionEvent;
3737
import java.awt.event.ActionListener;
38+
import java.util.ArrayList;
3839
import java.util.Collection;
3940
import java.util.Collections;
4041
import java.util.LinkedList;
@@ -130,48 +131,46 @@ public void actionPerformed(ActionEvent event) {
130131
}
131132
};
132133

134+
private Collection<String> oldCategories = new ArrayList<>();
135+
private Collection<String> oldTypes = new ArrayList<>();
136+
133137
public void updateUI() {
134-
DropdownItem<ContributedLibraryReleases> previouslySelectedCategory = (DropdownItem<ContributedLibraryReleases>) categoryChooser.getSelectedItem();
135-
DropdownItem<ContributedLibraryReleases> previouslySelectedType = (DropdownItem<ContributedLibraryReleases>) typeChooser.getSelectedItem();
138+
// Check if categories or types have changed
139+
Collection<String> categories = BaseNoGui.librariesIndexer.getIndex().getCategories();
140+
List<String> types = new LinkedList<>(BaseNoGui.librariesIndexer.getIndex().getTypes());
141+
Collections.sort(types, new LibraryTypeComparator());
136142

137-
categoryChooser.removeActionListener(categoryChooserActionListener);
138-
typeChooser.removeActionListener(typeChooserActionListener);
143+
if (categories.equals(oldCategories) && types.equals(oldTypes)) {
144+
return;
145+
}
146+
oldCategories = categories;
147+
oldTypes = types;
139148

140149
// Load categories
141150
categoryFilter = x -> true;
151+
categoryChooser.removeActionListener(categoryChooserActionListener);
142152
categoryChooser.removeAllItems();
143153
categoryChooser.addItem(new DropdownAllLibraries());
144-
Collection<String> categories = BaseNoGui.librariesIndexer.getIndex().getCategories();
145154
for (String category : categories) {
146155
categoryChooser.addItem(new DropdownLibraryOfCategoryItem(category));
147156
}
148-
149157
categoryChooser.setEnabled(categoryChooser.getItemCount() > 1);
150-
151158
categoryChooser.addActionListener(categoryChooserActionListener);
152-
if (previouslySelectedCategory != null) {
153-
categoryChooser.setSelectedItem(previouslySelectedCategory);
154-
} else {
155-
categoryChooser.setSelectedIndex(0);
156-
}
159+
categoryChooser.setSelectedIndex(0);
157160

161+
// Load types
158162
typeFilter = x -> true;
163+
typeChooser.removeActionListener(typeChooserActionListener);
159164
typeChooser.removeAllItems();
160165
typeChooser.addItem(new DropdownAllLibraries());
161166
typeChooser.addItem(new DropdownUpdatableLibrariesItem());
162167
typeChooser.addItem(new DropdownInstalledLibraryItem());
163-
List<String> types = new LinkedList<>(BaseNoGui.librariesIndexer.getIndex().getTypes());
164-
Collections.sort(types, new LibraryTypeComparator());
165168
for (String type : types) {
166169
typeChooser.addItem(new DropdownLibraryOfTypeItem(type));
167170
}
168171
typeChooser.setEnabled(typeChooser.getItemCount() > 1);
169172
typeChooser.addActionListener(typeChooserActionListener);
170-
if (previouslySelectedType != null) {
171-
typeChooser.setSelectedItem(previouslySelectedType);
172-
} else {
173-
typeChooser.setSelectedIndex(0);
174-
}
173+
typeChooser.setSelectedIndex(0);
175174

176175
filterField.setEnabled(contribModel.getRowCount() > 0);
177176
}

0 commit comments

Comments
 (0)