diff --git a/cockatrice/src/abstractcarditem.cpp b/cockatrice/src/abstractcarditem.cpp index 22e0dade..ca7e22db 100644 --- a/cockatrice/src/abstractcarditem.cpp +++ b/cockatrice/src/abstractcarditem.cpp @@ -176,6 +176,8 @@ void AbstractCardItem::setHovered(bool _hovered) if (isHovered == _hovered) return; + if (_hovered) + processHoverEvent(); isHovered = _hovered; setZValue(_hovered ? 2000000004 : realZValue); update(); @@ -226,19 +228,6 @@ void AbstractCardItem::processHoverEvent() emit hovered(this); } -void AbstractCardItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) -{ - processHoverEvent(); - isHovered = true; - QGraphicsItem::hoverEnterEvent(event); -} - -void AbstractCardItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) -{ - isHovered = false; - QGraphicsItem::hoverLeaveEvent(event); -} - QVariant AbstractCardItem::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) { if (change == ItemSelectedHasChanged) { diff --git a/cockatrice/src/abstractcarditem.h b/cockatrice/src/abstractcarditem.h index e1ca65c8..0f592d31 100644 --- a/cockatrice/src/abstractcarditem.h +++ b/cockatrice/src/abstractcarditem.h @@ -55,8 +55,6 @@ protected: void transformPainter(QPainter *painter, const QSizeF &translatedSize, int angle); void mousePressEvent(QGraphicsSceneMouseEvent *event); void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); - void hoverEnterEvent(QGraphicsSceneHoverEvent *event); - void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value); }; diff --git a/cockatrice/src/carditem.cpp b/cockatrice/src/carditem.cpp index d571f400..da5ddbf3 100644 --- a/cockatrice/src/carditem.cpp +++ b/cockatrice/src/carditem.cpp @@ -106,19 +106,35 @@ CardItem::CardItem(Player *_owner, const QString &_name, int _cardid, QGraphicsI CardItem::~CardItem() { - if (owner->getCardMenu() == cardMenu) - owner->setCardMenu(0); + prepareDelete(); + deleteDragItem(); +} + +void CardItem::prepareDelete() +{ + if (owner) { + if (owner->getCardMenu() == cardMenu) + owner->setCardMenu(0); + owner = 0; + } delete cardMenu; + cardMenu = 0; while (!attachedCards.isEmpty()) { attachedCards.first()->setZone(0); // so that it won't try to call reorganizeCards() attachedCards.first()->setAttachedTo(0); } - if (attachedTo) + if (attachedTo) { attachedTo->removeAttachedCard(this); + attachedTo = 0; + } +} - deleteDragItem(); +void CardItem::deleteLater() +{ + prepareDelete(); + AbstractCardItem::deleteLater(); } void CardItem::retranslateUi() @@ -236,10 +252,12 @@ void CardItem::setAttachedTo(CardItem *_attachedTo) gridPoint.setX(-1); attachedTo = _attachedTo; if (attachedTo) { + setParentItem(attachedTo->getZone()); attachedTo->addAttachedCard(this); if (zone != attachedTo->getZone()) attachedTo->getZone()->reorganizeCards(); - } + } else + setParentItem(zone); if (zone) zone->reorganizeCards(); diff --git a/cockatrice/src/carditem.h b/cockatrice/src/carditem.h index 586d2147..52642abb 100644 --- a/cockatrice/src/carditem.h +++ b/cockatrice/src/carditem.h @@ -35,6 +35,9 @@ private: QMenu *cardMenu, *moveMenu; void playCard(QGraphicsSceneMouseEvent *event); + void prepareDelete(); +public slots: + void deleteLater(); public: enum { Type = typeCard }; int type() const { return Type; } diff --git a/cockatrice/src/gamescene.cpp b/cockatrice/src/gamescene.cpp index 55b7079c..e92fb820 100644 --- a/cockatrice/src/gamescene.cpp +++ b/cockatrice/src/gamescene.cpp @@ -170,8 +170,12 @@ bool GameScene::event(QEvent *event) CardItem *card = qgraphicsitem_cast(itemList[i]); if (!card) continue; - if (card->getZone() != zone) + if (card->getAttachedTo()) { + if (card->getAttachedTo()->getZone() != zone) + continue; + } else if (card->getZone() != zone) continue; + if (card->getRealZValue() > maxZ) { maxZ = card->getRealZValue(); maxZCard = card; diff --git a/cockatrice/src/player.cpp b/cockatrice/src/player.cpp index 7872c17a..c13c13bf 100644 --- a/cockatrice/src/player.cpp +++ b/cockatrice/src/player.cpp @@ -252,7 +252,7 @@ Player::Player(ServerInfo_User *info, int _id, bool _local, TabGame *_parent) Player::~Player() { - qDebug("Player destructor"); + qDebug() << "Player destructor:" << getName(); static_cast(scene())->removePlayer(this); @@ -889,10 +889,6 @@ void Player::eventAttachCard(Event_AttachCard *event) CardItem *oldParent = startCard->getAttachedTo(); - if (targetZone) - startCard->setParentItem(targetZone); - else - startCard->setParentItem(startZone); startCard->setAttachedTo(targetCard); startZone->reorganizeCards();