summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-07-24 12:07:34 +0300
committerAndrei Karas <akaras@inbox.ru>2014-07-24 12:07:34 +0300
commit9c36b0237767cc42bfc74d77935f229f139a6663 (patch)
tree67adb5454292ede354acca08a87e3935704e3548
parentcc965406e7903e890fc0c797c2684efc5c4624a6 (diff)
downloadmanaverse-9c36b0237767cc42bfc74d77935f229f139a6663.tar.gz
manaverse-9c36b0237767cc42bfc74d77935f229f139a6663.tar.bz2
manaverse-9c36b0237767cc42bfc74d77935f229f139a6663.tar.xz
manaverse-9c36b0237767cc42bfc74d77935f229f139a6663.zip
Fix possible crash in "reset windows".
-rw-r--r--src/gui/widgets/window.cpp5
-rw-r--r--src/gui/windows/setupwindow.cpp12
-rw-r--r--src/gui/windows/setupwindow.h2
3 files changed, 19 insertions, 0 deletions
diff --git a/src/gui/widgets/window.cpp b/src/gui/widgets/window.cpp
index caf7dae91..f2f7c1dd1 100644
--- a/src/gui/widgets/window.cpp
+++ b/src/gui/widgets/window.cpp
@@ -79,6 +79,8 @@
#include "gui/fonts/font.h"
+#include "gui/windows/setupwindow.h"
+
#include "gui/widgets/containerplacer.h"
#include "gui/widgets/layout.h"
@@ -219,6 +221,9 @@ Window::~Window()
if (gui)
gui->removeDragged(this);
+ if (setupWindow)
+ setupWindow->unregisterWindowForReset(this);
+
client->windowRemoved(this);
saveWindowState();
diff --git a/src/gui/windows/setupwindow.cpp b/src/gui/windows/setupwindow.cpp
index 7239061ff..93556ab08 100644
--- a/src/gui/windows/setupwindow.cpp
+++ b/src/gui/windows/setupwindow.cpp
@@ -243,6 +243,18 @@ void SetupWindow::registerWindowForReset(Window *const window)
mWindowsToReset.push_back(window);
}
+void SetupWindow::unregisterWindowForReset(Window *const window)
+{
+ FOR_EACH (std::list<Window*>::const_iterator, it, mWindowsToReset)
+ {
+ if (*it == window)
+ {
+ mWindowsToReset.erase(it);
+ return;
+ }
+ }
+}
+
void SetupWindow::doCancel()
{
setVisible(false);
diff --git a/src/gui/windows/setupwindow.h b/src/gui/windows/setupwindow.h
index e604bf0de..40e820fcf 100644
--- a/src/gui/windows/setupwindow.h
+++ b/src/gui/windows/setupwindow.h
@@ -62,6 +62,8 @@ class SetupWindow final : public Window,
void registerWindowForReset(Window *const window);
+ void unregisterWindowForReset(Window *const window);
+
void clearWindowsForReset()
{ mWindowsToReset.clear(); }