diff --git a/website/src/lib/components/Menu.svelte b/website/src/lib/components/Menu.svelte
index c89d139b6..224c75c81 100644
--- a/website/src/lib/components/Menu.svelte
+++ b/website/src/lib/components/Menu.svelte
@@ -354,12 +354,17 @@
{/if}
-
- engine.delete()} disabled={selectionCount == 0}>
-
- {i18n._('menu.delete')}
-
-
+ {#if !desktop}
+
+ engine.delete()}
+ disabled={selectionCount == 0}
+ >
+
+ {i18n._('menu.delete')}
+
+
+ {/if}
diff --git a/website/src/lib/components/file-list/FileListNodeLabel.svelte b/website/src/lib/components/file-list/FileListNodeLabel.svelte
index 9983d0192..5193890e1 100644
--- a/website/src/lib/components/file-list/FileListNodeLabel.svelte
+++ b/website/src/lib/components/file-list/FileListNodeLabel.svelte
@@ -17,6 +17,7 @@
Maximize,
Scissors,
FileStack,
+ FileX,
} from '@lucide/svelte';
import { getContext } from 'svelte';
import { i18n } from '$lib/i18n/i18n.svelte';
@@ -34,10 +35,12 @@
isInClipboard,
isSelected,
selectedElementIds,
+ selectedFileIds,
selectionSize,
type FileTreeNode,
} from '$lib/engine/selection-helpers';
import { boundsManager } from '$lib/state/bounds';
+ import { closeFiles } from '$lib/actions/file-actions';
import { waypointPopup } from '$lib/components/map/gpx-layer/gpx-layer-popup';
let {
@@ -92,6 +95,9 @@
selectedElementIds($selection)[0]?.ids[0] === elementId(node)
);
+ // the desktop app: the files are linked to the file system, they are closed rather than deleted
+ let desktop = $derived($workspace !== undefined);
+
// the file is not the one on the disk (the desktop app)
let unsaved = $derived(node.type === 'file' && $workspace?.files[node.fileId]?.dirty === true);
let hidden = $derived(isHidden(fileState, elementId(node)));
@@ -296,10 +302,18 @@
{/if}
- engine.delete()}>
-
- {i18n._('menu.delete')}
-
-
+ {#if desktop && node.type === 'file'}
+ closeFiles(selectedFileIds($selection))}>
+
+ {i18n._('menu.close')}
+
+
+ {:else}
+ engine.delete()}>
+
+ {i18n._('menu.delete')}
+
+
+ {/if}