diff --git a/src/js/electron/windows/about-window.ts b/src/js/electron/windows/about-window.ts index cf2a580b8f..966e2222e5 100644 --- a/src/js/electron/windows/about-window.ts +++ b/src/js/electron/windows/about-window.ts @@ -2,7 +2,6 @@ import {WindowName} from "../windows/types" import {ZuiWindow} from "./zui-window" export class AboutWindow extends ZuiWindow { - persistable: false name: WindowName = "about" options = { width: 360, diff --git a/src/js/electron/windows/hidden-window.ts b/src/js/electron/windows/hidden-window.ts index c4e68f079d..b0794637b0 100644 --- a/src/js/electron/windows/hidden-window.ts +++ b/src/js/electron/windows/hidden-window.ts @@ -3,7 +3,6 @@ import {ZuiWindow} from "./zui-window" export class HiddenWindow extends ZuiWindow { name: WindowName = "hidden" - persistable = false options = { show: false, width: 0, diff --git a/src/js/electron/windows/search/search-window.ts b/src/js/electron/windows/search/search-window.ts index 02835f9b62..83c6ab1b30 100644 --- a/src/js/electron/windows/search/search-window.ts +++ b/src/js/electron/windows/search/search-window.ts @@ -5,6 +5,7 @@ import {ZuiWindow} from "../zui-window" import {createMenu, SearchAppMenuState} from "./app-menu" export class SearchWindow extends ZuiWindow { + persistable = true name: WindowName = "search" options: BrowserWindowConstructorOptions = { titleBarStyle: env.isMac ? "hidden" : undefined, diff --git a/src/js/electron/windows/window-manager.test.ts b/src/js/electron/windows/window-manager.test.ts index 9f4478ae6e..0d0445d862 100644 --- a/src/js/electron/windows/window-manager.test.ts +++ b/src/js/electron/windows/window-manager.test.ts @@ -4,6 +4,7 @@ import initIpcListeners from "src/js/initializers/initIpcListeners" import initTestStore from "src/test/unit/helpers/initTestStore" +import {encodeSessionState} from "../session-state" import {WindowManager} from "./window-manager" let store = initTestStore() @@ -29,3 +30,40 @@ test("serialize each window", async () => { }, ]) }) + +test("does not serialize detail hidden or about window", async () => { + const manager = new WindowManager() + await manager.create("detail") + await manager.create("hidden") + await manager.create("about") + expect(await manager.serialize()).toEqual([]) +}) + +test("brings up a search window if none exists", async () => { + const instance1 = new WindowManager() + await instance1.create("detail") + await instance1.create("hidden") + await instance1.create("about") + + const state = await instance1.serialize() + const session = encodeSessionState(state, null) + const instance2 = new WindowManager(session) + await instance2.init() + expect(instance2.all.map((w) => w.name)).toEqual(["search", "hidden"]) +}) + +test("does not brings up a search window if one exists", async () => { + const instance1 = new WindowManager() + await instance1.create("search") + await instance1.create("search") + + const state = await instance1.serialize() + const session = encodeSessionState(state, null) + const instance2 = new WindowManager(session) + await instance2.init() + expect(instance2.all.map((w) => w.name)).toEqual([ + "search", + "search", + "hidden", + ]) +}) diff --git a/src/js/electron/windows/window-manager.ts b/src/js/electron/windows/window-manager.ts index 123737339e..1d11b661b2 100644 --- a/src/js/electron/windows/window-manager.ts +++ b/src/js/electron/windows/window-manager.ts @@ -23,7 +23,7 @@ export class WindowManager extends EventEmitter { .map(deserializeWindow) await Promise.all(windows.map((w) => this.register(w))) } - if (this.count === 0) await this.create("search") + if (this.byName("search").length === 0) await this.create("search") if (this.byName("hidden").length === 0) await this.create("hidden") } diff --git a/src/js/electron/windows/zui-window.ts b/src/js/electron/windows/zui-window.ts index 22748fd71a..2a27c3d58e 100644 --- a/src/js/electron/windows/zui-window.ts +++ b/src/js/electron/windows/zui-window.ts @@ -17,7 +17,7 @@ export abstract class ZuiWindow { lastFocused: number state: State | undefined dimens: Dimens | null = null - persistable = true + persistable = false initialized = new TimedPromise(60_000) constructor(props: WindowProps = {}) { diff --git a/src/test/shared/__mocks__/electron.ts b/src/test/shared/__mocks__/electron.ts index df6bea769d..7affd5b668 100644 --- a/src/test/shared/__mocks__/electron.ts +++ b/src/test/shared/__mocks__/electron.ts @@ -28,6 +28,9 @@ export class BrowserWindow { isDestroyed = jest.fn(() => false) focus = jest.fn() visible = true + getBounds() { + return {x: 0, y: 0} + } center() {} setMenu() {} on() { @@ -108,27 +111,30 @@ export const Menu = { setApplicationMenu: jest.fn(), } +const display = { + id: 459098087, + bounds: {x: 0, y: 0, width: 1920, height: 1080}, + workArea: {x: 0, y: 23, width: 1920, height: 1057}, + accelerometerSupport: "unknown", + monochrome: false, + colorDepth: 24, + colorSpace: + "{primaries_d50_referred: [[0.6825, 0.3155], [0.3001, 0.6589], [0.1589, 0.0529]], transfer:BT709_APPLE, matrix:RGB, range:FULL}", + depthPerComponent: 8, + size: {width: 1920, height: 1080}, + workAreaSize: {width: 1920, height: 1057}, + scaleFactor: 2, + rotation: 0, + internal: false, + touchSupport: "unknown", +} + export const screen = { + getDisplayNearestPoint() { + return display + }, getAllDisplays() { - return [ - { - id: 459098087, - bounds: {x: 0, y: 0, width: 1920, height: 1080}, - workArea: {x: 0, y: 23, width: 1920, height: 1057}, - accelerometerSupport: "unknown", - monochrome: false, - colorDepth: 24, - colorSpace: - "{primaries_d50_referred: [[0.6825, 0.3155], [0.3001, 0.6589], [0.1589, 0.0529]], transfer:BT709_APPLE, matrix:RGB, range:FULL}", - depthPerComponent: 8, - size: {width: 1920, height: 1080}, - workAreaSize: {width: 1920, height: 1057}, - scaleFactor: 2, - rotation: 0, - internal: false, - touchSupport: "unknown", - }, - ] + return [display] }, }