summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <thorbjorn@lindeijer.nl>2012-08-02 03:43:30 +0200
committerThorbjørn Lindeijer <thorbjorn@lindeijer.nl>2012-08-02 03:43:30 +0200
commitbb45602e36b4e8869c2d888277d706124e131904 (patch)
tree23a627aba69f8afdf3cf528cfb1a65cced791915
parent33032808e024b6dade5b751f15f4878edd507787 (diff)
downloadmana-bb45602e36b4e8869c2d888277d706124e131904.tar.gz
mana-bb45602e36b4e8869c2d888277d706124e131904.tar.bz2
mana-bb45602e36b4e8869c2d888277d706124e131904.tar.xz
mana-bb45602e36b4e8869c2d888277d706124e131904.zip
Crash fix when re-entering the game
Throw away the old layout rather than trying to reuse it and crashing cause of collisions.
-rw-r--r--src/game.cpp3
-rw-r--r--src/gui/widgets/container.cpp6
-rw-r--r--src/gui/widgets/container.h6
3 files changed, 15 insertions, 0 deletions
diff --git a/src/game.cpp b/src/game.cpp
index 2a8005f5..824eb7d1 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -252,6 +252,9 @@ Game::~Game()
delete mMinimapWindow;
delete mMiniStatusWindow;
+ WindowContainer *top = static_cast<WindowContainer*>(gui->getTop());
+ top->clearLayout();
+
destroyGuiWindows();
del_0(actorSpriteManager)
diff --git a/src/gui/widgets/container.cpp b/src/gui/widgets/container.cpp
index a2b3ee78..61211ddd 100644
--- a/src/gui/widgets/container.cpp
+++ b/src/gui/widgets/container.cpp
@@ -62,3 +62,9 @@ void Container::updateLayout()
int h = area.height;
getLayout().reflow(w, h);
}
+
+void Container::clearLayout()
+{
+ delete mLayoutHelper;
+ mLayoutHelper = 0;
+}
diff --git a/src/gui/widgets/container.h b/src/gui/widgets/container.h
index 2b8039f4..0f1d1bb7 100644
--- a/src/gui/widgets/container.h
+++ b/src/gui/widgets/container.h
@@ -65,6 +65,12 @@ class Container : public gcn::Container
*/
void updateLayout();
+ /**
+ * Removes the layout, making it forget about any widgets (needed when
+ * reusing a container with new widgets).
+ */
+ void clearLayout();
+
private:
LayoutHelper *mLayoutHelper;
};