From 1b286973dd1bbd826643a54964bed91723d2c84d Mon Sep 17 00:00:00 2001 From: Max-Wilhelm Bruker Date: Sat, 17 Jul 2010 19:22:50 +0200 Subject: [PATCH] crash fix; weird behaviour fix --- cockatrice/src/carddragitem.cpp | 7 ++++--- cockatrice/src/player.cpp | 3 +++ common/server_protocolhandler.cpp | 3 +++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/cockatrice/src/carddragitem.cpp b/cockatrice/src/carddragitem.cpp index 53094d20..ecadf058 100644 --- a/cockatrice/src/carddragitem.cpp +++ b/cockatrice/src/carddragitem.cpp @@ -52,12 +52,13 @@ void CardDragItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) QPointF sp = pos(); sc->removeItem(this); - if (currentZone) { - CardZone *startZone = static_cast(item)->getZone(); + CardZone *startZone = static_cast(item)->getZone(); + if (currentZone && !(static_cast(item)->getAttachedTo() && (startZone == currentZone))) { currentZone->handleDropEvent(id, startZone, (sp - currentZone->scenePos()).toPoint(), faceDown); for (int i = 0; i < childDrags.size(); i++) { CardDragItem *c = static_cast(childDrags[i]); - currentZone->handleDropEvent(c->id, startZone, (sp - currentZone->scenePos() + c->getHotSpot()).toPoint(), faceDown); + if (!(static_cast(c->item)->getAttachedTo() && (startZone == currentZone))) + currentZone->handleDropEvent(c->id, startZone, (sp - currentZone->scenePos() + c->getHotSpot()).toPoint(), faceDown); sc->removeItem(c); } } diff --git a/cockatrice/src/player.cpp b/cockatrice/src/player.cpp index a64666a0..486fa2ab 100644 --- a/cockatrice/src/player.cpp +++ b/cockatrice/src/player.cpp @@ -628,6 +628,9 @@ void Player::eventMoveCard(Event_MoveCard *event) if (!card) return; + if (card->getAttachedTo() && (startZone != targetZone)) + card->setAttachedTo(0); + card->deleteDragItem(); card->setId(event->getNewCardId()); diff --git a/common/server_protocolhandler.cpp b/common/server_protocolhandler.cpp index 1df72ee4..e752588f 100644 --- a/common/server_protocolhandler.cpp +++ b/common/server_protocolhandler.cpp @@ -518,6 +518,9 @@ ResponseCode Server_ProtocolHandler::moveCard(Server_Game *game, Server_Player * return RespNameNotFound; if (startzone != targetzone) { + if (card->getParentCard()) + card->setParentCard(0); + const QList &attachedCards = card->getAttachedCards(); for (int i = 0; i < attachedCards.size(); ++i) unattachCard(game, attachedCards[i]->getZone()->getPlayer(), cont, attachedCards[i]);