diff --git a/src/browser/settings.jsx b/src/browser/settings.jsx index d38b213e..d877c2d1 100644 --- a/src/browser/settings.jsx +++ b/src/browser/settings.jsx @@ -61,6 +61,7 @@ var SettingsPage = React.createClass({ trayIconTheme: this.state.trayIconTheme, disablewebsecurity: this.state.disablewebsecurity, version: settings.version, + minimizeToTray: this.state.minimizeToTray, notifications: { flashWindow: this.state.notifications.flashWindow } @@ -114,6 +115,11 @@ var SettingsPage = React.createClass({ autostart: this.refs.autostart.getChecked() }); }, + handleChangeMinimizeToTray: function() { + this.setState({ + minimizeToTray: this.refs.minimizeToTray.getChecked() + }); + }, toggleShowTeamForm: function() { this.setState({ showAddTeamForm: !this.state.showAddTeamForm @@ -156,6 +162,8 @@ var SettingsPage = React.createClass({ if (process.platform === 'win32' || process.platform === 'linux') { options.push(); + options.push(); } var options_row = (options.length > 0) ? ( diff --git a/src/common/settings.js b/src/common/settings.js index 093dcf8f..8fd9775f 100644 --- a/src/common/settings.js +++ b/src/common/settings.js @@ -26,6 +26,7 @@ var loadDefault = function(version) { showTrayIcon: false, trayIconTheme: '', disablewebsecurity: true, + minimizeToTray: false, version: 1, notifications: { flashWindow: 0 // 0 = flash never, 1 = only when idle (after 10 seconds), 2 = always @@ -38,7 +39,7 @@ var upgradeV0toV1 = function(config_v0) { var config = loadDefault(1); config.teams.push({ name: 'Primary team', - url: config_v0.url + url: config_v0.url }); return config; }; diff --git a/src/main.js b/src/main.js index 26421c6d..a89a6490 100644 --- a/src/main.js +++ b/src/main.js @@ -156,6 +156,7 @@ app.on('browser-window-created', function(event, window) { // For OSX, show hidden mainWindow when clicking dock icon. app.on('activate', function(event) { mainWindow.show(); + mainWindow.isHidden = false; }); app.on('before-quit', function() { @@ -227,14 +228,29 @@ app.on('ready', function() { trayIcon.setToolTip(app.getName()); trayIcon.on('click', function() { - mainWindow.show(); + if (process.platform === 'win32') { + if (config.minimizeToTray) { + if (mainWindow.isHidden) { + mainWindow.show(); + mainWindow.isHidden = false; + } else { + mainWindow.hide(); + mainWindow.isHidden = true; + } + } + } mainWindow.focus(); }); trayIcon.on('right-click', () => { trayIcon.popUpContextMenu(); }); trayIcon.on('balloon-click', function() { - mainWindow.show(); + if (process.platform === 'win32') { + if (config.minimizeToTray) { + mainWindow.show(); + mainWindow.isHidden = false; + } + } mainWindow.focus(); }); ipcMain.on('notified', function(event, arg) { @@ -348,7 +364,12 @@ app.on('ready', function() { event.preventDefault(); switch (process.platform) { case 'win32': - mainWindow.hide(); + if (config.minimizeToTray) { + mainWindow.hide(); + mainWindow.isHidden = true; + } else { + mainWindow.minimize(); + } break; case 'linux': mainWindow.minimize(); @@ -361,6 +382,15 @@ app.on('ready', function() { } }); + if (process.platform === 'win32') { + mainWindow.on('minimize', function() { + if (config.minimizeToTray) { + mainWindow.hide(); + mainWindow.isHidden = true; + } + }); + } + // App should save bounds when a window is closed. // However, 'close' is not fired in some situations(shutdown, ctrl+c) // because main process is killed in such situations.