From c45a5dc517ea38818dc173df468f21b4d03e135e Mon Sep 17 00:00:00 2001 From: Simone <185146821+Lucenx9@users.noreply.github.com> Date: Fri, 4 Sep 2026 20:08:36 +0200 Subject: [PATCH 1/2] fix(desktop): keep preview picking active across subframe navigation --- apps/desktop/src/preview/Manager.test.ts | 7 ++++++- apps/desktop/src/preview/Manager.ts | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/desktop/src/preview/Manager.test.ts b/apps/desktop/src/preview/Manager.test.ts index a7b3afabd3c3..25c828700695 100644 --- a/apps/desktop/src/preview/Manager.test.ts +++ b/apps/desktop/src/preview/Manager.test.ts @@ -3167,7 +3167,10 @@ describe("PreviewManager", () => { listeners.set(event, listener); }), once: vi.fn((event: string, listener: (...args: unknown[]) => void) => { - listeners.set(event, listener); + listeners.set(event, (...args) => { + listeners.delete(event); + listener(...args); + }); }), off: vi.fn(), ipc: { on: vi.fn(), off: vi.fn(), removeListener: vi.fn() }, @@ -3193,6 +3196,8 @@ describe("PreviewManager", () => { expect(pick.pollUnsafe()).toBeUndefined(); listeners.get("did-start-navigation")?.({}, "https://example.com/next", false, true); + yield* Effect.yieldNow; + expect(pick.pollUnsafe()).toBeDefined(); expect(yield* Fiber.join(pick)).toBeNull(); }), ), diff --git a/apps/desktop/src/preview/Manager.ts b/apps/desktop/src/preview/Manager.ts index 324b92034f36..aa9b366421fb 100644 --- a/apps/desktop/src/preview/Manager.ts +++ b/apps/desktop/src/preview/Manager.ts @@ -2529,7 +2529,7 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function yield* attempt({ operation: "pickElement.register", tabId, webContentsId: wc.id }, () => { wc.ipc.on(ELEMENT_PICKED_CHANNEL, onMessage); wc.once("destroyed", onDestroyed); - wc.once("did-start-navigation", onNavigated); + wc.on("did-start-navigation", onNavigated); if (!wc.isFocused()) wc.focus(); wc.send(START_PICK_CHANNEL, annotationTheme); }); From c482cbd2cfe2e52f1bbdb4efcaa3c30be2bf6ff5 Mon Sep 17 00:00:00 2001 From: Simone <185146821+Lucenx9@users.noreply.github.com> Date: Fri, 4 Sep 2026 20:21:48 +0200 Subject: [PATCH 2/2] fix(desktop): read current navigation event details --- apps/desktop/src/preview/Manager.test.ts | 14 ++++++++++++-- apps/desktop/src/preview/Manager.ts | 7 ++----- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/apps/desktop/src/preview/Manager.test.ts b/apps/desktop/src/preview/Manager.test.ts index 25c828700695..cc21fbb4388f 100644 --- a/apps/desktop/src/preview/Manager.test.ts +++ b/apps/desktop/src/preview/Manager.test.ts @@ -3191,11 +3191,21 @@ describe("PreviewManager", () => { const pick = yield* manager.pickElement("tab_1").pipe(Effect.forkChild); yield* Effect.yieldNow; - listeners.get("did-start-navigation")?.({}, "about:blank", false, false); + listeners.get("did-start-navigation")?.({ + url: "about:blank", + isSameDocument: false, + isMainFrame: false, + frame: null, + }); yield* Effect.yieldNow; expect(pick.pollUnsafe()).toBeUndefined(); - listeners.get("did-start-navigation")?.({}, "https://example.com/next", false, true); + listeners.get("did-start-navigation")?.({ + url: "https://example.com/next", + isSameDocument: false, + isMainFrame: true, + frame: null, + }); yield* Effect.yieldNow; expect(pick.pollUnsafe()).toBeDefined(); expect(yield* Fiber.join(pick)).toBeNull(); diff --git a/apps/desktop/src/preview/Manager.ts b/apps/desktop/src/preview/Manager.ts index aa9b366421fb..b0020f20ca62 100644 --- a/apps/desktop/src/preview/Manager.ts +++ b/apps/desktop/src/preview/Manager.ts @@ -2503,12 +2503,9 @@ const makeNativeOperations = Effect.fn("PreviewManager.makeOperations")(function }; const onDestroyed = () => settle(null); const onNavigated = ( - _event: Electron.Event, - _url: string, - _isInPlace: boolean, - isMainFrame: boolean, + event: Electron.Event, ) => { - if (isMainFrame) settle(null); + if (event.isMainFrame) settle(null); }; const registerPickElement = Effect.fn("PreviewManager.registerPickElement")(function* () { // Two picks on one tab can overlap. Swap this session in and cancel