const { remote } = require('electron'); const win = remote.getCurrentWindow(); /* Note this is different to the html global `window` variable */ window.onbeforeunload = () => { /* If window is reloaded, remove win event listeners (DOM element listeners get auto garbage collected but not Electron win listeners as the win is not dereferenced unless closed) */ win.removeAllListeners(); }; function handleWindowControls() { // Make minimise/maximise/restore/close buttons work when they are clicked document.getElementById('min-button')?.addEventListener('click', () => { win.minimize(); }); document.getElementById('max-button')?.addEventListener('click', () => { win.maximize(); }); document.getElementById('restore-button')?.addEventListener('click', () => { win.unmaximize(); }); document.getElementById('close-button')?.addEventListener('click', () => { win.close(); }); function toggleMaxRestoreButtons() { if (win.isMaximized()) { document.body.classList.add('maximized'); } else { document.body.classList.remove('maximized'); } } // Toggle maximise/restore buttons when maximisation/unmaximisation occurs toggleMaxRestoreButtons(); win.on('maximize', toggleMaxRestoreButtons); win.on('unmaximize', toggleMaxRestoreButtons); } // When document has loaded, initialise document.onreadystatechange = () => { if (document.readyState === 'complete') { handleWindowControls(); } };