fix: grid search bar not losing focus properly

Fixes #3579
Fixes #2913
This commit is contained in:
raoulvdberge
2023-11-05 13:48:06 +01:00
parent 9b30bece19
commit 0f325efe95
2 changed files with 18 additions and 5 deletions

View File

@@ -530,13 +530,15 @@ public class GridScreen extends BaseScreen<GridContainerMenu> implements IScreen
@Override @Override
public boolean mouseClicked(double mouseX, double mouseY, int clickedButton) { public boolean mouseClicked(double mouseX, double mouseY, int clickedButton) {
if (tabs.mouseClicked()) { if (tabs.mouseClicked()) {
setFocused(null);
return true; return true;
} }
if (scrollbar.mouseClicked(mouseX, mouseY, clickedButton)) { if (scrollbar.mouseClicked(mouseX, mouseY, clickedButton)) {
setFocused(null);
return true; return true;
} }
if (grid.getGridType() == GridType.PATTERN && patternScrollbar.mouseClicked(mouseX, mouseY, clickedButton)) { if (grid.getGridType() == GridType.PATTERN && patternScrollbar.mouseClicked(mouseX, mouseY, clickedButton)) {
setFocused(null);
return true; return true;
} }
if (RS.CLIENT_CONFIG.getGrid().getPreventSortingWhileShiftIsDown()) { if (RS.CLIENT_CONFIG.getGrid().getPreventSortingWhileShiftIsDown()) {
@@ -551,12 +553,16 @@ public class GridScreen extends BaseScreen<GridContainerMenu> implements IScreen
RS.NETWORK_HANDLER.sendToServer(new GridPatternCreateMessage(((GridNetworkNode) grid).getPos())); RS.NETWORK_HANDLER.sendToServer(new GridPatternCreateMessage(((GridNetworkNode) grid).getPos()));
setFocused(null);
return true; return true;
} else if (clickedClear) { } else if (clickedClear) {
minecraft.getSoundManager().play(SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1.0F)); minecraft.getSoundManager().play(SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1.0F));
RS.NETWORK_HANDLER.sendToServer(new GridClearMessage()); RS.NETWORK_HANDLER.sendToServer(new GridClearMessage());
setFocused(null);
return true; return true;
} else if (grid.isGridActive()) { } else if (grid.isGridActive()) {
ItemStack held = menu.getCarried(); ItemStack held = menu.getCarried();
@@ -567,6 +573,7 @@ public class GridScreen extends BaseScreen<GridContainerMenu> implements IScreen
} else { } else {
RS.NETWORK_HANDLER.sendToServer(new GridItemInsertHeldMessage(clickedButton == 1)); RS.NETWORK_HANDLER.sendToServer(new GridItemInsertHeldMessage(clickedButton == 1));
} }
setFocused(null);
return true; return true;
} }
@@ -596,6 +603,7 @@ public class GridScreen extends BaseScreen<GridContainerMenu> implements IScreen
} }
} }
setFocused(null);
return true; return true;
} }
} }

View File

@@ -47,17 +47,22 @@ public class SearchWidget extends EditBox {
@Override @Override
public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) {
boolean wasFocused = isFocused();
boolean result = super.mouseClicked(mouseX, mouseY, mouseButton); boolean result = super.mouseClicked(mouseX, mouseY, mouseButton);
boolean clickedWidget = mouseX >= this.getX() && mouseX < this.getX() + this.width && mouseY >= this.getY() && mouseY < this.getY() + this.height; boolean clickedWidget = mouseX >= this.getX() && mouseX < this.getX() + this.width && mouseY >= this.getY() && mouseY < this.getY() + this.height;
if (clickedWidget && mouseButton == 1) { if (clickedWidget && mouseButton == 1) {
// On right click, clear the widget and focus, save history if necessary.
if (isFocused()) {
saveHistory();
}
setValue(""); setValue("");
setFocused(true); setFocused(true);
} else if (wasFocused != isFocused()) { }
if (!clickedWidget && isFocused()) {
// If we are focused, and we click outside the search box, lose focus.
saveHistory(); saveHistory();
setFocused(false);
} }
return result; return result;