 1b4eb0b679
			
		
	
	
	
	
	1b4eb0b679* fix: use powerMonitor.on() only after app is ready
powerMonitor can't be used until the app is ready; however, on Linux,
powerMonitor.on() was called as soon as lib/browser/api/power-monitor.ts
was loaded.
This patch takes @vladimiry's suggestion of wrapping that in an
app.on('ready') handler to prevent powerMonitor.on() from being called
prematurely.
Fixes #21716
		
	
			
		
			
				
	
	
		
			38 lines
		
	
	
	
		
			1.4 KiB
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
	
		
			1.4 KiB
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 'use strict'
 | |
| 
 | |
| import { createLazyInstance } from '../utils'
 | |
| 
 | |
| const { EventEmitter } = require('events')
 | |
| const { createPowerMonitor, PowerMonitor } = process.electronBinding('power_monitor')
 | |
| 
 | |
| // PowerMonitor is an EventEmitter.
 | |
| Object.setPrototypeOf(PowerMonitor.prototype, EventEmitter.prototype)
 | |
| 
 | |
| const powerMonitor = createLazyInstance(createPowerMonitor, PowerMonitor, true)
 | |
| 
 | |
| if (process.platform === 'linux') {
 | |
|   // In order to delay system shutdown when e.preventDefault() is invoked
 | |
|   // on a powerMonitor 'shutdown' event, we need an org.freedesktop.login1
 | |
|   // shutdown delay lock. For more details see the "Taking Delay Locks"
 | |
|   // section of https://www.freedesktop.org/wiki/Software/systemd/inhibit/
 | |
|   //
 | |
|   // So here we watch for 'shutdown' listeners to be added or removed and
 | |
|   // set or unset our shutdown delay lock accordingly.
 | |
|   const { app } = require('electron')
 | |
|   app.whenReady().then(() => {
 | |
|     powerMonitor.on('newListener', (event: string) => {
 | |
|       // whenever the listener count is incremented to one...
 | |
|       if (event === 'shutdown' && powerMonitor.listenerCount('shutdown') === 0) {
 | |
|         powerMonitor.blockShutdown()
 | |
|       }
 | |
|     })
 | |
|     powerMonitor.on('removeListener', (event: string) => {
 | |
|       // whenever the listener count is decremented to zero...
 | |
|       if (event === 'shutdown' && powerMonitor.listenerCount('shutdown') === 0) {
 | |
|         powerMonitor.unblockShutdown()
 | |
|       }
 | |
|     })
 | |
|   })
 | |
| }
 | |
| 
 | |
| module.exports = powerMonitor
 |