diff options
author | Andrei Karas <akaras@inbox.ru> | 2014-07-24 12:07:34 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2014-07-24 12:07:34 +0300 |
commit | 9c36b0237767cc42bfc74d77935f229f139a6663 (patch) | |
tree | 67adb5454292ede354acca08a87e3935704e3548 | |
parent | cc965406e7903e890fc0c797c2684efc5c4624a6 (diff) | |
download | manaverse-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.cpp | 5 | ||||
-rw-r--r-- | src/gui/windows/setupwindow.cpp | 12 | ||||
-rw-r--r-- | src/gui/windows/setupwindow.h | 2 |
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(); } |