diff --git a/cockatrice/src/game_graphics/player/menu/player_menu.cpp b/cockatrice/src/game_graphics/player/menu/player_menu.cpp index 7c90211df..efe0fe15a 100644 --- a/cockatrice/src/game_graphics/player/menu/player_menu.cpp +++ b/cockatrice/src/game_graphics/player/menu/player_menu.cpp @@ -74,6 +74,11 @@ void PlayerMenu::setMenusForGraphicItems() QMenu *PlayerMenu::updateCardMenu(const CardItem *card) { + if (cardMenu) { + cardMenu->deleteLater(); + cardMenu = nullptr; + } + if (!card) { emit cardMenuUpdated(nullptr); return nullptr; @@ -87,11 +92,11 @@ QMenu *PlayerMenu::updateCardMenu(const CardItem *card) return nullptr; } - CardMenu *menu = new CardMenu(player, card, shortcutsActive); - connect(menu, &CardMenu::cardInfoRequested, this, &PlayerMenu::cardInfoRequested); - emit cardMenuUpdated(menu); + cardMenu = new CardMenu(player, card, shortcutsActive); + connect(cardMenu, &CardMenu::cardInfoRequested, this, &PlayerMenu::cardInfoRequested); + emit cardMenuUpdated(cardMenu); - return menu; + return cardMenu; } void PlayerMenu::retranslateUi() diff --git a/cockatrice/src/game_graphics/player/menu/player_menu.h b/cockatrice/src/game_graphics/player/menu/player_menu.h index a6e89fab0..6f59c6307 100644 --- a/cockatrice/src/game_graphics/player/menu/player_menu.h +++ b/cockatrice/src/game_graphics/player/menu/player_menu.h @@ -97,6 +97,7 @@ private: * player->getCounters(). */ QList managedComponents; + CardMenu *cardMenu = nullptr; bool shortcutsActive = false; /** @brief Creates component, adds it as a submenu of playerMenu, and registers in managedComponents. */ diff --git a/cockatrice/src/interface/widgets/tabs/tab_game.cpp b/cockatrice/src/interface/widgets/tabs/tab_game.cpp index dbf4a5a4a..90791561d 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_game.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_game.cpp @@ -1026,8 +1026,8 @@ void TabGame::setCardMenu(CardMenu *menu) if (menu) { aCardMenu->setMenu(menu); - } else { - aCardMenu->setMenu(new QMenu); + } else if (aCardMenu->menu()) { + aCardMenu->menu()->clear(); } }