diff --git a/app/main/index.js b/app/main/index.js index c97671f6..5d5e0e9a 100644 --- a/app/main/index.js +++ b/app/main/index.js @@ -4,18 +4,14 @@ const electron = require('electron'); const {app} = require('electron'); const ipc = require('electron').ipcMain; const electronLocalshortcut = require('electron-localshortcut'); -const Configstore = require('electron-config'); const isDev = require('electron-is-dev'); +const windowStateKeeper = require('electron-window-state'); const appMenu = require('./menu'); const {appUpdater} = require('./autoupdater'); // Adds debug features like hotkeys for triggering dev tools and reload require('electron-debug')(); -const conf = new Configstore(); - -// Setting userAgent so that server-side code can identify the desktop app - // Prevent window being garbage collected let mainWindow; @@ -49,12 +45,19 @@ const iconPath = () => { }; function createMainWindow() { + // Load the previous state with fallback to defaults + const mainWindowState = windowStateKeeper({ + defaultWidth: 1000, + defaultHeight: 600 + }); const win = new electron.BrowserWindow({ // This settings needs to be saved in config title: 'Zulip', - width: conf.get('width') || 1000, - height: conf.get('height') || 600, icon: iconPath(), + x: mainWindowState.x, + y: mainWindowState.y, + width: mainWindowState.width, + height: mainWindowState.height, minWidth: 600, minHeight: 500, webPreferences: { @@ -93,20 +96,6 @@ function createMainWindow() { win.setTitle('Zulip'); - // Let's save browser window position - if (conf.get('x') || conf.get('y')) { - win.setPosition(conf.get('x'), conf.get('y')); - } - - if (conf.get('maximize')) { - win.maximize(); - } - - // Handle sizing events so we can persist them. - win.on('maximize', () => { - conf.set('maximize', true); - }); - win.on('enter-full-screen', () => { win.webContents.send('enter-fullscreen'); }); @@ -115,28 +104,6 @@ function createMainWindow() { win.webContents.send('leave-fullscreen'); }); - win.on('unmaximize', () => { - conf.set('maximize', false); - }); - - win.on('resize', function () { - const size = this.getSize(); - conf.set({ - width: size[0], - height: size[1] - }); - }); - - // On osx it's 'moved' - win.on('move', function () { - const pos = this.getPosition(); - // Let's not allow negative positions - conf.set({ - x: pos[0] > 0 ? pos[0] : 0, - y: pos[1] > 0 ? pos[1] : 0 - }); - }); - // To destroy tray icon when navigate to a new URL win.webContents.on('will-navigate', e => { if (e) { @@ -144,6 +111,11 @@ function createMainWindow() { } }); + // Let us register listeners on the window, so we can update the state + // automatically (the listeners will be removed when the window is closed) + // and restore the maximized or full screen state + mainWindowState.manage(win); + return win; } diff --git a/app/package.json b/app/package.json index 5a1ab038..dfee02bf 100644 --- a/app/package.json +++ b/app/package.json @@ -27,7 +27,6 @@ "InstantMessaging" ], "dependencies": { - "electron-config": "0.2.1", "electron-debug": "1.1.0", "electron-is-dev": "0.1.2", "electron-localshortcut": "1.0.0", @@ -37,6 +36,7 @@ "https": "^1.0.0", "node-json-db": "0.7.3", "request": "2.79.0", - "wurl": "2.1.0" + "wurl": "2.1.0", + "electron-window-state": "4.1.1" } }