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.