From ccaf0de63d38e64d8a70098f1ac5d047d9196dc8 Mon Sep 17 00:00:00 2001 From: Feross Aboukhadijeh Date: Mon, 4 Apr 2016 13:40:27 -0700 Subject: [PATCH] Windows/Linux: Fix broken Quit option in Tray icon This also cleans up the code by handling quit in the same way for all platforms, removing the special case in tray.js for darwin. We already have a 'before-quit' handler in main/index.js, so this is now handled there :) --- main/index.js | 9 ++++++++- main/tray.js | 27 ++++++++++----------------- 2 files changed, 18 insertions(+), 18 deletions(-) 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 */ -}