From 35857e816bab55bf455c7d9130ae06fa0a35acd9 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Wed, 4 Nov 2026 07:43:46 +0100 Subject: [PATCH] fix(app): retain window dragging in compact panes Keep the shared titlebar drag region when pane width replaces full desktop chrome. Cover two compact panes with both sidebars closed through the desktop host adapter. Co-authored-by: Elsa Granger --- ...t-terminal-shortcut-pane-placement.spec.ts | 31 +++++++++++++++++++ .../app/src/components/split-container.tsx | 1 + 2 files changed, 32 insertions(+) diff --git a/packages/app/e2e/browser/direct-terminal-shortcut-pane-placement.spec.ts b/packages/app/e2e/browser/direct-terminal-shortcut-pane-placement.spec.ts index fdcacbde2a..373459ef4c 100644 --- a/packages/app/e2e/browser/direct-terminal-shortcut-pane-placement.spec.ts +++ b/packages/app/e2e/browser/direct-terminal-shortcut-pane-placement.spec.ts @@ -1,3 +1,4 @@ +import { installLocalDesktopHost } from "../support/helpers/local-desktop-host"; import type { Locator, Page } from "@playwright/test"; import { expect, test } from "../support/fixtures"; import { runWorkspaceActionFromCommandCenter } from "../support/helpers/command-center-workspace-actions"; @@ -104,3 +105,33 @@ test("compact pane launch stays in its owning pane and pane controls remain reac await workspace.cleanup(); } }); + +async function expectPaneHasWindowDragSurface(pane: Locator) { + await expect + .poll(() => + pane.evaluate((element) => + Array.from(element.querySelectorAll("div")).some( + (node) => node.style.getPropertyValue("-webkit-app-region") === "drag", + ), + ), + ) + .toBe(true); +} + +test("compact desktop panes retain window dragging with both sidebars closed", async ({ page }) => { + const workspace = await seedWorkspace({ repoPrefix: "compact-pane-window-drag-" }); + try { + await installLocalDesktopHost(page, workspace.repoPath); + const { originalPane, otherPane } = await prepareUnfocusedCompactPane( + page, + workspace.workspaceId, + ); + await runWorkspaceActionFromCommandCenter(page, "Toggle left sidebar"); + await expect(originalPane.getByTestId("workspace-tab-switcher-trigger")).toBeVisible(); + await expect(otherPane.getByTestId("workspace-tab-switcher-trigger")).toBeVisible(); + await expectPaneHasWindowDragSurface(originalPane); + await expectPaneHasWindowDragSurface(otherPane); + } finally { + await workspace.cleanup(); + } +}); diff --git a/packages/app/src/components/split-container.tsx b/packages/app/src/components/split-container.tsx index dec4dde880..63a3144dda 100644 --- a/packages/app/src/components/split-container.tsx +++ b/packages/app/src/components/split-container.tsx @@ -772,6 +772,7 @@ const SplitPaneView = memo(function SplitPaneView({ const compactHeader = useMemo( () => ( + {renderCompactHeader(paneTabs, activeTabDescriptor?.key ?? "", compactHeaderActions)} ),