дзеркало
https://github.com/l0ng-ai/openidea.git
синхронізовано 2026-11-09 19:25:54 +02:00
fix(ui): start pointer drags only while the primary button is held (#1071)
On macOS, with an editable element focused and an input method active, WebKit can deliver a tap as pointerup then pointerdown, so drag trackers saw every later pointermove as a held button: one tap plus a pointer move started a phantom drag (file drag label, tab detach, tool window move) and the next tap dropped it. A drag now starts only from a move with the primary button down, a move without it cancels the press, and late button-less moves after a drag started are ignored so the drop is kept. Resizers, dialog drag/resize, pan and the review gutter end instead; the Project view also listens for pointercancel. Refs #760 Co-authored-by: ntbang0901 <[email protected]>
Цей коміт міститься в:
1 джерело
a35e434376
коміт
555226a9bf
15 files changed
+180
-9
No files matched your search
@@ -120,7 +120,7 @@ describe("Dialog chrome", () => {
|
||||
down(dialog.querySelector("div:last-child")!, 10);
|
||||
expect(dialog.style.translate).toBe("");
|
||||
down(handle, 10);
|
||||
fireEvent.pointerMove(window, { clientX: 200, clientY: 40 });
|
||||
fireEvent.pointerMove(window, { buttons: 1, clientX: 200, clientY: 40 });
|
||||
fireEvent.pointerUp(window);
|
||||
expect(dialog.style.translate).toBe("190px 30px");
|
||||
});
|
||||
@@ -134,12 +134,12 @@ describe("Dialog chrome", () => {
|
||||
const dialog = screen.getByRole("dialog");
|
||||
const bar = document.querySelector("[data-dialog-titlebar]") as HTMLElement;
|
||||
fireEvent.pointerDown(bar, { button: 0, clientX: 10, clientY: 10 });
|
||||
fireEvent.pointerMove(window, { clientX: 60, clientY: 40 });
|
||||
fireEvent.pointerMove(window, { buttons: 1, clientX: 60, clientY: 40 });
|
||||
fireEvent.pointerUp(window);
|
||||
expect(dialog.style.translate).toBe("80px 30px");
|
||||
// The close button never starts a drag.
|
||||
fireEvent.pointerDown(within(bar).getByRole("button", { name: "Close" }), { button: 0, clientX: 10, clientY: 10 });
|
||||
fireEvent.pointerMove(window, { clientX: 200, clientY: 40 });
|
||||
fireEvent.pointerMove(window, { buttons: 1, clientX: 200, clientY: 40 });
|
||||
fireEvent.pointerUp(window);
|
||||
expect(dialog.style.translate).toBe("80px 30px");
|
||||
});
|
||||
|
||||
Reference in new issue
Заблокувати користувача