diff --git a/studio/src/ui/popoverMenus/PopoverManager.js b/studio/src/ui/popoverMenus/PopoverManager.js index 7e66c050f..bde6ac5e6 100644 --- a/studio/src/ui/popoverMenus/PopoverManager.js +++ b/studio/src/ui/popoverMenus/PopoverManager.js @@ -101,9 +101,9 @@ export class PopoverManager { const needsListener = Boolean(this.#activePopovers.length); if (needsListener == this.#hasBodyClickListener) return; if (needsListener) { - document.body.addEventListener("click", this.#onBodyClick); + document.body.addEventListener("pointerdown", this.#onBodyClick); } else { - document.body.removeEventListener("click", this.#onBodyClick); + document.body.removeEventListener("pointerdown", this.#onBodyClick); } this.#hasBodyClickListener = needsListener; } @@ -122,6 +122,8 @@ export class PopoverManager { return; } + e.preventDefault(); + this.#activePopovers.forEach(p => { p.close(); }); diff --git a/test/unit/studio/src/ui/popoverMenus/PopoverManager.test.js b/test/unit/studio/src/ui/popoverMenus/PopoverManager.test.js index 442887de3..27ae61a93 100644 --- a/test/unit/studio/src/ui/popoverMenus/PopoverManager.test.js +++ b/test/unit/studio/src/ui/popoverMenus/PopoverManager.test.js @@ -34,13 +34,14 @@ Deno.test({ await waitForMicrotasks(); // Clicking the popover should not close it - const mouseEvent1 = new FakeMouseEvent("click"); + const mouseEvent1 = new FakeMouseEvent("pointerdown"); popover.el.dispatchEvent(mouseEvent1); + assertExists(manager.curtainEl.parentElement); assertStrictEquals(manager.getLastPopover(), popover); - // But clicking any other element should - const mouseEvent2 = new FakeMouseEvent("click"); + // But clicking any other element should close the popover and remove the curtain + const mouseEvent2 = new FakeMouseEvent("pointerdown"); document.body.dispatchEvent(mouseEvent2); assertEquals(manager.curtainEl.parentElement, null);