From 0a67ead0848322c6c779f13caced1e1eda6b6eda Mon Sep 17 00:00:00 2001 From: Radek Davidek Date: Tue, 9 Jun 2026 14:13:57 +0200 Subject: [PATCH] fixed background reload with inline rename --- .../cz/kamma/kfmanager/ui/FilePanelTab.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/main/java/cz/kamma/kfmanager/ui/FilePanelTab.java b/src/main/java/cz/kamma/kfmanager/ui/FilePanelTab.java index a06d87b..de47f35 100644 --- a/src/main/java/cz/kamma/kfmanager/ui/FilePanelTab.java +++ b/src/main/java/cz/kamma/kfmanager/ui/FilePanelTab.java @@ -91,6 +91,8 @@ public class FilePanelTab extends JPanel { private File archiveReturnDirectory = null; private Point archiveReturnViewPosition = null; private boolean inlineRenameActive = false; + private boolean refreshDeferredWhileInlineRename = false; + private boolean deferredRefreshRequestFocus = false; private boolean active = false; private final Map changeTimestamps = new HashMap<>(); private static final long CHANGE_HIGHLIGHT_DURATION = 500; // 0.5 seconds per item @@ -237,6 +239,24 @@ public class FilePanelTab extends JPanel { } } + public boolean isInlineRenameInProgress() { + return inlineRenameActive || (fileTable != null && fileTable.isEditing()); + } + + private void flushDeferredRefreshAfterInlineRename() { + if (!refreshDeferredWhileInlineRename) return; + + final boolean requestFocus = deferredRefreshRequestFocus; + refreshDeferredWhileInlineRename = false; + deferredRefreshRequestFocus = false; + + SwingUtilities.invokeLater(() -> { + if (!isInlineRenameInProgress()) { + refresh(requestFocus); + } + }); + } + /** * Ensure that column renderers are attached. Useful when the tab was just added to a container * and the ColumnModel may not yet be in its final state. @@ -494,12 +514,14 @@ public class FilePanelTab extends JPanel { public void editingStopped(javax.swing.event.ChangeEvent e) { super.editingStopped(e); inlineRenameActive = false; + flushDeferredRefreshAfterInlineRename(); } @Override public void editingCanceled(javax.swing.event.ChangeEvent e) { super.editingCanceled(e); inlineRenameActive = false; + flushDeferredRefreshAfterInlineRename(); } @Override @@ -1717,6 +1739,12 @@ public class FilePanelTab extends JPanel { * Refresh the current directory while attempting to preserve selection and focus. */ public void refresh(boolean requestFocus) { + if (isInlineRenameInProgress()) { + refreshDeferredWhileInlineRename = true; + deferredRefreshRequestFocus |= requestFocus; + return; + } + if (searchModeActive) { // In search results mode, refresh means checking if items still exist List itemsToRemove = new ArrayList<>();