mirror of
https://github.com/signalapp/Signal-Desktop.git
synced 2026-05-08 08:58:38 +01:00
Add a tray icon to the application (#1676)
This commit adds a tray icon to the application, shown in the system
tray bar, that can be used to minimise the application window. This
is a common feature on most desktop messaging apps (e.g. Telegram
Desktop or Slack) and allows to save space in the system task bar.
The tray icon provides a context menu that contains a button to
show/hide the application window, and a button to quit the
application. When the tray icon is clicked, the visibility of the
window is toggled. When the close (x) button of the window is
pressed, the application is not terminated but minimised to the tray
icon instead (it can be terminated by using the "Quit" entry in the
File menu or in the context menu of the tray icon).
The tray icon is disabled by default, and two command line arguments
are available to enable it:
--use-tray-icon: enables the tray icon
--start-in-tray: enables the tray icon and the application starts
minimised in the tray bar
Resolves: #1480
This commit is contained in:
committed by
Scott Nonnenberg
parent
17f0bb42bc
commit
cd50fe3123
@@ -29,6 +29,11 @@ function getMainWindow() {
|
||||
return mainWindow;
|
||||
}
|
||||
|
||||
// Tray icon and related objects
|
||||
let tray = null;
|
||||
const startInTray = process.argv.find(arg => arg === '--start-in-tray');
|
||||
const usingTrayIcon = startInTray || process.argv.find(arg => arg === '--use-tray-icon');
|
||||
|
||||
const config = require("./app/config");
|
||||
|
||||
// Very important to put before the single instance check, since it is based on the
|
||||
@@ -107,6 +112,7 @@ function captureClicks(window) {
|
||||
|
||||
function createWindow () {
|
||||
const windowOptions = Object.assign({
|
||||
show: !startInTray, // allow to start minimised in tray
|
||||
width: 800,
|
||||
height: 610,
|
||||
minWidth: 700,
|
||||
@@ -187,9 +193,22 @@ function createWindow () {
|
||||
|
||||
// Emitted when the window is about to be closed.
|
||||
mainWindow.on('close', function (e) {
|
||||
if (process.platform === 'darwin' && !windowState.shouldQuit() && config.environment !== 'test') {
|
||||
|
||||
// If the application is terminating, just do the default
|
||||
if (windowState.shouldQuit() || config.environment === 'test') {
|
||||
return;
|
||||
}
|
||||
|
||||
// On Mac, or on other platforms when the tray icon is in use, the window
|
||||
// should be only hidden, not closed, when the user clicks the close button
|
||||
if (usingTrayIcon || process.platform === 'darwin') {
|
||||
e.preventDefault();
|
||||
mainWindow.hide();
|
||||
|
||||
// toggle the visibility of the show/hide tray icon menu entries
|
||||
if (tray) {
|
||||
tray.updateContextMenu();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -211,6 +230,11 @@ function createWindow () {
|
||||
} else {
|
||||
mainWindow.show();
|
||||
}
|
||||
|
||||
// toggle the visibility of the show/hide tray icon menu entries
|
||||
if (tray) {
|
||||
tray.updateContextMenu();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -296,6 +320,11 @@ app.on('ready', function() {
|
||||
|
||||
createWindow();
|
||||
|
||||
if (usingTrayIcon) {
|
||||
const createTrayIcon = require("./app/tray_icon");
|
||||
tray = createTrayIcon(getMainWindow, locale.messages);
|
||||
}
|
||||
|
||||
const options = {
|
||||
showDebugLog,
|
||||
showWindow,
|
||||
|
||||
Reference in New Issue
Block a user