summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2017-01-30 19:10:14 +0300
committerAndrei Karas <akaras@inbox.ru>2017-01-30 20:39:49 +0300
commit5f8496ca103fabb4cfc265d8d936e194129a17ef (patch)
tree60314fbebf3773e1a6df6d32a9fbd67b4a482071
parent6fa245a1cb5037118ba19a084f219abcc00f6294 (diff)
downloadmanaverse-5f8496ca103fabb4cfc265d8d936e194129a17ef.tar.gz
manaverse-5f8496ca103fabb4cfc265d8d936e194129a17ef.tar.bz2
manaverse-5f8496ca103fabb4cfc265d8d936e194129a17ef.tar.xz
manaverse-5f8496ca103fabb4cfc265d8d936e194129a17ef.zip
Clean buy dialog dungling pointer if buy dialog was destroyed.
-rw-r--r--src/gui/windows/buydialog.cpp1
-rw-r--r--src/net/buysellhandler.h5
-rw-r--r--src/net/ea/buysellhandler.cpp6
-rw-r--r--src/net/ea/buysellhandler.h3
4 files changed, 15 insertions, 0 deletions
diff --git a/src/gui/windows/buydialog.cpp b/src/gui/windows/buydialog.cpp
index b0e7aaa04..ebf4ef8a4 100644
--- a/src/gui/windows/buydialog.cpp
+++ b/src/gui/windows/buydialog.cpp
@@ -409,6 +409,7 @@ BuyDialog::~BuyDialog()
{
delete2(mShopItems);
instances.remove(this);
+ buySellHandler->cleanDialogReference(this);
}
void BuyDialog::setMoney(const int amount)
diff --git a/src/net/buysellhandler.h b/src/net/buysellhandler.h
index 79cb60b6c..e6f66129c 100644
--- a/src/net/buysellhandler.h
+++ b/src/net/buysellhandler.h
@@ -25,6 +25,8 @@
#include "resources/item/shopitem.h"
+class BuyDialog;
+
namespace Net
{
@@ -52,6 +54,9 @@ class BuySellHandler notfinal
const int amount) const = 0;
virtual void close() const = 0;
+
+ virtual void cleanDialogReference(const BuyDialog *const dialog)
+ const = 0;
};
} // namespace Net
diff --git a/src/net/ea/buysellhandler.cpp b/src/net/ea/buysellhandler.cpp
index 9a147347a..21769cef4 100644
--- a/src/net/ea/buysellhandler.cpp
+++ b/src/net/ea/buysellhandler.cpp
@@ -35,4 +35,10 @@ BuySellHandler::BuySellHandler()
BuySellRecv::mBuyDialog = nullptr;
}
+void BuySellHandler::cleanDialogReference(const BuyDialog *const dialog) const
+{
+ if (BuySellRecv::mBuyDialog == dialog)
+ BuySellRecv::mBuyDialog = nullptr;
+}
+
} // namespace Ea
diff --git a/src/net/ea/buysellhandler.h b/src/net/ea/buysellhandler.h
index 4343cd256..2c5e1caad 100644
--- a/src/net/ea/buysellhandler.h
+++ b/src/net/ea/buysellhandler.h
@@ -34,6 +34,9 @@ class BuySellHandler notfinal : public Net::BuySellHandler
BuySellHandler();
A_DELETE_COPY(BuySellHandler)
+
+ void cleanDialogReference(const BuyDialog *const dialog) const
+ override final;
};
} // namespace Ea