diff --git a/frontend/src/components/panels/editor/FileEditor.tsx b/frontend/src/components/panels/editor/FileEditor.tsx index 02acdc1d..864a4993 100644 --- a/frontend/src/components/panels/editor/FileEditor.tsx +++ b/frontend/src/components/panels/editor/FileEditor.tsx @@ -312,15 +312,14 @@ function HeadlessFileTree({ setContextMenu(null); }, [contextMenu, sessionId]); - // Delete handler - const handleDelete = useCallback(async (file: FileItem) => { + const handleDelete = useCallback(async (file: FileItem, options: { skipConfirm?: boolean } = {}) => { const files = getSelectedFilesForAction(file); const confirmMessage = files.length > 1 ? `Move ${files.length} items to trash?` : files[0]?.isDirectory ? `Move folder "${files[0].name}" and all its contents to trash?` : `Move file "${files[0]?.name}" to trash?`; - if (!confirm(confirmMessage)) return; + if (!options.skipConfirm && !confirm(confirmMessage)) return; try { for (const target of files) { @@ -328,6 +327,7 @@ function HeadlessFileTree({ sessionId, filePath: target.path, useTrash: true, + allowPermanentFallback: !options.skipConfirm, }); if (!result.success) { @@ -725,7 +725,7 @@ function HeadlessFileTree({ const item = tree.getItemInstance(selectedItems[0])?.getItemData(); if (item) { e.preventDefault(); - handleDelete(item); + handleDelete(item, { skipConfirm: isMac() && e.metaKey }); } } if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 'c' && selectedItems.length > 0) { diff --git a/main/src/ipc/file.ts b/main/src/ipc/file.ts index bb3d746e..54130afb 100644 --- a/main/src/ipc/file.ts +++ b/main/src/ipc/file.ts @@ -55,6 +55,7 @@ interface FileDeleteRequest { sessionId: string; filePath: string; useTrash?: boolean; + allowPermanentFallback?: boolean; } interface FileRenameRequest { @@ -722,6 +723,12 @@ export function registerFileHandlers(ipcMain: IpcMain, services: AppServices): v await shell.trashItem(fullPath); return { success: true }; } catch (trashError) { + if (request.allowPermanentFallback === false) { + return { + success: false, + error: trashError instanceof Error ? trashError.message : 'Failed to move item to trash' + }; + } console.warn('Failed to move item to trash, permanently deleting instead:', trashError); } }