From 1cff22cf3cc04fce8f4b939fa9bb4b7c055853a2 Mon Sep 17 00:00:00 2001
From: Ethan O'Brien <77750390+ethanaobrien@users.noreply.github.com>
Date: Thu, 29 Jun 2023 10:53:17 -0500
Subject: [PATCH] Setting menu click handler cleanup
---
src/emulator.js | 35 ++++++++++++++++++++++++++---------
1 file changed, 26 insertions(+), 9 deletions(-)
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");