diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/Terminal.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/Terminal.tsx index f27e06fbc20..e0bd9e04748 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/Terminal.tsx +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/ContentView/TabsContent/Terminal/Terminal.tsx @@ -283,9 +283,17 @@ export const Terminal = ({ paneId, tabId, workspaceId }: TerminalProps) => { const handleDrop = (event: React.DragEvent) => { event.preventDefault(); const files = Array.from(event.dataTransfer.files); - if (files.length === 0) return; - const paths = files.map((file) => window.webUtils.getPathForFile(file)); - const text = shellEscapePaths(paths); + let text: string; + if (files.length > 0) { + // Native file drop (from Finder, etc.) + const paths = files.map((file) => window.webUtils.getPathForFile(file)); + text = shellEscapePaths(paths); + } else { + // Internal drag (from file tree) - path is in text/plain + const plainText = event.dataTransfer.getData("text/plain"); + if (!plainText) return; + text = shellEscapePaths([plainText]); + } if (!isExitedRef.current) { writeRef.current({ paneId, data: text }); } diff --git a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/FileItem/FileItem.tsx b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/FileItem/FileItem.tsx index dcca91b487f..7eae4406ec3 100644 --- a/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/FileItem/FileItem.tsx +++ b/apps/desktop/src/renderer/screens/main/components/WorkspaceView/RightSidebar/ChangesView/components/FileItem/FileItem.tsx @@ -29,7 +29,7 @@ import { } from "react-icons/lu"; import type { ChangeCategory, ChangedFile } from "shared/changes-types"; import { createFileKey, useScrollContext } from "../../../../ChangesContent"; -import { usePathActions } from "../../hooks"; +import { useFileDrag, usePathActions } from "../../hooks"; import { getStatusColor, getStatusIndicator } from "../../utils"; interface FileItemProps { @@ -106,6 +106,8 @@ export function FileItem({ cwd: worktreePath, }); + const fileDragProps = useFileDrag({ absolutePath }); + const handleClick = useCallback(() => { if (clickTimeoutRef.current) { clearTimeout(clickTimeoutRef.current); @@ -161,6 +163,7 @@ export function FileItem({ const fileContent = (