From dd5c083124de4eed518930dc5963c9129b387edc Mon Sep 17 00:00:00 2001
From: scrawl <scrawl@baseoftrash.de>
Date: Mon, 24 Sep 2012 00:42:05 +0200
Subject: [PATCH] fix the race selection escape crash

---
 apps/openmw/mwgui/race.cpp                | 19 +++++++++++++------
 apps/openmw/mwgui/race.hpp                |  3 ++-
 apps/openmw/mwrender/characterpreview.cpp |  1 +
 3 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/apps/openmw/mwgui/race.cpp b/apps/openmw/mwgui/race.cpp
index 3fe70d959..99cb5f3b2 100644
--- a/apps/openmw/mwgui/race.cpp
+++ b/apps/openmw/mwgui/race.cpp
@@ -33,11 +33,6 @@ RaceDialog::RaceDialog(MWBase::WindowManager& parWindowManager)
     setText("AppearanceT", mWindowManager.getGameSettingString("sRaceMenu1", "Appearance"));
     getWidget(mPreviewImage, "PreviewImage");
 
-    MWBase::Environment::get().getWorld ()->setupExternalRendering (mPreview);
-    mPreview.update (0);
-
-    mPreviewImage->setImageTexture ("CharacterHeadPreview");
-
     getWidget(mHeadRotate, "HeadRotate");
     mHeadRotate->setScrollRange(50);
     mHeadRotate->setScrollPosition(20);
@@ -107,6 +102,12 @@ void RaceDialog::open()
     updateRaces();
     updateSkills();
     updateSpellPowers();
+
+    mPreview = new MWRender::RaceSelectionPreview();
+    MWBase::Environment::get().getWorld ()->setupExternalRendering (*mPreview);
+    mPreview->update (0);
+
+    mPreviewImage->setImageTexture ("CharacterHeadPreview");
 }
 
 
@@ -138,6 +139,12 @@ int wrap(int index, int max)
         return index;
 }
 
+void RaceDialog::close()
+{
+    delete mPreview;
+    mPreview = 0;
+}
+
 // widget controls
 
 void RaceDialog::onOkClicked(MyGUI::Widget* _sender)
@@ -154,7 +161,7 @@ void RaceDialog::onHeadRotate(MyGUI::ScrollBar*, size_t _position)
 {
     float angle = (float(_position) / 49.f - 0.5) * 3.14 * 2;
     float diff = angle - mCurrentAngle;
-    mPreview.update (diff);
+    mPreview->update (diff);
     mCurrentAngle += diff;
 }
 
diff --git a/apps/openmw/mwgui/race.hpp b/apps/openmw/mwgui/race.hpp
index 0505e58e1..c4734eae8 100644
--- a/apps/openmw/mwgui/race.hpp
+++ b/apps/openmw/mwgui/race.hpp
@@ -46,6 +46,7 @@ namespace MWGui
 
         void setNextButtonShow(bool shown);
         virtual void open();
+        virtual void close();
 
         // Events
         typedef MyGUI::delegates::CMultiDelegate0 EventHandle_Void;
@@ -94,7 +95,7 @@ namespace MWGui
 
         float mCurrentAngle;
 
-        MWRender::RaceSelectionPreview mPreview;
+        MWRender::RaceSelectionPreview* mPreview;
     };
 }
 #endif
diff --git a/apps/openmw/mwrender/characterpreview.cpp b/apps/openmw/mwrender/characterpreview.cpp
index c8852bff5..4a0554568 100644
--- a/apps/openmw/mwrender/characterpreview.cpp
+++ b/apps/openmw/mwrender/characterpreview.cpp
@@ -25,6 +25,7 @@ namespace MWRender
         , mPosition(position)
         , mLookAt(lookAt)
         , mCharacter(character)
+        , mAnimation(NULL)
     {
 
     }