| 
									
										
										
										
											2019-12-04 17:38:53 +11:00
										 |  |  | <!DOCTYPE html> | 
					
						
							|  |  |  | <html> | 
					
						
							|  |  |  |   <head> | 
					
						
							|  |  |  |     <meta charset="UTF-8" /> | 
					
						
							|  |  |  |     <title>Tray</title> | 
					
						
							|  |  |  |   </head> | 
					
						
							|  |  |  |   <body> | 
					
						
							|  |  |  |     <div> | 
					
						
							|  |  |  |       <h1>Tray</h1> | 
					
						
							|  |  |  |       <h3> | 
					
						
							|  |  |  |         The <code>tray</code> module allows you to create an icon in the | 
					
						
							|  |  |  |         operating system's notification area. | 
					
						
							|  |  |  |       </h3> | 
					
						
							|  |  |  |       <p>This icon can also have a context menu attached.</p> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       <p> | 
					
						
							|  |  |  |         Open the | 
					
						
							| 
									
										
										
										
											2020-02-16 16:46:41 -08:00
										 |  |  |         <a href="https://electronjs.org/docs/api/tray"> | 
					
						
							| 
									
										
										
										
											2019-12-04 17:38:53 +11:00
										 |  |  |           full API documentation (opens in new window) | 
					
						
							|  |  |  |         </a> | 
					
						
							|  |  |  |         in your browser. | 
					
						
							|  |  |  |       </p> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <div> | 
					
						
							|  |  |  |       <div> | 
					
						
							|  |  |  |         <div> | 
					
						
							|  |  |  |           <div> | 
					
						
							|  |  |  |             <button id="put-in-tray">View Demo</button> | 
					
						
							|  |  |  |             <span id="tray-countdown"></span> | 
					
						
							|  |  |  |           </div> | 
					
						
							|  |  |  |           <p> | 
					
						
							|  |  |  |             The demo button sends a message to the main process using the | 
					
						
							|  |  |  |             <code>ipc</code> module. In the main process the app is told to | 
					
						
							|  |  |  |             place an icon, with a context menu, in the tray. | 
					
						
							|  |  |  |           </p> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           <p> | 
					
						
							|  |  |  |             In this example the tray icon can be removed by clicking 'Remove' in | 
					
						
							|  |  |  |             the context menu or selecting the demo button again. | 
					
						
							|  |  |  |           </p> | 
					
						
							|  |  |  |           <h5>Main Process</h5> | 
					
						
							|  |  |  |           <pre> | 
					
						
							|  |  |  |               <code> | 
					
						
							|  |  |  | const path = require('path') | 
					
						
							|  |  |  | const {ipcMain, app, Menu, Tray} = require('electron') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let appIcon = null | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ipcMain.on('put-in-tray', (event) => { | 
					
						
							|  |  |  |   const iconName = process.platform === 'win32' ? 'windows-icon.png' : 'iconTemplate.png' | 
					
						
							|  |  |  |   const iconPath = path.join(__dirname, iconName) | 
					
						
							|  |  |  |   appIcon = new Tray(iconPath) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const contextMenu = Menu.buildFromTemplate([{ | 
					
						
							|  |  |  |     label: 'Remove', | 
					
						
							|  |  |  |     click: () => { | 
					
						
							|  |  |  |       event.sender.send('tray-removed') | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   }]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   appIcon.setToolTip('Electron Demo in the tray.') | 
					
						
							|  |  |  |   appIcon.setContextMenu(contextMenu) | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ipcMain.on('remove-tray', () => { | 
					
						
							|  |  |  |   appIcon.destroy() | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | app.on('window-all-closed', () => { | 
					
						
							|  |  |  |   if (appIcon) appIcon.destroy() | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  |               </code> | 
					
						
							|  |  |  |             </pre> | 
					
						
							|  |  |  |           <h5>Renderer Process</h5> | 
					
						
							|  |  |  |           <pre> | 
					
						
							|  |  |  |               <code> | 
					
						
							|  |  |  | const ipc = require('electron').ipcRenderer | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const trayBtn = document.getElementById('put-in-tray') | 
					
						
							|  |  |  | let trayOn = false | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | trayBtn.addEventListener('click', function (event) { | 
					
						
							|  |  |  |   if (trayOn) { | 
					
						
							|  |  |  |     trayOn = false | 
					
						
							|  |  |  |     document.getElementById('tray-countdown').innerHTML = '' | 
					
						
							|  |  |  |     ipc.send('remove-tray') | 
					
						
							|  |  |  |   } else { | 
					
						
							|  |  |  |     trayOn = true | 
					
						
							|  |  |  |     const message = 'Click demo again to remove.' | 
					
						
							|  |  |  |     document.getElementById('tray-countdown').innerHTML = message | 
					
						
							|  |  |  |     ipc.send('put-in-tray') | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | // Tray removed from context menu on icon | 
					
						
							|  |  |  | ipc.on('tray-removed', function () { | 
					
						
							|  |  |  |   ipc.send('remove-tray') | 
					
						
							|  |  |  |   trayOn = false | 
					
						
							|  |  |  |   document.getElementById('tray-countdown').innerHTML = '' | 
					
						
							|  |  |  | })                   | 
					
						
							|  |  |  |               </code> | 
					
						
							|  |  |  |             </pre> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           <div> | 
					
						
							|  |  |  |             <h2>ProTip</h2> | 
					
						
							|  |  |  |             <strong>Tray support in Linux.</strong> | 
					
						
							|  |  |  |             <p> | 
					
						
							|  |  |  |               On Linux distributions that only have app indicator support, users | 
					
						
							|  |  |  |               will need to install <code>libappindicator1</code> to make the | 
					
						
							|  |  |  |               tray icon work. See the | 
					
						
							| 
									
										
										
										
											2020-02-16 16:46:41 -08:00
										 |  |  |               <a href="https://electronjs.org/docs/api/tray"> | 
					
						
							| 
									
										
										
										
											2019-12-04 17:38:53 +11:00
										 |  |  |                 full API documentation (opens in new window) | 
					
						
							|  |  |  |               </a> | 
					
						
							|  |  |  |               for more details about using Tray on Linux. | 
					
						
							|  |  |  |             </p> | 
					
						
							|  |  |  |           </div> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |       </div> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <script> | 
					
						
							|  |  |  |       // You can also require other files to run in this process | 
					
						
							|  |  |  |       require("./renderer.js"); | 
					
						
							|  |  |  |     </script> | 
					
						
							|  |  |  |   </body> | 
					
						
							|  |  |  | </html> |