diff --git a/app/src/cc/arduino/contributions/ui/FilterJTextField.java b/app/src/cc/arduino/contributions/ui/FilterJTextField.java index 9dc7fd8d6b5..90759449397 100644 --- a/app/src/cc/arduino/contributions/ui/FilterJTextField.java +++ b/app/src/cc/arduino/contributions/ui/FilterJTextField.java @@ -33,6 +33,8 @@ import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; @@ -41,6 +43,7 @@ public class FilterJTextField extends JTextField { private final String filterHint; private boolean showingHint; + private Timer timer; public FilterJTextField(String hint) { super(hint); @@ -48,6 +51,13 @@ public FilterJTextField(String hint) { showingHint = true; updateStyle(); + timer = new Timer(1000, new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + applyFilter(); + timer.stop(); + } + }); addFocusListener(new FocusListener() { public void focusLost(FocusEvent focusEvent) { @@ -68,33 +78,43 @@ public void focusGained(FocusEvent focusEvent) { getDocument().addDocumentListener(new DocumentListener() { public void removeUpdate(DocumentEvent e) { - applyFilter(); + spawnTimer(); } public void insertUpdate(DocumentEvent e) { - applyFilter(); + spawnTimer(); } public void changedUpdate(DocumentEvent e) { + + } + }); + + addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (timer.isRunning()) { + timer.stop(); + } applyFilter(); } }); } - private String lastFilter = ""; + private void spawnTimer() { + if (timer.isRunning()) { + timer.stop(); + } + timer.start(); + } - private void applyFilter() { + public void applyFilter() { String filter = showingHint ? "" : getText(); filter = filter.toLowerCase(); // Replace anything but 0-9, a-z, or : with a space filter = filter.replaceAll("[^\\x30-\\x39^\\x61-\\x7a^\\x3a]", " "); - // Fire event only if the filter is changed - if (filter.equals(lastFilter)) - return; - - lastFilter = filter; onFilter(filter.split(" ")); } diff --git a/app/src/cc/arduino/contributions/ui/InstallerJDialog.java b/app/src/cc/arduino/contributions/ui/InstallerJDialog.java index 3dd864134c4..466bd0dfafc 100644 --- a/app/src/cc/arduino/contributions/ui/InstallerJDialog.java +++ b/app/src/cc/arduino/contributions/ui/InstallerJDialog.java @@ -320,6 +320,7 @@ public void setFilterText(String filterText) { listener.focusGained(new FocusEvent(filterField, FocusEvent.FOCUS_GAINED)); } filterField.setText(filterText); + filterField.applyFilter(); } public void selectDropdownItemByClassName(String dropdownItem) {