From ab9e0ea04e66e3d3866e5bad678ffc4177a11781 Mon Sep 17 00:00:00 2001
From: Andrei Karas <akaras@inbox.ru>
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