diff --git a/src/emulator.js b/src/emulator.js index 0d9935f..ba18ba8 100644 --- a/src/emulator.js +++ b/src/emulator.js @@ -610,7 +610,7 @@ class EmulatorJS { let timeout = null; const hide = () => { - if (this.paused) return; + if (this.paused || this.settingsMenuOpen) return; this.elements.menu.classList.add("ejs_menu_bar_hidden"); } @@ -714,17 +714,31 @@ class EmulatorJS { this.elements.menu.appendChild(spacer); this.settingParent = this.createElement("div"); - let menuOpen = false; + this.settingsMenuOpen = false; const settingButton = addButton("Settings", '', () => { - menuOpen = !menuOpen; - settingButton[1].classList.toggle("ejs_svg_rotate", menuOpen); - settingButton[2].style.display = menuOpen ? "none" : ""; - this.settingsMenu.style.display = menuOpen ? "" : "none"; + this.settingsMenuOpen = !this.settingsMenuOpen; + settingButton[1].classList.toggle("ejs_svg_rotate", this.settingsMenuOpen); + settingButton[2].style.display = this.settingsMenuOpen ? "none" : ""; + this.settingsMenu.style.display = this.settingsMenuOpen ? "" : "none"; }, this.settingParent, true); this.elements.menu.appendChild(this.settingParent); - - - + this.closeSettingsMenu = () => { + if (!this.settingsMenu) return; + this.settingsMenuOpen = false; + settingButton[1].classList.toggle("ejs_svg_rotate", this.settingsMenuOpen); + settingButton[2].style.display = ""; + this.settingsMenu.style.display = "none"; + } + this.addEventListener(this.elements.parent, "click", (e) => { + if (e.target === settingButton[0]) return; + setTimeout(() => { + if (this.settingsJustClicked) { + this.settingsJustClicked = false; + return; + } + this.closeSettingsMenu(); + }, 10) + }) const enter = addButton("Enter Fullscreen", '', () => { if (this.elements.parent.requestFullscreen) { @@ -1472,6 +1486,9 @@ class EmulatorJS { } setupSettingsMenu() { this.settingsMenu = this.createElement("div"); + this.addEventListener(this.settingsMenu, "click", (e) => { + this.settingsJustClicked = true; + }) this.settingsMenu.classList.add("ejs_settings_parent"); const nested = this.createElement("div"); nested.classList.add("ejs_settings_transition");