diff --git a/src/renderer/src/components/floating-terminal/FloatingTerminalPanel.tsx b/src/renderer/src/components/floating-terminal/FloatingTerminalPanel.tsx index 0d0ffe18c..be9bfa9e2 100644 --- a/src/renderer/src/components/floating-terminal/FloatingTerminalPanel.tsx +++ b/src/renderer/src/components/floating-terminal/FloatingTerminalPanel.tsx @@ -30,6 +30,13 @@ type FloatingTerminalPanelProps = { onOpenChange: (open: boolean) => void } +const FLOATING_TERMINAL_NO_DRAG_SELECTOR = + 'button,input,textarea,select,[role="menuitem"],[data-testid="sortable-tab"],[data-floating-terminal-no-drag]' + +function isFloatingTerminalDragTarget(target: EventTarget): boolean { + return !(target instanceof HTMLElement && target.closest(FLOATING_TERMINAL_NO_DRAG_SELECTOR)) +} + export function FloatingTerminalPanel({ open, onOpenChange @@ -211,12 +218,7 @@ export function FloatingTerminalPanel({ return } const target = event.target - if ( - target instanceof HTMLElement && - target.closest( - 'button,input,textarea,select,[role="menuitem"],[data-testid="sortable-tab"],[data-floating-terminal-no-drag]' - ) - ) { + if (!isFloatingTerminalDragTarget(target)) { return } dragRef.current = { @@ -249,6 +251,14 @@ export function FloatingTerminalPanel({ } } + const handleTitlebarDoubleClick = (event: React.MouseEvent): void => { + if (event.button !== 0 || !isFloatingTerminalDragTarget(event.target)) { + return + } + event.preventDefault() + toggleMaximized() + } + const dismissOrchestrationSetup = useCallback(() => { localStorage.setItem(ORCHESTRATION_SETUP_DISMISSED_STORAGE_KEY, '1') setShowOrchestrationSetup(false) @@ -285,6 +295,7 @@ export function FloatingTerminalPanel({ onPointerMove={handleDragMove} onPointerUp={handleDragEnd} onPointerCancel={handleDragEnd} + onDoubleClick={handleTitlebarDoubleClick} >