Merge pull request #289 from feross/fix-tray

Windows/Linux: Fix broken Quit option in Tray icon
This commit is contained in:
Feross Aboukhadijeh
2016-04-04 13:50:32 -07:00
3 changed files with 20 additions and 22 deletions

View File

@@ -1,6 +1,7 @@
var electron = require('electron') var electron = require('electron')
var app = electron.app var app = electron.app
var ipcMain = electron.ipcMain
var autoUpdater = require('./auto-updater') var autoUpdater = require('./auto-updater')
var config = require('../config') var config = require('../config')
@@ -62,8 +63,14 @@ function init () {
processArgv(argv) processArgv(argv)
}) })
app.on('before-quit', function () { app.on('before-quit', function (e) {
if (app.isQuitting) return
app.isQuitting = true 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 () { app.on('activate', function () {

View File

@@ -16,15 +16,13 @@ var updateDotExe = path.join(process.execPath, '..', '..', 'Update.exe')
function handleEvent (cmd) { function handleEvent (cmd) {
if (cmd === '--squirrel-install') { if (cmd === '--squirrel-install') {
// App was installed. // App was installed. Install desktop/start menu shortcuts.
// Install desktop/start menu shortcuts.
createShortcuts(function () { createShortcuts(function () {
// Ensure user sees install splash screen so they realize that Setup.exe actually // Ensure user sees install splash screen so they realize that Setup.exe actually
// installed an application and isn't the application itself. // installed an application and isn't the application itself.
setTimeout(function () { setTimeout(function () {
app.quit() app.quit()
}, 5000) }, 3000)
}) })
return true return true
} }

View File

@@ -4,20 +4,20 @@ module.exports = {
var path = require('path') var path = require('path')
var electron = require('electron') var electron = require('electron')
var app = electron.app
var Menu = electron.Menu
var Tray = electron.Tray
var windows = require('./windows') var windows = require('./windows')
var trayIcon var trayIcon
function init () { 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 // OS X has no tray icon
return if (process.platform === 'darwin') 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 Windows, left click to open the app, right click for context menu
// On Linux, any click (right or left) opens the context menu // On Linux, any click (right or left) opens the context menu
@@ -36,9 +36,9 @@ function updateTrayMenu () {
} else { } else {
showHideMenuItem = { label: 'Show', click: showApp } showHideMenuItem = { label: 'Show', click: showApp }
} }
var contextMenu = electron.Menu.buildFromTemplate([ var contextMenu = Menu.buildFromTemplate([
showHideMenuItem, showHideMenuItem,
{ label: 'Quit', click: quitApp } { label: 'Quit', click: () => app.quit() }
]) ])
trayIcon.setContextMenu(contextMenu) trayIcon.setContextMenu(contextMenu)
} }
@@ -50,10 +50,3 @@ function showApp () {
function hideApp () { function hideApp () {
windows.main.hide() 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 */
}