From 17cdea58573fd83e168013c7eed3fe94dfd1b313 Mon Sep 17 00:00:00 2001 From: Radek Davidek Date: Tue, 20 Jan 2026 17:10:14 +0100 Subject: [PATCH] UI fixes for deleting --- .../cz/kamma/kfmanager/ui/FilePanelTab.java | 18 +++++++++++++++++- .../java/cz/kamma/kfmanager/ui/MainWindow.java | 15 +++++++++++---- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/main/java/cz/kamma/kfmanager/ui/FilePanelTab.java b/src/main/java/cz/kamma/kfmanager/ui/FilePanelTab.java index 7a3a5ab..b46f0f3 100644 --- a/src/main/java/cz/kamma/kfmanager/ui/FilePanelTab.java +++ b/src/main/java/cz/kamma/kfmanager/ui/FilePanelTab.java @@ -1485,20 +1485,36 @@ public class FilePanelTab extends JPanel { }); SwingUtilities.invokeLater(() -> { progressDialog.dispose(); + + // Return focus to the application + Window win = SwingUtilities.getWindowAncestor(FilePanelTab.this); + if (win != null) { + win.toFront(); + } + loadDirectory(getCurrentDirectory(), false); // Use another invokeLater to ensure BRIEF mode layout is updated SwingUtilities.invokeLater(() -> { - selectItemByIndex(rememberedIndex - 1); + selectItemByIndex(rememberedIndex); + fileTable.requestFocusInWindow(); }); }); } catch (Exception ex) { SwingUtilities.invokeLater(() -> { progressDialog.dispose(); + // Return focus even on error + Window win = SwingUtilities.getWindowAncestor(FilePanelTab.this); + if (win != null) { + win.toFront(); + } JOptionPane.showMessageDialog(FilePanelTab.this, "Delete failed: " + ex.getMessage()); + fileTable.requestFocusInWindow(); }); } }).start(); progressDialog.setVisible(true); + } else { + fileTable.requestFocusInWindow(); } }); menu.add(deleteItem); diff --git a/src/main/java/cz/kamma/kfmanager/ui/MainWindow.java b/src/main/java/cz/kamma/kfmanager/ui/MainWindow.java index 621c65e..d310085 100644 --- a/src/main/java/cz/kamma/kfmanager/ui/MainWindow.java +++ b/src/main/java/cz/kamma/kfmanager/ui/MainWindow.java @@ -1432,6 +1432,11 @@ public class MainWindow extends JFrame { }); dialog.setVisible(true); + + // Ensure focus returns to main window after dialog + this.toFront(); + requestFocusInActivePanel(); + Object selectedValue = pane.getValue(); if (selectedValue == null) return 2; // Cancel if (selectedValue.equals(options[0])) return 0; // OK @@ -1483,7 +1488,7 @@ public class MainWindow extends JFrame { if (activePanel != null && activePanel.getCurrentTab() != null) { // Use another invokeLater to ensure BRIEF mode layout is updated SwingUtilities.invokeLater(() -> { - activePanel.getCurrentTab().selectItemByIndex(rememberedIndex - 1); + activePanel.getCurrentTab().selectItemByIndex(rememberedIndex); }); } } catch (Exception ignore) {} @@ -2202,6 +2207,10 @@ public class MainWindow extends JFrame { SwingUtilities.invokeLater(() -> { progressDialog.dispose(); + + // Force the window to front and request focus after modal dialog + MainWindow.this.toFront(); + for (FilePanel panel : panelsToRefresh) { if (panel.getCurrentDirectory() != null) { panel.loadDirectory(panel.getCurrentDirectory(), false, false); @@ -2212,9 +2221,7 @@ public class MainWindow extends JFrame { SwingUtilities.invokeLater(postTask); } - if (activePanel != null && activePanel.getFileTable() != null) { - activePanel.getFileTable().requestFocusInWindow(); - } + requestFocusInActivePanel(); if (callback.isCancelled()) { JOptionPane.showMessageDialog(MainWindow.this, "Operation was cancelled by user.");