/** * Wer gerade prüft, soll das Fenster nicht versehentlich schließen. * * **Warum der Hauptprozess das wissen muss.** `close` entsteht dort – am * Fensterkreuz, über Alt+F4 und über „Datei → Beenden“. Der Renderer bekommt * davon nichts mit und kann die Frage deshalb nicht selbst stellen. * * **Warum ein Abgleich und keine Kantenmeldung.** Der Renderer schickt seinen * Zustand auch beim Aufbau – also `false` nach einem Neuladen. Bliebe der * Merker sonst hängen, hinge das Fenster für immer an einer Rückfrage zu * einer Prüfung, die es nicht mehr gibt. Zusätzlich wird er vergessen, wenn * ein neues Dokument geladen wird oder der Renderer stirbt: zwei unabhängige * Wege, damit ein Absturz das Fenster nicht unschließbar macht. */ import type { BrowserWindow, WebContents } from 'electron'; /** Kennungen der `webContents`, in denen gerade eine Prüfung läuft. */ const laufend = new Set(); /** Der Renderer meldet seinen Zustand – auch unverändert. */ export function laufMelden(inhalt: WebContents, laeuft: boolean): void { if (laeuft) { laufend.add(inhalt.id); } else { laufend.delete(inhalt.id); } } /** Vergisst den Merker – bei neuem Dokument, Absturz oder Abbau. */ export function laufVergessen(inhalt: WebContents): void { laufend.delete(inhalt.id); } /** Läuft in diesem Fenster gerade eine Prüfung? */ export function laeuftPruefung(fenster: BrowserWindow): boolean { return !fenster.webContents.isDestroyed() && laufend.has(fenster.webContents.id); } /** Gegenstück für Tests. */ export function laufwaechterLeeren(): void { laufend.clear(); }