diff --git a/main/index.js b/main/index.js index 72f57a11..cd84e07c 100644 --- a/main/index.js +++ b/main/index.js @@ -1,6 +1,7 @@ var electron = require('electron') var app = electron.app +var ipcMain = electron.ipcMain var autoUpdater = require('./auto-updater') var config = require('../config') @@ -62,8 +63,14 @@ function init () { processArgv(argv) }) - app.on('before-quit', function () { + app.on('before-quit', function (e) { + if (app.isQuitting) return + app.isQuitting = true + e.preventDefault() + windows.main.send('dispatch', 'saveState') /* try to save state on exit */ + ipcMain.once('savedState', () => app.quit()) + setTimeout(() => app.quit(), 2000) /* quit after 2 secs, at most */ }) app.on('activate', function () { diff --git a/main/tray.js b/main/tray.js index bd308316..4178a316 100644 --- a/main/tray.js +++ b/main/tray.js @@ -4,20 +4,20 @@ module.exports = { var path = require('path') var electron = require('electron') + +var app = electron.app +var Menu = electron.Menu +var Tray = electron.Tray + var windows = require('./windows') var trayIcon function init () { - if (process.platform === 'darwin') { - // Instead of relying on the tray icon quit button, listen for Cmd+Q - electron.app.once('before-quit', quitApp) + // OS X has no tray icon + if (process.platform === 'darwin') return - // OS X has no tray icon - return - } - - trayIcon = new electron.Tray(path.join(__dirname, '..', 'static', 'WebTorrentSmall.png')) + trayIcon = new Tray(path.join(__dirname, '..', 'static', 'WebTorrentSmall.png')) // On Windows, left click to open the app, right click for context menu // On Linux, any click (right or left) opens the context menu @@ -36,9 +36,9 @@ function updateTrayMenu () { } else { showHideMenuItem = { label: 'Show', click: showApp } } - var contextMenu = electron.Menu.buildFromTemplate([ + var contextMenu = Menu.buildFromTemplate([ showHideMenuItem, - { label: 'Quit', click: quitApp } + { label: 'Quit', click: () => app.quit() } ]) trayIcon.setContextMenu(contextMenu) } @@ -50,10 +50,3 @@ function showApp () { function hideApp () { windows.main.hide() } - -function quitApp (e) { - e.preventDefault() - windows.main.send('dispatch', 'saveState') /* try to save state on exit */ - electron.ipcMain.once('savedState', () => electron.app.quit()) - setTimeout(() => electron.app.quit(), 2000) /* exit after at most 2 secs */ -}