diff --git a/app/index.js b/app/index.js index eb2fc7a6..c536a5cf 100644 --- a/app/index.js +++ b/app/index.js @@ -19,7 +19,6 @@ const checkSquirrel = () => { squirrel = require('electron-squirrel-startup'); //eslint-disable-next-line no-empty } catch (err) {} - if (squirrel) { // eslint-disable-next-line unicorn/no-process-exit process.exit(); diff --git a/app/plugins.js b/app/plugins.js index 7f7d5652..589e623e 100644 --- a/app/plugins.js +++ b/app/plugins.js @@ -318,6 +318,20 @@ exports.onApp = app_ => { }); }; +exports.onWindowClass = win => { + modules.forEach(plugin => { + if (plugin.onWindowClass) { + try { + plugin.onWindowClass(win); + } catch (e) { + notify('Plugin error!', `"${plugin._name}" has encountered an error. Check Developer Tools for details.`, { + error: e + }); + } + } + }); +}; + exports.onWindow = win => { modules.forEach(plugin => { if (plugin.onWindow) { @@ -417,6 +431,10 @@ exports.getDecoratedBrowserOptions = defaults => { return decorateObject(defaults, 'decorateBrowserOptions'); }; +exports.decorateWindowClass = defaults => { + return decorateObject(defaults, 'decorateWindowClass'); +}; + exports.decorateSessionOptions = defaults => { return decorateObject(defaults, 'decorateSessionOptions'); }; diff --git a/app/plugins/extensions.js b/app/plugins/extensions.js index f6179e7d..1c124565 100644 --- a/app/plugins/extensions.js +++ b/app/plugins/extensions.js @@ -1,6 +1,8 @@ module.exports = { availableExtensions: new Set([ 'onApp', + 'onWindowClass', + 'decorateWindowClass', 'onWindow', 'onRendererWindow', 'onUnload', diff --git a/app/ui/window.js b/app/ui/window.js index 0e144cc0..dcbcebe2 100644 --- a/app/ui/window.js +++ b/app/ui/window.js @@ -18,6 +18,12 @@ const {decorateSessionOptions, decorateSessionClass} = require('../plugins'); module.exports = class Window { constructor(options_, cfg, fn) { + const classOpts = Object.assign({uid: uuid.v4()}); + app.plugins.decorateWindowClass(classOpts); + this.uid = classOpts.uid; + + app.plugins.onWindowClass(this); + const winOpts = Object.assign( { minWidth: 370, @@ -34,7 +40,10 @@ module.exports = class Window { }, options_ ); + const window = new BrowserWindow(app.plugins.getDecoratedBrowserOptions(winOpts)); + window.uid = classOpts.uid; + const rpc = createRPC(window); const sessions = new Map();