You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			71 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
		
		
			
		
	
	
			71 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
| 
											8 years ago
										 | const electron = require('electron') | ||
|  | const path = require('path'); | ||
|  | 
 | ||
|  | const app = electron.app; | ||
|  | const Menu = electron.Menu; | ||
|  | const Tray = electron.Tray; | ||
|  | 
 | ||
|  | let trayContextMenu = null; | ||
|  | let tray = null; | ||
|  | 
 | ||
|  | function createTrayIcon(getMainWindow, messages) { | ||
|  | 
 | ||
|  |   // A smaller icon is needed on macOS
 | ||
|  |   tray = new Tray( | ||
|  |     process.platform == "darwin" ? | ||
|  |     path.join(__dirname, '..', 'images', 'icon_16.png') : | ||
|  |     path.join(__dirname, '..', 'images', 'icon_256.png')); | ||
|  | 
 | ||
|  |   tray.toggleWindowVisibility = function () { | ||
|  |     var mainWindow = getMainWindow(); | ||
|  |     if (mainWindow) { | ||
|  |       if (mainWindow.isVisible()) { | ||
|  |         mainWindow.hide(); | ||
|  |       } else { | ||
|  |         mainWindow.show(); | ||
|  | 
 | ||
|  |         // On some versions of GNOME the window may not be on top when restored.
 | ||
|  |         // This trick should fix it.
 | ||
|  |         // Thanks to: https://github.com/Enrico204/Whatsapp-Desktop/commit/6b0dc86b64e481b455f8fce9b4d797e86d000dc1
 | ||
|  |         mainWindow.setAlwaysOnTop(true); | ||
|  |         mainWindow.focus(); | ||
|  |         mainWindow.setAlwaysOnTop(false); | ||
|  |       } | ||
|  |     } | ||
|  |     tray.updateContextMenu(); | ||
|  |   } | ||
|  | 
 | ||
|  |   tray.updateContextMenu = function () { | ||
|  | 
 | ||
|  |     var mainWindow = getMainWindow(); | ||
|  | 
 | ||
|  |     // NOTE: we want to have the show/hide entry available in the tray icon
 | ||
|  |     // context menu, since the 'click' event may not work on all platforms.
 | ||
|  |     // For details please refer to:
 | ||
|  |     // https://github.com/electron/electron/blob/master/docs/api/tray.md.
 | ||
|  |     trayContextMenu = Menu.buildFromTemplate([ | ||
|  |         { | ||
|  |           id: 'toggleWindowVisibility', | ||
|  |           label: messages[mainWindow.isVisible() ? 'hide' : 'show'].message, | ||
|  |           click: tray.toggleWindowVisibility | ||
|  |         }, | ||
|  |         { | ||
|  |           id: 'quit', | ||
|  |           label: messages.quit.message, | ||
|  |           click: app.quit.bind(app) | ||
|  |         } | ||
|  |     ]); | ||
|  | 
 | ||
|  |     tray.setContextMenu(trayContextMenu); | ||
|  |   } | ||
|  | 
 | ||
|  |   tray.on('click', tray.toggleWindowVisibility); | ||
|  | 
 | ||
|  |   tray.setToolTip(messages.trayTooltip.message); | ||
|  |   tray.updateContextMenu(); | ||
|  | 
 | ||
|  |   return tray; | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = createTrayIcon; |