fix: gossip/vendor windows not closing when opening mailbox/trainer/taxi

Domain handlers were setting `owner_.gossipWindowOpen = false` directly
on GameHandler's stale member, but isGossipWindowOpen() delegates to
QuestHandler's copy. The gossip window stayed open because the
delegating getter never saw the close.

Fix: use owner_.closeGossip() / owner_.closeVendor() which properly
delegate to QuestHandler/InventoryHandler to close the canonical state.

Affected: InventoryHandler (3 sites: mail, trainer, bank opening),
MovementHandler (1 site: taxi opening), QuestHandler (2 sites: gossip
opening closes vendor).
This commit is contained in:
Kelsi 2026-03-28 14:36:14 -07:00
parent e5959dceb5
commit 504d112625
3 changed files with 6 additions and 6 deletions

View file

@ -1508,7 +1508,7 @@ void QuestHandler::handleGossipMessage(network::Packet& packet) {
if (questDetailsOpen_) return; // Don't reopen gossip while viewing quest
gossipWindowOpen_ = true;
if (owner_.addonEventCallback_) owner_.addonEventCallback_("GOSSIP_SHOW", {});
owner_.vendorWindowOpen = false; // Close vendor if gossip opens
owner_.closeVendor(); // Close vendor if gossip opens
// Update known quest-log entries based on gossip quests.
bool hasAvailableQuest = false;
@ -1612,7 +1612,7 @@ void QuestHandler::handleQuestgiverQuestList(network::Packet& packet) {
currentGossip_ = std::move(data);
gossipWindowOpen_ = true;
if (owner_.addonEventCallback_) owner_.addonEventCallback_("GOSSIP_SHOW", {});
owner_.vendorWindowOpen = false;
owner_.closeVendor();
bool hasAvailableQuest = false;
bool hasRewardQuest = false;