diff --git a/src/preload/windows-titlebar.ts b/src/preload/windows-titlebar.ts index 92990375..a1482f33 100644 --- a/src/preload/windows-titlebar.ts +++ b/src/preload/windows-titlebar.ts @@ -133,6 +133,15 @@ function installLayout(document: Document): void { body.dsh-desktop-windows-titlebar-layout [data-slot="conversation.session.header"] > header { padding-right: calc(var(${CAPTION_WIDTH_PROPERTY}, 140px) + 52px) !important; } + body.dsh-desktop-windows-titlebar-layout button, + body.dsh-desktop-windows-titlebar-layout a, + body.dsh-desktop-windows-titlebar-layout input, + body.dsh-desktop-windows-titlebar-layout select, + body.dsh-desktop-windows-titlebar-layout textarea, + body.dsh-desktop-windows-titlebar-layout [role="button"], + body.dsh-desktop-windows-titlebar-layout [data-dsh-no-drag] { + -webkit-app-region: no-drag !important; + } ` document.head.appendChild(style) } @@ -142,22 +151,22 @@ function trackSidebarLayout(document: Document): void { const resizeObserver = new ResizeObserver(() => updateSidebarWidth()) const updateSidebarWidth = (): void => { - if (!observedSidebarColumn) return - const width = observedSidebarColumn.getBoundingClientRect().width - if (width > 0) { - document.documentElement.style.setProperty(SIDEBAR_WIDTH_PROPERTY, `${width}px`) + if (!observedSidebarColumn) { + document.documentElement.style.setProperty(SIDEBAR_WIDTH_PROPERTY, '0px') + return } + const width = observedSidebarColumn.getBoundingClientRect().width + document.documentElement.style.setProperty(SIDEBAR_WIDTH_PROPERTY, `${Math.max(0, width)}px`) } const sync = (): void => { const sidebarRoot = document.querySelector('[data-dsh-sidebar-root]') const sidebarColumn = sidebarRoot?.parentElement ?? null - if (!sidebarColumn) return if (sidebarColumn !== observedSidebarColumn) { if (observedSidebarColumn) resizeObserver.unobserve(observedSidebarColumn) observedSidebarColumn = sidebarColumn - resizeObserver.observe(sidebarColumn) + if (sidebarColumn) resizeObserver.observe(sidebarColumn) } updateSidebarWidth() } @@ -361,10 +370,10 @@ const titlebarStyles = ` content: ""; position: absolute; top: 0; + left: 0; right: 44px; height: ${WINDOWS_TITLEBAR_HEIGHT}px; - left: var(${SIDEBAR_WIDTH_PROPERTY}, 280px); - pointer-events: auto; + pointer-events: none; -webkit-app-region: drag; } .menuButton { diff --git a/test/windows-titlebar.test.ts b/test/windows-titlebar.test.ts index b1f01981..9937ab35 100644 --- a/test/windows-titlebar.test.ts +++ b/test/windows-titlebar.test.ts @@ -35,12 +35,11 @@ describe('Windows titlebar menu', () => { expect(preload).toContain('.safeArea::before') expect(preload).toContain('height: ${WINDOWS_TITLEBAR_HEIGHT}px') expect(preload).toContain('body.dsh-desktop-windows-titlebar-layout > #root') - expect(preload).toContain('-webkit-app-region: drag') - expect(preload).toContain('-webkit-app-region: no-drag') - expect(preload).toContain('env(titlebar-area-width') - expect(preload).toContain("const CAPTION_WIDTH_PROPERTY = '--dsh-desktop-windows-caption-width'") - expect(preload).toContain('[data-slot="conversation.session.header"] > header') - expect(preload).toContain('padding-right: calc(var(${CAPTION_WIDTH_PROPERTY}, 140px) + 52px) !important') + expect(preload).toContain('left: 0') + expect(preload).toContain('pointer-events: none') + expect(preload).toContain('body.dsh-desktop-windows-titlebar-layout button') + expect(preload).toContain('-webkit-app-region: no-drag !important') + expect(preload).toContain("document.documentElement.style.setProperty(SIDEBAR_WIDTH_PROPERTY, '0px')") }) it('accepts only the fixed menu command allowlist', async () => {