Skip to content

Commit ca8a434

Browse files
fix selecting field text on packing
fix repainting instead of packing when search term is empty add translatable text to noResults fix inverting when noResults is shown
1 parent 8b90dd8 commit ca8a434

File tree

2 files changed

+40
-7
lines changed

2 files changed

+40
-7
lines changed

enigma-swing/src/main/java/org/quiltmc/enigma/gui/element/menu_bar/SearchMenusMenu.java

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@
1414
import javax.swing.MenuElement;
1515
import javax.swing.event.DocumentEvent;
1616
import javax.swing.event.DocumentListener;
17+
import javax.swing.event.MenuEvent;
18+
import javax.swing.event.MenuListener;
19+
import java.awt.event.HierarchyEvent;
20+
import java.awt.event.HierarchyListener;
1721
import java.util.Arrays;
1822
import java.util.Set;
1923
import java.util.stream.Collectors;
@@ -45,10 +49,39 @@ protected SearchMenusMenu(Gui gui) {
4549
this.add(this.field);
4650
this.add(this.noResults);
4751

52+
// Always focus field, but don't always select its text, because it loses focus when packing new search results.
4853
this.field.addHierarchyListener(e -> {
4954
if (this.field.isShowing()) {
5055
this.field.requestFocus();
51-
this.field.selectAll();
56+
}
57+
});
58+
59+
// Only select field text when the menu is selected, so text isn't selected when packing new search results.
60+
this.addMenuListener(new MenuListener() {
61+
final HierarchyListener fieldTextSelector = new HierarchyListener() {
62+
@Override
63+
public void hierarchyChanged(HierarchyEvent e) {
64+
if (SearchMenusMenu.this.field.isShowing()) {
65+
SearchMenusMenu.this.field.removeHierarchyListener(this);
66+
67+
SearchMenusMenu.this.field.selectAll();
68+
}
69+
}
70+
};
71+
72+
@Override
73+
public void menuSelected(MenuEvent e) {
74+
SearchMenusMenu.this.field.addHierarchyListener(this.fieldTextSelector);
75+
}
76+
77+
@Override
78+
public void menuDeselected(MenuEvent e) {
79+
SearchMenusMenu.this.field.removeHierarchyListener(this.fieldTextSelector);
80+
}
81+
82+
@Override
83+
public void menuCanceled(MenuEvent e) {
84+
SearchMenusMenu.this.field.removeHierarchyListener(this.fieldTextSelector);
5285
}
5386
});
5487

@@ -58,23 +91,21 @@ void updateResultItems() {
5891

5992
if (searchTerm.isEmpty()) {
6093
SearchMenusMenu.this.noResults.setVisible(false);
61-
SearchMenusMenu.this.invalidate();
62-
SearchMenusMenu.this.repaint();
6394
SearchMenusMenu.this.resultManager.clearCurrent();
95+
96+
SearchMenusMenu.this.getPopupMenu().pack();
6497
} else {
6598
switch (SearchMenusMenu.this.resultManager.updateResultItems(searchTerm)) {
6699
case NO_RESULTS -> {
67-
SearchMenusMenu.this.noResults.setVisible(false);
100+
SearchMenusMenu.this.noResults.setVisible(true);
68101

69102
SearchMenusMenu.this.getPopupMenu().pack();
70-
SearchMenusMenu.this.getPopupMenu().pack();
71103
}
72104
case SAME_RESULTS -> { }
73105
case DIFFERENT_RESULTS -> {
74-
SearchMenusMenu.this.noResults.setVisible(true);
106+
SearchMenusMenu.this.noResults.setVisible(false);
75107

76108
SearchMenusMenu.this.getPopupMenu().pack();
77-
SearchMenusMenu.this.getPopupMenu().pack();
78109
}
79110
}
80111
}
@@ -112,6 +143,7 @@ public void retranslate() {
112143

113144
this.setText(I18n.translate("menu.help.search"));
114145
this.field.setPlaceholder(I18n.translate("menu.help.search.placeholder"));
146+
this.noResults.setText(I18n.translate("menu.help.search.no_results"));
115147
}
116148

117149
private static class Result {

enigma/src/main/resources/lang/en_us.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@
110110
"menu.help.github": "Github Page",
111111
"menu.help.search": "Search menus",
112112
"menu.help.search.placeholder": "Search menus...",
113+
"menu.help.search.no_results": "No results",
113114

114115
"popup_menu.rename": "Rename",
115116
"popup_menu.paste": "Paste text",

0 commit comments

Comments
 (0)