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:
2026-07-03 10:19:53 -04:00
parent f1ba707f78
commit eca57c85ef
+3 -1
View File
@@ -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});