diff --git a/products/desktop/apps/code/src/main/platform-adapters/electron-mission-control.test.ts b/products/desktop/apps/code/src/main/platform-adapters/electron-mission-control.test.ts index 5f043b517202..71162fd09031 100644 --- a/products/desktop/apps/code/src/main/platform-adapters/electron-mission-control.test.ts +++ b/products/desktop/apps/code/src/main/platform-adapters/electron-mission-control.test.ts @@ -127,6 +127,21 @@ describe("MissionControlService", () => { expect(service.getState().active).toBe(false); }); + it("refreshes immediately when the app regains focus", () => { + const { state, impl } = fakeSampler([MISSION_CONTROL_BACKING]); + sampler.create.mockReturnValue(impl); + const service = new MissionControlService(); + + service.arm(); + vi.advanceTimersByTime(250); + expect(service.getState().active).toBe(true); + + state.windows = []; + service.refresh(); + + expect(service.getState().active).toBe(false); + }); + it("never touches the window list while the setting is off", () => { settings.enabled = false; const { state, impl } = fakeSampler([MISSION_CONTROL_BACKING]); diff --git a/products/desktop/apps/code/src/main/platform-adapters/electron-mission-control.ts b/products/desktop/apps/code/src/main/platform-adapters/electron-mission-control.ts index 4ee9bf3d04a7..68c22e73b1f7 100644 --- a/products/desktop/apps/code/src/main/platform-adapters/electron-mission-control.ts +++ b/products/desktop/apps/code/src/main/platform-adapters/electron-mission-control.ts @@ -75,6 +75,11 @@ export class MissionControlService extends TypedEventEmitter this.poll(), POLL_INTERVAL_MS); } + refresh(): void { + if (!this.enabled || !this.resolveSampler()) return; + this.poll(); + } + disarm(): void { this.clearTimer(); this.setActive(false); diff --git a/products/desktop/apps/code/src/main/window.ts b/products/desktop/apps/code/src/main/window.ts index ef89e9d06a55..9d5af2f7852e 100644 --- a/products/desktop/apps/code/src/main/window.ts +++ b/products/desktop/apps/code/src/main/window.ts @@ -326,6 +326,7 @@ export function createWindow(): void { ); mainWindow.on("show", () => missionControl.arm()); mainWindow.on("restore", () => missionControl.arm()); + mainWindow.on("focus", () => missionControl.refresh()); mainWindow.on("hide", () => missionControl.disarm()); mainWindow.on("minimize", () => missionControl.disarm()); mainWindow.on("closed", () => missionControl.disarm());