From 1473820cc4676317c7caa8b2974fd9a343665a79 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Thu, 19 Feb 2026 13:03:15 +0700 Subject: [PATCH] app: make draft screen unhandled areas draggable in Tauri --- .../src/screens/agent/draft-agent-screen.tsx | 4 +++- packages/app/src/utils/tauri-window.ts | 17 +++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/app/src/screens/agent/draft-agent-screen.tsx b/packages/app/src/screens/agent/draft-agent-screen.tsx index 0dbcba192..14388cd29 100644 --- a/packages/app/src/screens/agent/draft-agent-screen.tsx +++ b/packages/app/src/screens/agent/draft-agent-screen.tsx @@ -49,6 +49,7 @@ import type { } from '@server/server/agent/agent-sdk-types' import { AGENT_PROVIDER_DEFINITIONS } from '@server/server/agent/provider-manifest' import { buildHostAgentDetailRoute } from '@/utils/host-routes' +import { useTauriDragHandlers } from '@/utils/tauri-window' const DRAFT_AGENT_ID = '__new_agent__' const EMPTY_PENDING_PERMISSIONS = new Map() @@ -237,6 +238,7 @@ function DraftAgentScreenContent({ const activateExplorerTabForCheckout = usePanelStore( (state) => state.activateExplorerTabForCheckout ) + const tauriDragHandlers = useTauriDragHandlers() const isExplorerOpen = isMobile ? mobileView === 'file-explorer' : desktopFileExplorerOpen const [worktreeMode, setWorktreeMode] = useState<'none' | 'create' | 'attach'>('none') @@ -1112,7 +1114,7 @@ function DraftAgentScreenContent({ const explorerServerId = draftExplorerCheckout?.serverId ?? null const explorerIsGit = draftExplorerCheckout?.isGit ?? false const mainContent = ( - + { // Only handle primary button, ignore if clicking on interactive elements. // Tauri docs recommend using `e.detail` on mousedown for double-click maximize. + if (e.defaultPrevented) return; if (typeof e.buttons === "number" ? e.buttons !== 1 : e.button !== 0) return; - const target = e.target as HTMLElement; - if (target.closest("button, a, input, [role='button']")) return; + const target = e.target instanceof Element ? e.target : null; + if (target?.closest(NON_DRAGGABLE_SELECTOR)) return; // Prevent text selection when dragging e.preventDefault();