diff --git a/main.js b/main.js index 0c11076..e701191 100644 --- a/main.js +++ b/main.js @@ -1,7 +1,13 @@ /* global __dirname, process */ -const electron = require('electron'); +const { + app: APP, + BrowserWindow, + Menu, + shell +} = require('electron'); const isDev = require('electron-is-dev'); +const windowStateKeeper = require('electron-window-state'); const { setupAlwaysOnTopMain, initPopupsConfigurationMain, @@ -10,8 +16,6 @@ const { const path = require('path'); const URL = require('url'); -const { app: APP, BrowserWindow, Menu } = electron; - /** * Load debug utilities (don't open the DevTools window by default though). */ @@ -38,20 +42,6 @@ const indexURL = URL.format({ */ let jitsiMeetWindow = null; -/** - * Options used when creating the main Jitsi Meet window. - */ -const jitsiMeetWindowOptions = { - width: 800, - height: 600, - minWidth: 800, - minHeight: 600, - titleBarStyle: 'hidden', - webPreferences: { - nativeWindowOpen: true - } -}; - /** * Sets the APP object listeners. */ @@ -87,7 +77,28 @@ function setAPPListeners() { function createJitsiMeetWindow() { Menu.setApplicationMenu(null); + // Load the previous state with fallback to defaults + const jitsiMeetWindowState = windowStateKeeper({ + defaultWidth: 800, + defaultHeight: 600 + }); + + // Options used when creating the main Jitsi Meet window. + const jitsiMeetWindowOptions = { + x: jitsiMeetWindowState.x, + y: jitsiMeetWindowState.y, + width: jitsiMeetWindowState.width, + height: jitsiMeetWindowState.height, + minWidth: 800, + minHeight: 600, + titleBarStyle: 'hidden', + webPreferences: { + nativeWindowOpen: true + } + }; + jitsiMeetWindow = new BrowserWindow(jitsiMeetWindowOptions); + jitsiMeetWindowState.manage(jitsiMeetWindow); jitsiMeetWindow.loadURL(indexURL); initPopupsConfigurationMain(jitsiMeetWindow); @@ -96,7 +107,7 @@ function createJitsiMeetWindow() { if (!target || target === 'browser') { event.preventDefault(); - electron.shell.openExternal(url); + shell.openExternal(url); } }); diff --git a/package-lock.json b/package-lock.json index 264550e..b2a49f9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3503,6 +3503,11 @@ "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.8.tgz", "integrity": "sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ=" }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -4063,6 +4068,16 @@ "integrity": "sha1-07DYWTgUBE4JLs4hCPw6ya6kuQA=", "dev": true }, + "electron-window-state": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/electron-window-state/-/electron-window-state-4.1.1.tgz", + "integrity": "sha1-azT9wxs4UU3+yLfI97XUrdtnYy0=", + "requires": { + "deep-equal": "1.0.1", + "jsonfile": "2.4.0", + "mkdirp": "0.5.1" + } + }, "elegant-spinner": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", @@ -6133,8 +6148,7 @@ "graceful-fs": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" }, "grouped-queue": { "version": "0.3.3", @@ -7432,7 +7446,6 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true, "requires": { "graceful-fs": "4.1.11" } diff --git a/package.json b/package.json index cd06b55..0cb021d 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "@atlaskit/theme": "3.2.2", "electron-debug": "2.0.0", "electron-is-dev": "0.3.0", + "electron-window-state": "4.1.1", "history": "4.7.2", "jitsi-meet-electron-utils": "github:jitsi/jitsi-meet-electron-utils#1972c3bf0884ace68eb496894dabae593d6dbf49", "react": "16.3.2",