diff --git a/src/constants.js b/src/constants.js index d397b7a..6650a2b 100644 --- a/src/constants.js +++ b/src/constants.js @@ -13,6 +13,7 @@ const CONSTANTS = { const IPC_COMMANDS = { TOGGLE_INFO: 'TOGGLE_INFO', MACHINE_RESTART: 'MACHINE_RESTART', + MACHINE_RESET: 'MACHINE_RESET', MACHINE_CTRL_ALT_DEL: 'MACHINE_CTRL_ALT_DEL', SHOW_DISK_IMAGE: 'SHOW_DISK_IMAGE' } diff --git a/src/menu.js b/src/menu.js index 2184e47..0ab6d49 100644 --- a/src/menu.js +++ b/src/menu.js @@ -77,6 +77,10 @@ async function createMenu () { label: 'Restart', click: () => send(IPC_COMMANDS.MACHINE_RESTART) }, + { + label: 'Reset', + click: () => send(IPC_COMMANDS.MACHINE_RESET) + }, { type: 'separator' }, diff --git a/src/renderer/app-state.js b/src/renderer/app-state.js index 9047cc1..a1b8ef3 100644 --- a/src/renderer/app-state.js +++ b/src/renderer/app-state.js @@ -1,5 +1,7 @@ export function setupState () { window.appState = { + isResetting: false, + isQuitting: false, cursorCaptured: false, floppyFile: null, bootFresh: false diff --git a/src/renderer/buttons.js b/src/renderer/buttons.js index 81d7f2f..69b2547 100644 --- a/src/renderer/buttons.js +++ b/src/renderer/buttons.js @@ -13,7 +13,7 @@ export function setupButtons (start) { $('#discard-state').addEventListener('click', () => { window.appState.bootFresh = true - start('win95') + start() }) // Floppy diff --git a/src/renderer/ipc.js b/src/renderer/ipc.js index 3cf7f26..0befbc7 100644 --- a/src/renderer/ipc.js +++ b/src/renderer/ipc.js @@ -1,6 +1,6 @@ import { toggleInfo } from 'es6://info.js' -export function setupIpcListeners () { +export function setupIpcListeners (start) { const { windows95 } = window windows95.addListener(windows95.IPC_COMMANDS.TOGGLE_INFO, () => { @@ -8,11 +8,21 @@ export function setupIpcListeners () { }) windows95.addListener(windows95.IPC_COMMANDS.MACHINE_RESTART, () => { + console.log(`Restarting machine`) + if (!window.emulator || !window.emulator.is_running) return window.emulator.restart() }) + windows95.addListener(windows95.IPC_COMMANDS.MACHINE_RESET, () => { + console.log(`Resetting machine`) + + window.appState.isResetting = true + document.location.hash = `#AUTO_START` + document.location.reload() + }) + windows95.addListener(windows95.IPC_COMMANDS.MACHINE_CTRL_ALT_DEL, () => { if (!window.emulator || !window.emulator.is_running) return diff --git a/src/renderer/listeners.js b/src/renderer/listeners.js index 4f1831c..4f46041 100644 --- a/src/renderer/listeners.js +++ b/src/renderer/listeners.js @@ -9,6 +9,7 @@ export function setupCloseListener () { window.onbeforeunload = (event) => { if (window.appState.isQuitting) return + if (window.appState.isResetting) return handleClose() event.preventDefault() @@ -32,12 +33,15 @@ export function setupEscListener () { } } -export function setupClickListener () { - document.addEventListener('click', () => { - if (!window.appState.cursorCaptured) { - window.appState.cursorCaptured = true - window.emulator.mouse_set_status(true) - window.emulator.lock_mouse() - } - }) +function onDocumentClick () { + if (!window.appState.cursorCaptured) { + window.appState.cursorCaptured = true + window.emulator.mouse_set_status(true) + window.emulator.lock_mouse() + } +} + +export function setupClickListener () { + document.removeEventListener('click', onDocumentClick) + document.addEventListener('click', onDocumentClick) } diff --git a/src/renderer/renderer.js b/src/renderer/renderer.js index 713590a..8532434 100644 --- a/src/renderer/renderer.js +++ b/src/renderer/renderer.js @@ -62,7 +62,11 @@ function start () { main() } -setupIpcListeners() +setupIpcListeners(start) setupEscListener() setupCloseListener() setupButtons(start) + +if (document.location.hash.includes('AUTO_START')) { + start() +}