summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/npcdialog.cpp6
-rw-r--r--src/gui/npcdialog.h5
-rw-r--r--src/gui/quitdialog.cpp5
3 files changed, 14 insertions, 2 deletions
diff --git a/src/gui/npcdialog.cpp b/src/gui/npcdialog.cpp
index 3af0594f6..4fe5bf8ab 100644
--- a/src/gui/npcdialog.cpp
+++ b/src/gui/npcdialog.cpp
@@ -149,7 +149,6 @@ NpcDialog::~NpcDialog()
mMinusButton = 0;
instances.remove(this);
-
}
void NpcDialog::setText(const std::string &text)
@@ -418,7 +417,10 @@ void NpcDialog::closeAll()
DialogList::iterator it_end = instances.end();
for (; it != it_end; ++it)
- (*it)->close();
+ {
+ if (*it)
+ (*it)->close();
+ }
}
void NpcDialog::buildLayout()
diff --git a/src/gui/npcdialog.h b/src/gui/npcdialog.h
index eee4b32e2..c4a567c06 100644
--- a/src/gui/npcdialog.h
+++ b/src/gui/npcdialog.h
@@ -171,6 +171,11 @@ class NpcDialog : public Window, public gcn::ActionListener,
*/
static void closeAll();
+ /**
+ * Closes all instances and destroy also net handler dialogs.
+ */
+ static void destroyAll();
+
private:
typedef std::list<NpcDialog*> DialogList;
static DialogList instances;
diff --git a/src/gui/quitdialog.cpp b/src/gui/quitdialog.cpp
index 221a94747..24dc953be 100644
--- a/src/gui/quitdialog.cpp
+++ b/src/gui/quitdialog.cpp
@@ -24,6 +24,7 @@
#include "client.h"
#include "gui/chat.h"
+#include "gui/npcdialog.h"
#include "gui/sdlinput.h"
#include "gui/viewport.h"
@@ -34,6 +35,7 @@
#include "net/charhandler.h"
#include "net/gamehandler.h"
+#include "net/npchandler.h"
#include "net/net.h"
#include "utils/gettext.h"
@@ -137,11 +139,13 @@ void QuitDialog::action(const gcn::ActionEvent &event)
}
else if (mLogoutQuit->isSelected())
{
+ Client::closeDialogs();
Client::setState(STATE_EXIT);
}
else if (Net::getGameHandler()->isConnected()
&& mSwitchAccountServer->isSelected())
{
+ Client::closeDialogs();
Client::setState(STATE_SWITCH_SERVER);
}
else if (mSwitchCharacter->isSelected())
@@ -149,6 +153,7 @@ void QuitDialog::action(const gcn::ActionEvent &event)
assert(Client::getState() == STATE_GAME);
Net::getCharHandler()->switchCharacter();
+ Client::closeDialogs();
}
}
scheduleDelete();