diff --git a/packages/desktop/src/electron/constants.ts b/packages/desktop/src/electron/constants.ts index e79bbdc..c41815a 100644 --- a/packages/desktop/src/electron/constants.ts +++ b/packages/desktop/src/electron/constants.ts @@ -17,6 +17,7 @@ export type Dimensions = { height: number; width: number }; export interface DimensionChangeRequest { setAlwaysOnTop: boolean; + setPosition?: "topRight" | "center"; dimensions: Dimensions; addDimensions: boolean; } diff --git a/packages/desktop/src/index.ts b/packages/desktop/src/index.ts index 29ec501..450d216 100644 --- a/packages/desktop/src/index.ts +++ b/packages/desktop/src/index.ts @@ -1,5 +1,6 @@ import { BrowserWindow, + Display, Menu, app, dialog, @@ -30,7 +31,7 @@ if (require("electron-squirrel-startup")) { // be closed automatically when the JavaScript object is garbage collected. export let browserWindow: BrowserWindow; -let display; +let display: Display; const createWindow = (): void => { // Create the browser window. @@ -108,6 +109,19 @@ app true ); } + + if (req.setPosition) { + if (req.setPosition === "center") { + browserWindow.center(); + } + + if (req.setPosition === "topRight") { + browserWindow.setPosition( + display.bounds.width - req.dimensions.width, + 0 + ); + } + } }); }) .then(() => { diff --git a/packages/desktop/src/pages/router/index.tsx b/packages/desktop/src/pages/router/index.tsx index 4576858..a8b677f 100644 --- a/packages/desktop/src/pages/router/index.tsx +++ b/packages/desktop/src/pages/router/index.tsx @@ -245,24 +245,39 @@ export default function NirvanaRouter() { height: 50 + numberOfOverlayRows * 200, width: 350 * numberOfOverlayColumns, }; - const setAlwaysOnTop = desktopMode === "overlayOnly"; + const setAlwaysOnTop = + desktopMode === "overlayOnly" || desktopMode === "flowState"; // add dimensions if it's not overlay only mode let finalDimensions: Dimensions = { height: 0, width: 0 }; + let finalPosition; - if (desktopMode === "terminal") + if (desktopMode === "terminal") { + finalPosition = "center"; finalDimensions = { height: 675, width: 400 }; - if (desktopMode === "terminalDetails") - finalDimensions = { height: 675, width: 800 }; - if (desktopMode === "flowState") - finalDimensions = { height: 50, width: 325 }; + } + if (desktopMode === "terminalDetails") { + finalPosition = "center"; + finalDimensions = { height: 675, width: 800 }; + } + + if (desktopMode === "flowState") { + finalPosition = "topRight"; + finalDimensions = { height: 50, width: 325 }; + } + + // add overlay for all variants except flow state if (desktopMode !== "flowState") finalDimensions = { width: finalDimensions.width + overlayDimensions.width, height: Math.max(finalDimensions.height, overlayDimensions.height), }; + if (desktopMode === "overlayOnly") { + finalPosition = "topRight"; + } + console.log( "setting new dimensions", desktopMode, @@ -280,6 +295,7 @@ export default function NirvanaRouter() { height: finalDimensions.height, width: finalDimensions.width, }, + setPosition: finalPosition, addDimensions: false, }); }, [desktopMode, numberOfOverlayColumns, numberOfOverlayRows]);