From 803e1e707b7b044e39365d9d1d297ee6ca789d7b Mon Sep 17 00:00:00 2001 From: rdavidek Date: Sun, 18 Jan 2026 16:05:10 +0100 Subject: [PATCH] focus after dir creation --- .../java/cz/kamma/kfmanager/ui/FilePanel.java | 6 +++- .../cz/kamma/kfmanager/ui/FilePanelTab.java | 11 +++++-- .../cz/kamma/kfmanager/ui/MainWindow.java | 32 ++++++++++++++----- 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/src/main/java/cz/kamma/kfmanager/ui/FilePanel.java b/src/main/java/cz/kamma/kfmanager/ui/FilePanel.java index 0a144e2..58c8ec7 100644 --- a/src/main/java/cz/kamma/kfmanager/ui/FilePanel.java +++ b/src/main/java/cz/kamma/kfmanager/ui/FilePanel.java @@ -680,9 +680,13 @@ public class FilePanel extends JPanel { } public void loadDirectory(File directory, boolean requestFocus) { + loadDirectory(directory, true, requestFocus); + } + + public void loadDirectory(File directory, boolean autoSelectFirst, boolean requestFocus) { FilePanelTab tab = getCurrentTab(); if (tab != null) { - tab.loadDirectory(directory, true, requestFocus); + tab.loadDirectory(directory, autoSelectFirst, requestFocus); updatePathField(); } } diff --git a/src/main/java/cz/kamma/kfmanager/ui/FilePanelTab.java b/src/main/java/cz/kamma/kfmanager/ui/FilePanelTab.java index 16bfba6..796cdc3 100644 --- a/src/main/java/cz/kamma/kfmanager/ui/FilePanelTab.java +++ b/src/main/java/cz/kamma/kfmanager/ui/FilePanelTab.java @@ -1420,13 +1420,18 @@ public class FilePanelTab extends JPanel { private void selectItemByName(String name, boolean requestFocus) { if (viewMode == ViewMode.BRIEF) { + // Re-calculate layout if needed before searching to ensure current mapping + if (tableModel.items.size() > 0 && (tableModel.briefColumns == 0 || tableModel.briefRowsPerColumn == 0)) { + tableModel.calculateBriefLayout(); + } + for (int i = 0; i < tableModel.items.size(); i++) { FileItem item = tableModel.items.get(i); - if (item.getName().equals(name)) { + if (item != null && item.getName().equalsIgnoreCase(name)) { int column = i / tableModel.briefRowsPerColumn; int row = i % tableModel.briefRowsPerColumn; - if (column < tableModel.getColumnCount()) { + if (column < fileTable.getColumnCount()) { briefCurrentColumn = column; fileTable.setRowSelectionInterval(row, row); fileTable.scrollRectToVisible(fileTable.getCellRect(row, column, true)); @@ -1442,7 +1447,7 @@ public class FilePanelTab extends JPanel { } else { for (int i = 0; i < tableModel.getRowCount(); i++) { FileItem item = tableModel.getItem(i); - if (item != null && item.getName().equals(name)) { + if (item != null && item.getName().equalsIgnoreCase(name)) { fileTable.setRowSelectionInterval(i, i); fileTable.scrollRectToVisible(fileTable.getCellRect(i, 0, true)); if (requestFocus) { diff --git a/src/main/java/cz/kamma/kfmanager/ui/MainWindow.java b/src/main/java/cz/kamma/kfmanager/ui/MainWindow.java index 120ee81..d58278a 100644 --- a/src/main/java/cz/kamma/kfmanager/ui/MainWindow.java +++ b/src/main/java/cz/kamma/kfmanager/ui/MainWindow.java @@ -1430,14 +1430,19 @@ public class MainWindow extends JFrame { * Create a new directory */ private void createNewDirectory() { - String dirName = JOptionPane.showInputDialog(this, - "New directory name:", - "New directory"); - - if (dirName != null && !dirName.trim().isEmpty()) { + String dirNameInput = JOptionPane.showInputDialog(this, + "New directory name:", + "New directory"); + + if (dirNameInput != null && !dirNameInput.trim().isEmpty()) { + final String dirName = dirNameInput.trim(); performFileOperation((callback) -> { - FileOperations.createDirectory(activePanel.getCurrentDirectory(), dirName.trim()); - }, "Directory created", false, activePanel); + FileOperations.createDirectory(activePanel.getCurrentDirectory(), dirName); + }, "Directory created", false, () -> { + if (activePanel != null && activePanel.getCurrentTab() != null) { + activePanel.getCurrentTab().selectItem(dirName); + } + }, activePanel); } else { if (activePanel != null && activePanel.getFileTable() != null) { activePanel.getFileTable().requestFocusInWindow(); @@ -1847,6 +1852,13 @@ public class MainWindow extends JFrame { * Execute file operation with error handling */ private void performFileOperation(FileOperation operation, String successMessage, boolean showBytes, FilePanel... panelsToRefresh) { + performFileOperation(operation, successMessage, showBytes, null, panelsToRefresh); + } + + /** + * Execute file operation with error handling and a task to run after completion and refresh. + */ + private void performFileOperation(FileOperation operation, String successMessage, boolean showBytes, Runnable postTask, FilePanel... panelsToRefresh) { ProgressDialog progressDialog = new ProgressDialog(this, "File Operation"); progressDialog.setDisplayAsBytes(showBytes); @@ -1903,9 +1915,13 @@ public class MainWindow extends JFrame { progressDialog.dispose(); for (FilePanel panel : panelsToRefresh) { if (panel.getCurrentDirectory() != null) { - panel.loadDirectory(panel.getCurrentDirectory(), false); + panel.loadDirectory(panel.getCurrentDirectory(), false, false); } } + + if (postTask != null) { + SwingUtilities.invokeLater(postTask); + } if (activePanel != null && activePanel.getFileTable() != null) { activePanel.getFileTable().requestFocusInWindow();