aboutsummaryrefslogtreecommitdiff
path: root/gui/gui-manager.cpp
diff options
context:
space:
mode:
authorJohannes Schickel2013-10-18 00:51:52 +0200
committerJohannes Schickel2013-10-19 22:18:22 +0200
commitfa90f9797c7ffb6fdd416ac2ebdde3e6dab2fb52 (patch)
tree2aa31291c9e81106fef11303e773eb06b4e4c0c6 /gui/gui-manager.cpp
parentbb1d49ba9cbdb5b50cbce0c6d714d2fd2e3c6da9 (diff)
downloadscummvm-rg350-fa90f9797c7ffb6fdd416ac2ebdde3e6dab2fb52.tar.gz
scummvm-rg350-fa90f9797c7ffb6fdd416ac2ebdde3e6dab2fb52.tar.bz2
scummvm-rg350-fa90f9797c7ffb6fdd416ac2ebdde3e6dab2fb52.zip
GUI: Check for screen change whenever an event is polled.
This should *hopefully* really fix all GUI crashes when resizing with OpenGL.
Diffstat (limited to 'gui/gui-manager.cpp')
-rw-r--r--gui/gui-manager.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/gui/gui-manager.cpp b/gui/gui-manager.cpp
index 1505c8c707..999d61e854 100644
--- a/gui/gui-manager.cpp
+++ b/gui/gui-manager.cpp
@@ -309,6 +309,19 @@ void GuiManager::runLoop() {
Common::Event event;
while (eventMan->pollEvent(event)) {
+ // We will need to check whether the screen changed while polling
+ // for an event here. While we do send EVENT_SCREEN_CHANGED
+ // whenever this happens we still cannot be sure that we get such
+ // an event immediately. For example, we might have an mouse move
+ // event queued before an screen changed event. In some rare cases
+ // this would make the GUI redraw (with the code a few lines
+ // below) when it is not yet updated for new overlay dimensions.
+ // As a result ScummVM would crash because it tries to copy data
+ // outside the actual overlay screen.
+ if (event.type != Common::EVENT_SCREEN_CHANGED) {
+ checkScreenChange();
+ }
+
// The top dialog can change during the event loop. In that case, flush all the
// dialog-related events since they were probably generated while the old dialog
// was still visible, and therefore not intended for the new one.