projects
/
supertux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Implemented delayed destruction of Dialog in MenuManager to avoid "delete this" type...
[supertux.git]
/
src
/
gui
/
menu_manager.cpp
diff --git
a/src/gui/menu_manager.cpp
b/src/gui/menu_manager.cpp
index
b493ba6
..
a3c4b8e
100644
(file)
--- a/
src/gui/menu_manager.cpp
+++ b/
src/gui/menu_manager.cpp
@@
-136,6
+136,8
@@
public:
MenuManager::MenuManager() :
m_dialog(),
MenuManager::MenuManager() :
m_dialog(),
+ m_has_next_dialog(false),
+ m_next_dialog(),
m_menu_stack(),
m_transition(new MenuTransition)
{
m_menu_stack(),
m_transition(new MenuTransition)
{
@@
-190,6
+192,12
@@
MenuManager::event(const SDL_Event& ev)
void
MenuManager::draw(DrawingContext& context)
{
void
MenuManager::draw(DrawingContext& context)
{
+ if (m_has_next_dialog)
+ {
+ m_dialog = std::move(m_next_dialog);
+ m_has_next_dialog = false;
+ }
+
if (m_transition->is_active())
{
m_transition->update();
if (m_transition->is_active())
{
m_transition->update();
@@
-222,7
+230,10
@@
MenuManager::draw(DrawingContext& context)
void
MenuManager::set_dialog(std::unique_ptr<Dialog> dialog)
{
void
MenuManager::set_dialog(std::unique_ptr<Dialog> dialog)
{
- m_dialog = std::move(dialog);
+ // delay reseting m_dialog to a later point, as otherwise the Dialog
+ // can't unset itself without ending up with "delete this" problems
+ m_next_dialog = std::move(dialog);
+ m_has_next_dialog = true;
}
void
}
void