From 93f73cc0844b1adb705d34ff57ef591498a15eaf Mon Sep 17 00:00:00 2001 From: Radek Davidek Date: Thu, 26 Feb 2026 13:49:28 +0100 Subject: [PATCH] fixed select by mask dialog --- .../cz/kamma/kfmanager/ui/MainWindow.java | 23 ++++++----- .../kfmanager/ui/WildcardSelectDialog.java | 40 ++++++++++--------- 2 files changed, 36 insertions(+), 27 deletions(-) diff --git a/src/main/java/cz/kamma/kfmanager/ui/MainWindow.java b/src/main/java/cz/kamma/kfmanager/ui/MainWindow.java index 60ef36b..166e706 100644 --- a/src/main/java/cz/kamma/kfmanager/ui/MainWindow.java +++ b/src/main/java/cz/kamma/kfmanager/ui/MainWindow.java @@ -35,6 +35,7 @@ public class MainWindow extends JFrame { private AppConfig config; private Timer autoRefreshTimer; private boolean isWindowResizing = false; + private boolean wildcardDialogOpen = false; public MainWindow() { super("KF Manager v" + MainApp.APP_VERSION + " (" + MainApp.CURRENT_OS + ")"); @@ -2097,16 +2098,20 @@ public class MainWindow extends JFrame { */ public void showWildcardSelectDialog() { if (activePanel == null) return; + if (wildcardDialogOpen) return; + wildcardDialogOpen = true; - WildcardSelectDialog dialog = new WildcardSelectDialog(this); - dialog.setVisible(true); - - String pattern = dialog.getPattern(); - if (pattern != null && !pattern.isEmpty()) { - activePanel.selectByWildcard(pattern); - } else { - // If cancelled, return focus to the active panel - if (activePanel.getFileTable() != null) { + try { + WildcardSelectDialog dialog = new WildcardSelectDialog(this, pattern -> { + if (activePanel != null) { + activePanel.selectByWildcard(pattern); + } + }); + dialog.setVisible(true); + } finally { + wildcardDialogOpen = false; + // Return focus to the active panel after dialog is closed + if (activePanel != null && activePanel.getFileTable() != null) { activePanel.getFileTable().requestFocusInWindow(); } } diff --git a/src/main/java/cz/kamma/kfmanager/ui/WildcardSelectDialog.java b/src/main/java/cz/kamma/kfmanager/ui/WildcardSelectDialog.java index 7f909b2..bd2f7fd 100644 --- a/src/main/java/cz/kamma/kfmanager/ui/WildcardSelectDialog.java +++ b/src/main/java/cz/kamma/kfmanager/ui/WildcardSelectDialog.java @@ -4,6 +4,7 @@ import cz.kamma.kfmanager.MainApp; import javax.swing.*; import java.awt.*; import java.awt.event.KeyEvent; +import java.util.function.Consumer; /** * Dialog for entering a wildcard pattern to select matching files @@ -11,10 +12,11 @@ import java.awt.event.KeyEvent; public class WildcardSelectDialog extends JDialog { private JTextField patternField; - private boolean confirmed = false; + private final Consumer applyHandler; - public WildcardSelectDialog(Frame parent) { + public WildcardSelectDialog(Frame parent, Consumer applyHandler) { super(parent, "Select by pattern", true); + this.applyHandler = applyHandler; initComponents(); MainApp.applyReflectiveCaretColor(getContentPane()); @@ -45,39 +47,41 @@ public class WildcardSelectDialog extends JDialog { JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); JButton okButton = new JButton("OK"); - okButton.addActionListener(e -> { - confirmed = true; - dispose(); - }); + okButton.addActionListener(e -> applyAndMaybeClose(true)); JButton cancelButton = new JButton("Cancel"); - cancelButton.addActionListener(e -> { - confirmed = false; - dispose(); - }); + cancelButton.addActionListener(e -> dispose()); buttonPanel.add(okButton); buttonPanel.add(cancelButton); add(buttonPanel, BorderLayout.SOUTH); - // Enter confirms - patternField.addActionListener(e -> { - confirmed = true; - dispose(); - }); + // Enter applies pattern and closes dialog + patternField.addActionListener(e -> applyAndMaybeClose(true)); // ESC cancels getRootPane().registerKeyboardAction(e -> { - confirmed = false; dispose(); }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW); getRootPane().setDefaultButton(okButton); } - public String getPattern() { - return confirmed ? patternField.getText().trim() : null; + private void applyAndMaybeClose(boolean closeDialog) { + String pattern = patternField.getText(); + if (pattern != null) { + pattern = pattern.trim(); + } + if (pattern != null && !pattern.isEmpty() && applyHandler != null) { + applyHandler.accept(pattern); + } + if (closeDialog) { + dispose(); + return; + } + patternField.requestFocusInWindow(); + patternField.selectAll(); } @Override