From 9dd5380f60d96e0da70bb057192aa67d59efd50f Mon Sep 17 00:00:00 2001 From: Ramiro Saenz Date: Sat, 30 Sep 2017 21:20:33 -0300 Subject: [PATCH] Enhance multi monitor/offscreen support Fixes #895 Fixes #920 Fixes #323 --- electron/main.js | 9 +++++++++ electron/utils/positionOnScreen.js | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 electron/utils/positionOnScreen.js diff --git a/electron/main.js b/electron/main.js index 3c571a1d..270adf4d 100644 --- a/electron/main.js +++ b/electron/main.js @@ -162,6 +162,15 @@ function createWindow () { if ( !config.get('start_minimized') && config.get('maximized') ) mainWindow.maximize(); + // Check if the window its outside of the view (ex: multi monitor setup) + const { positionOnScreen } = require('./utils/positionOnScreen'); + const inBounds = positionOnScreen([config.get('x'), config.get('y')]); + if ( inBounds ) { + mainWindow.setPosition(config.get('x'), config.get('y')); + } else { + mainWindow.center(); + } + process.setMaxListeners(10000); // Open the DevTools. diff --git a/electron/utils/positionOnScreen.js b/electron/utils/positionOnScreen.js new file mode 100644 index 00000000..35ca487b --- /dev/null +++ b/electron/utils/positionOnScreen.js @@ -0,0 +1,18 @@ +const { screen } = require('electron'); + +const positionOnScreen = (position) => { + let inBounds = false; + if (position) { + screen.getAllDisplays().forEach((display) => { + if (position[0] >= display.workArea.x && + position[0] <= display.workArea.x + display.workArea.width && + position[1] >= display.workArea.y && + position[1] <= display.workArea.y + display.workArea.height) { + inBounds = true; + } + }); + } + return inBounds; +}; + +module.exports = {positionOnScreen};