Fix blank window when reopening after the main window is destroyed
registerSpellcheck()'s invoke-handler registration guard checked ipcMain.eventNames(), which only reflects .on()/.once() listeners -- handlers registered via ipcMain.handle() never show up there, so the guard was a no-op. With closeToTray disabled (or any other path that lets the main window actually close instead of hide), a second createWindow() call would hit "Attempted to register a second handler for 'spellcheck-get-state'", aborting window setup partway through and leaving a blank window. Use a real module-level flag instead, matching the pattern already used for this file's .on() listeners.
This commit is contained in:
@@ -133,6 +133,7 @@ const dictionaryDataPromises = new Map<string, Promise<SpellcheckDictionaryData
|
||||
|
||||
let factoryPromise: Promise<HunspellFactory> | null = null;
|
||||
let ipcRegistered = false;
|
||||
let invokeHandlersRegistered = false;
|
||||
let launchModeLogged = false;
|
||||
|
||||
const contextSourceByWebContents = new WeakMap<
|
||||
@@ -1060,7 +1061,8 @@ export const registerSpellcheck = (webContents: WebContents): void => {
|
||||
return state;
|
||||
};
|
||||
void applyAndBroadcast(false);
|
||||
if (!ipcMain.eventNames().includes('spellcheck-get-state')) {
|
||||
if (!invokeHandlersRegistered) {
|
||||
invokeHandlersRegistered = true;
|
||||
ipcMain.handle('spellcheck-get-state', (event) => {
|
||||
const targetSession = event.sender.session;
|
||||
const next = applyLaunchSpellcheckMode(sessionState.get(targetSession) ?? {...defaultState});
|
||||
|
||||
Reference in New Issue
Block a user