From ab9e0ea04e66e3d3866e5bad678ffc4177a11781 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sun, 29 Sep 2013 14:31:02 +0300 Subject: fix crash if open rename map item dialog and walk to other map. --- src/gui/popupmenu.cpp | 32 +++++++++++++++++++++----------- src/gui/popupmenu.h | 6 +++--- 2 files changed, 24 insertions(+), 14 deletions(-) (limited to 'src/gui') diff --git a/src/gui/popupmenu.cpp b/src/gui/popupmenu.cpp index c12365cc6..410064f7d 100644 --- a/src/gui/popupmenu.cpp +++ b/src/gui/popupmenu.cpp @@ -2668,14 +2668,29 @@ void PopupMenu::showGMPopup() RenameListener::RenameListener() : gcn::ActionListener(), - mMapItem(nullptr), + mMapItemX(0), + mMapItemY(0), mDialog(nullptr) { } +void RenameListener::setMapItem(MapItem *const mapItem) +{ + if (mapItem) + { + mMapItemX = mapItem->getX(); + mMapItemY = mapItem->getY(); + } + else + { + mMapItemX = 0; + mMapItemY = 0; + } +} + void RenameListener::action(const gcn::ActionEvent &event) { - if (event.getId() == "ok" && mMapItem && viewport && mDialog) + if (event.getId() == "ok" && viewport && mDialog) { Map *const map = viewport->getMap(); if (!map) @@ -2685,16 +2700,11 @@ void RenameListener::action(const gcn::ActionEvent &event) MapItem *item = nullptr; if (sl) { - item = sl->getTile(mMapItem->getX(), mMapItem->getY()); - if (!item) - { - sl->setTile(mMapItem->getX(), mMapItem->getY(), - mMapItem->getType()); - item = sl->getTile(mMapItem->getX(), mMapItem->getY()); - } - item->setComment(mDialog->getText()); + item = sl->getTile(mMapItemX, mMapItemY); + if (item) + item->setComment(mDialog->getText()); } - item = map->findPortalXY(mMapItem->getX(), mMapItem->getY()); + item = map->findPortalXY(mMapItemX, mMapItemY); if (item) item->setComment(mDialog->getText()); diff --git a/src/gui/popupmenu.h b/src/gui/popupmenu.h index 069fb466a..3865c2bd3 100644 --- a/src/gui/popupmenu.h +++ b/src/gui/popupmenu.h @@ -56,14 +56,14 @@ class RenameListener final : public gcn::ActionListener void action(const gcn::ActionEvent &event) override; - void setMapItem(MapItem* mapItem) - { mMapItem = mapItem; } + void setMapItem(MapItem *const mapItem); void setDialog(TextDialog *dialog) { mDialog = dialog; } private: - MapItem *mMapItem; + int mMapItemX; + int mMapItemY; TextDialog *mDialog; }; -- cgit v1.2.3-70-g09d2