summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-04-22 21:54:59 +0300
committerAndrei Karas <akaras@inbox.ru>2014-04-22 21:54:59 +0300
commitbcd95847a435bb3aab90bdb3c2fdada6063efc2e (patch)
tree9a9cb19d2cec9c73d3b8c9eaeb4c781b0ac48642 /src/gui
parentff6c93b16f408a2ef10e47a4168c59ab6c4fdafb (diff)
downloadmanaplus-bcd95847a435bb3aab90bdb3c2fdada6063efc2e.tar.gz
manaplus-bcd95847a435bb3aab90bdb3c2fdada6063efc2e.tar.bz2
manaplus-bcd95847a435bb3aab90bdb3c2fdada6063efc2e.tar.xz
manaplus-bcd95847a435bb3aab90bdb3c2fdada6063efc2e.zip
Fix crash if start trade with opened storage.
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/widgets/itemcontainer.cpp2
-rw-r--r--src/gui/widgets/itemcontainer.h3
-rw-r--r--src/gui/windows/inventorywindow.cpp17
-rw-r--r--src/gui/windows/inventorywindow.h2
4 files changed, 22 insertions, 2 deletions
diff --git a/src/gui/widgets/itemcontainer.cpp b/src/gui/widgets/itemcontainer.cpp
index ee2e35920..f24be7737 100644
--- a/src/gui/widgets/itemcontainer.cpp
+++ b/src/gui/widgets/itemcontainer.cpp
@@ -507,7 +507,7 @@ void ItemContainer::mouseReleased(MouseEvent &event)
Net::getInventoryHandler()->moveItem(mSelectedIndex, index);
selectNone();
}
- else
+ else if (mInventory)
{
const DragDropSource src = dragDrop.getSource();
DragDropSource dst = DRAGDROP_SOURCE_EMPTY;
diff --git a/src/gui/widgets/itemcontainer.h b/src/gui/widgets/itemcontainer.h
index f7bc44849..06e9fd459 100644
--- a/src/gui/widgets/itemcontainer.h
+++ b/src/gui/widgets/itemcontainer.h
@@ -131,6 +131,9 @@ class ItemContainer final : public Widget,
bool getClickCount() const A_WARN_UNUSED
{ return mClicks; }
+ void unsetInventory()
+ { mInventory = nullptr; }
+
private:
enum Direction
{
diff --git a/src/gui/windows/inventorywindow.cpp b/src/gui/windows/inventorywindow.cpp
index c2a4b4636..01e5e052d 100644
--- a/src/gui/windows/inventorywindow.cpp
+++ b/src/gui/windows/inventorywindow.cpp
@@ -271,7 +271,8 @@ void InventoryWindow::postInit()
InventoryWindow::~InventoryWindow()
{
invInstances.remove(this);
- mInventory->removeInventoyListener(this);
+ if (mInventory)
+ mInventory->removeInventoyListener(this);
if (!invInstances.empty())
invInstances.front()->updateDropButton();
@@ -681,7 +682,10 @@ void InventoryWindow::close()
else
{
if (Net::getInventoryHandler())
+ {
Net::getInventoryHandler()->closeStorage(Inventory::STORAGE);
+ Net::getInventoryHandler()->forgotStorage();
+ }
scheduleDelete();
}
}
@@ -806,3 +810,14 @@ void InventoryWindow::setVisible(bool visible)
mSortDropDown->hideDrop();
Window::setVisible(visible);
}
+
+void InventoryWindow::unsetInventory()
+{
+ if (mInventory)
+ {
+ mInventory->removeInventoyListener(this);
+ if (mItems)
+ mItems->unsetInventory();
+ }
+ mInventory = nullptr;
+}
diff --git a/src/gui/windows/inventorywindow.h b/src/gui/windows/inventorywindow.h
index 7e47e0362..10e1e21e2 100644
--- a/src/gui/windows/inventorywindow.h
+++ b/src/gui/windows/inventorywindow.h
@@ -152,6 +152,8 @@ class InventoryWindow final : public Window,
void setVisible(bool visible) override final;
+ void unsetInventory();
+
static bool isAnyInputFocused();
private: