https://github.com/libsdl-org/Maelstrom/commit/8da2d052a2ffd31c449f6d6cab05cdab7eaab864
From 8da2d052a2ffd31c449f6d6cab05cdab7eaab864 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Sat, 13 Oct 2012 17:18:38 -0700
Subject: [PATCH] Fixed crash deleting panels while a button press was being
dispatched
---
screenlib/UIManager.cpp | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
diff --git a/screenlib/UIManager.cpp b/screenlib/UIManager.cpp
index 7f40cc02..7ec28915 100644
--- a/screenlib/UIManager.cpp
+++ b/screenlib/UIManager.cpp
@@ -280,6 +280,14 @@ UIManager::Poll()
panel->Poll();
}
+
+ // Clean up any deleted panels when we're done...
+ if (!m_delete.empty()) {
+ for (i = 0; i < m_delete.length(); ++i) {
+ delete m_delete[i];
+ }
+ m_delete.clear();
+ }
}
void
@@ -307,14 +315,6 @@ UIManager::Draw(bool fullUpdate)
m_screen->Update();
m_screen->FadeIn();
}
-
- // Clean up any deleted panels when we're done...
- if (!m_delete.empty()) {
- for (i = 0; i < m_delete.length(); ++i) {
- delete m_delete[i];
- }
- m_delete.clear();
- }
}
bool
@@ -336,6 +336,9 @@ UIManager::HandleEvent(const SDL_Event &event)
SetSize(m_screen->Width(), m_screen->Height());
}
+ // In case it's not called any other time...
+ Poll();
+
for (unsigned i = m_visible.length(); i--; ) {
UIPanel *panel = m_visible[i];