Files
buzz/desktop/src/shared/ui/StartupWindowDragRegion.tsx
klopez4212 6b2147a5d1 fix(desktop): honor macOS title-bar double-click preference (#1674)
Signed-off-by: npub13fn4ahfnvaa2qwylvegdgeajqs0mph6v4qsw4jcqnw4mjh3hzh2quuucm5 <8a675edd33677aa0389f6650d467b2041fb0df4ca820eacb009babb95e3715d4@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub13fn4ahfnvaa2qwylvegdgeajqs0mph6v4qsw4jcqnw4mjh3hzh2quuucm5 <8a675edd33677aa0389f6650d467b2041fb0df4ca820eacb009babb95e3715d4@sprout-oss.stage.blox.sqprod.co>
2026-07-09 17:27:08 +01:00

73 lines
2.3 KiB
TypeScript

import { getCurrentWindow } from "@tauri-apps/api/window";
import * as React from "react";
import { performTitleBarDoubleClickAction } from "@/shared/lib/titleBarActions";
const WINDOW_DRAG_HANDLE_HEIGHT = 44;
const WINDOW_DRAG_INTERACTIVE_SELECTOR =
'button, a, input, textarea, select, label, summary, [role="button"], [role="link"], [role="menuitem"], [role="tab"], [role="checkbox"], [role="radio"], [role="switch"], [role="option"], [contenteditable="true"], [tabindex]:not([tabindex="-1"])';
function isWindowDragHandleEvent(event: MouseEvent | PointerEvent) {
if (event.clientY > WINDOW_DRAG_HANDLE_HEIGHT) {
return false;
}
const target = event.target;
return !(
target instanceof Element &&
target.closest(WINDOW_DRAG_INTERACTIVE_SELECTOR)
);
}
export function StartupWindowDragRegion() {
React.useEffect(() => {
function handlePointerDown(event: PointerEvent) {
if (event.button !== 0 || event.detail > 1) {
return;
}
if (!isWindowDragHandleEvent(event)) {
return;
}
void getCurrentWindow().startDragging();
}
function stopTauriDragRegionHandler(event: MouseEvent) {
if (event.button !== 0 || !isWindowDragHandleEvent(event)) {
return;
}
event.stopImmediatePropagation();
}
function handleDoubleClick(event: MouseEvent) {
if (event.button !== 0 || !isWindowDragHandleEvent(event)) {
return;
}
event.preventDefault();
event.stopImmediatePropagation();
void performTitleBarDoubleClickAction();
}
window.addEventListener("pointerdown", handlePointerDown, true);
window.addEventListener("mousedown", stopTauriDragRegionHandler, true);
window.addEventListener("mouseup", stopTauriDragRegionHandler, true);
window.addEventListener("dblclick", handleDoubleClick, true);
return () => {
window.removeEventListener("pointerdown", handlePointerDown, true);
window.removeEventListener("mousedown", stopTauriDragRegionHandler, true);
window.removeEventListener("mouseup", stopTauriDragRegionHandler, true);
window.removeEventListener("dblclick", handleDoubleClick, true);
};
}, []);
return (
<div
aria-hidden="true"
className="pointer-events-none fixed inset-x-0 top-0 z-20 h-10 select-none"
/>
);
}