From 302676bb7707818de553a3288996e0aa43da5de4 Mon Sep 17 00:00:00 2001 From: TARO-gh <131171129+TARO-gh@users.noreply.github.com> Date: Fri, 3 Apr 2026 15:35:29 +0900 Subject: [PATCH] fix(hud-overlay): ignore duplicate drag mousemove events to stop hold-drift --- electron/windows.ts | 8 ++++++++ src/components/launch/LaunchWindow.tsx | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/electron/windows.ts b/electron/windows.ts index 1c027ed7..056541cb 100644 --- a/electron/windows.ts +++ b/electron/windows.ts @@ -183,6 +183,7 @@ ipcMain.on("hud-overlay-set-ignore-mouse", (_event, ignore: boolean) => { }); let hudDragOffset: { x: number; y: number } | null = null; +let hudDragLastCursor: { x: number; y: number } | null = null; ipcMain.on("hud-overlay-drag", (_event, phase: string, screenX: number, screenY: number) => { if (!hudOverlayWindow || hudOverlayWindow.isDestroyed()) return; @@ -190,13 +191,20 @@ ipcMain.on("hud-overlay-drag", (_event, phase: string, screenX: number, screenY: if (phase === "start") { const bounds = hudOverlayWindow.getBounds(); hudDragOffset = { x: screenX - bounds.x, y: screenY - bounds.y }; + hudDragLastCursor = { x: screenX, y: screenY }; } else if (phase === "move" && hudDragOffset) { + if (hudDragLastCursor && hudDragLastCursor.x === screenX && hudDragLastCursor.y === screenY) { + return; + } + + hudDragLastCursor = { x: screenX, y: screenY }; hudOverlayWindow.setPosition( Math.round(screenX - hudDragOffset.x), Math.round(screenY - hudDragOffset.y), ); } else if (phase === "end") { hudDragOffset = null; + hudDragLastCursor = null; } }); diff --git a/src/components/launch/LaunchWindow.tsx b/src/components/launch/LaunchWindow.tsx index 46bef471..9ed4daad 100644 --- a/src/components/launch/LaunchWindow.tsx +++ b/src/components/launch/LaunchWindow.tsx @@ -1178,7 +1178,14 @@ export function LaunchWindow() { e.preventDefault(); isDraggingRef.current = true; window.electronAPI?.hudOverlayDrag?.("start", e.screenX, e.screenY); + let lastScreenX = e.screenX; + let lastScreenY = e.screenY; const handleMove = (ev: MouseEvent) => { + if (ev.screenX === lastScreenX && ev.screenY === lastScreenY) { + return; + } + lastScreenX = ev.screenX; + lastScreenY = ev.screenY; window.electronAPI?.hudOverlayDrag?.("move", ev.screenX, ev.screenY); }; const handleUp = () => {