From d6c752fba55ba5045c9861ecd25e8c50548b1187 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Wed, 18 Mar 2026 11:35:05 -0700 Subject: [PATCH] feat: Escape key closes topmost open window before showing menu Escape now closes UI windows in priority order (vendor, bank, trainer, who, combat log, social, talents, spellbook, quest log, character, inventory, world map) before falling through to the escape menu, matching standard WoW behavior. --- src/ui/game_screen.cpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/ui/game_screen.cpp b/src/ui/game_screen.cpp index f9c3af10..b5d34a0d 100644 --- a/src/ui/game_screen.cpp +++ b/src/ui/game_screen.cpp @@ -2751,7 +2751,6 @@ void GameScreen::processTargetInput(game::GameHandler& gameHandler) { if (KeybindingManager::getInstance().isActionPressed(KeybindingManager::Action::TOGGLE_SETTINGS, true)) { if (showSettingsWindow) { - // Close settings window if open showSettingsWindow = false; } else if (showEscapeMenu) { showEscapeMenu = false; @@ -2762,6 +2761,30 @@ void GameScreen::processTargetInput(game::GameHandler& gameHandler) { gameHandler.closeLoot(); } else if (gameHandler.isGossipWindowOpen()) { gameHandler.closeGossip(); + } else if (gameHandler.isVendorWindowOpen()) { + gameHandler.closeVendor(); + } else if (gameHandler.isBankOpen()) { + gameHandler.closeBank(); + } else if (gameHandler.isTrainerWindowOpen()) { + gameHandler.closeTrainer(); + } else if (showWhoWindow_) { + showWhoWindow_ = false; + } else if (showCombatLog_) { + showCombatLog_ = false; + } else if (showSocialFrame_) { + showSocialFrame_ = false; + } else if (talentScreen.isOpen()) { + talentScreen.setOpen(false); + } else if (spellbookScreen.isOpen()) { + spellbookScreen.setOpen(false); + } else if (questLogScreen.isOpen()) { + questLogScreen.setOpen(false); + } else if (inventoryScreen.isCharacterOpen()) { + inventoryScreen.toggleCharacter(); + } else if (inventoryScreen.isOpen()) { + inventoryScreen.setOpen(false); + } else if (showWorldMap_) { + showWorldMap_ = false; } else { showEscapeMenu = true; }