diff --git a/cockatrice/src/game/zones/table_zone.cpp b/cockatrice/src/game/zones/table_zone.cpp index af4b82e18..0aace73ca 100644 --- a/cockatrice/src/game/zones/table_zone.cpp +++ b/cockatrice/src/game/zones/table_zone.cpp @@ -213,16 +213,24 @@ void TableZone::reorganizeCards() void TableZone::toggleTapped() { - QList selectedItems = scene()->selectedItems(); - bool tapAll = false; - for (int i = 0; i < selectedItems.size(); i++) - if (!qgraphicsitem_cast(selectedItems[i])->getTapped()) { - tapAll = true; - break; + QList selectedItemsRaw = scene()->selectedItems(); + QList selectedItems; + + auto isCardOnTable = [](const QGraphicsItem *item) { + if (auto card = qgraphicsitem_cast(item)) { + return card->getZone()->getName() == "table"; } + return false; + }; + + std::copy_if(selectedItemsRaw.begin(), selectedItemsRaw.end(), std::back_inserter(selectedItems), isCardOnTable); + + bool tapAll = std::any_of(selectedItems.begin(), selectedItems.end(), [](const QGraphicsItem *item) { + return !qgraphicsitem_cast(item)->getTapped(); + }); QList cmdList; - for (int i = 0; i < selectedItems.size(); i++) { - CardItem *temp = qgraphicsitem_cast(selectedItems[i]); + for (const auto &selectedItem : selectedItems) { + CardItem *temp = qgraphicsitem_cast(selectedItem); if (temp->getTapped() != tapAll) { Command_SetCardAttr *cmd = new Command_SetCardAttr; cmd->set_zone(name.toStdString());