fixed background reload with inline rename

This commit is contained in:
Radek Davidek 2026-06-09 14:13:57 +02:00
parent a132d33480
commit 0a67ead084

View File

@ -91,6 +91,8 @@ public class FilePanelTab extends JPanel {
private File archiveReturnDirectory = null; private File archiveReturnDirectory = null;
private Point archiveReturnViewPosition = null; private Point archiveReturnViewPosition = null;
private boolean inlineRenameActive = false; private boolean inlineRenameActive = false;
private boolean refreshDeferredWhileInlineRename = false;
private boolean deferredRefreshRequestFocus = false;
private boolean active = false; private boolean active = false;
private final Map<String, Long> changeTimestamps = new HashMap<>(); private final Map<String, Long> changeTimestamps = new HashMap<>();
private static final long CHANGE_HIGHLIGHT_DURATION = 500; // 0.5 seconds per item 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 * 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. * 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) { public void editingStopped(javax.swing.event.ChangeEvent e) {
super.editingStopped(e); super.editingStopped(e);
inlineRenameActive = false; inlineRenameActive = false;
flushDeferredRefreshAfterInlineRename();
} }
@Override @Override
public void editingCanceled(javax.swing.event.ChangeEvent e) { public void editingCanceled(javax.swing.event.ChangeEvent e) {
super.editingCanceled(e); super.editingCanceled(e);
inlineRenameActive = false; inlineRenameActive = false;
flushDeferredRefreshAfterInlineRename();
} }
@Override @Override
@ -1717,6 +1739,12 @@ public class FilePanelTab extends JPanel {
* Refresh the current directory while attempting to preserve selection and focus. * Refresh the current directory while attempting to preserve selection and focus.
*/ */
public void refresh(boolean requestFocus) { public void refresh(boolean requestFocus) {
if (isInlineRenameInProgress()) {
refreshDeferredWhileInlineRename = true;
deferredRefreshRequestFocus |= requestFocus;
return;
}
if (searchModeActive) { if (searchModeActive) {
// In search results mode, refresh means checking if items still exist // In search results mode, refresh means checking if items still exist
List<FileItem> itemsToRemove = new ArrayList<>(); List<FileItem> itemsToRemove = new ArrayList<>();