fix: too many listeners

This commit is contained in:
fullex 2025-03-18 20:28:49 +08:00 committed by 亢奋猫
parent 16d9be4ce4
commit 1a2a382916
2 changed files with 18 additions and 8 deletions

View File

@ -8,6 +8,9 @@ import { windowService } from './WindowService'
let showAppAccelerator: string | null = null
let showMiniWindowAccelerator: string | null = null
// store the focus and blur handlers for each window to unregister them later
const windowOnHandlers = new Map<BrowserWindow, { onFocusHandler: () => void; onBlurHandler: () => void }>()
function getShortcutHandler(shortcut: Shortcut) {
switch (shortcut.key) {
case 'zoom_in':
@ -112,10 +115,6 @@ const convertShortcutRecordedByKeyboardEventKeyValueToElectronGlobalShortcutForm
}
export function registerShortcuts(window: BrowserWindow) {
window.once('ready-to-show', () => {
window.webContents.setZoomFactor(configManager.getZoomFactor())
})
const register = () => {
if (window.isDestroyed()) return
@ -145,9 +144,10 @@ export function registerShortcuts(window: BrowserWindow) {
case 'mini_window':
//available only when QuickAssistant enabled
if (configManager.getEnableQuickAssistant()) {
showMiniWindowAccelerator = formatShortcutKey(shortcut.shortcut)
if (!configManager.getEnableQuickAssistant()) {
return
}
showMiniWindowAccelerator = formatShortcutKey(shortcut.shortcut)
break
//the following ZOOMs will register shortcuts seperately, so will return
@ -201,8 +201,12 @@ export function registerShortcuts(window: BrowserWindow) {
}
}
window.on('focus', () => register())
window.on('blur', () => unregister())
// only register the event handlers once
if (undefined === windowOnHandlers.get(window)) {
window.on('focus', register)
window.on('blur', unregister)
windowOnHandlers.set(window, { onFocusHandler: register, onBlurHandler: unregister })
}
if (!window.isDestroyed() && window.isFocused()) {
register()
@ -213,6 +217,11 @@ export function unregisterAllShortcuts() {
try {
showAppAccelerator = null
showMiniWindowAccelerator = null
windowOnHandlers.forEach((handlers, window) => {
window.off('focus', handlers.onFocusHandler)
window.off('blur', handlers.onBlurHandler)
})
windowOnHandlers.clear()
globalShortcut.unregisterAll()
} catch (error) {
Logger.error('[ShortcutService] Failed to unregister all shortcuts')

View File

@ -145,6 +145,7 @@ export class WindowService {
private setupWindowEvents(mainWindow: BrowserWindow) {
mainWindow.once('ready-to-show', () => {
mainWindow.webContents.setZoomFactor(configManager.getZoomFactor())
mainWindow.show()
})