mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-03 23:52:41 +00:00
GUI: Work around bug #3481395.
The bug in question is: "LAUNCHER: Can't quit from unsupported game dialog".
This commit is contained in:
parent
cf8a6dcd83
commit
453eeb496c
@ -279,7 +279,7 @@ void GuiManager::runLoop() {
|
|||||||
|
|
||||||
bool tooltipCheck = false;
|
bool tooltipCheck = false;
|
||||||
|
|
||||||
while (!_dialogStack.empty() && activeDialog == getTopDialog()) {
|
while (!_dialogStack.empty() && activeDialog == getTopDialog() && !eventMan->shouldQuit()) {
|
||||||
redraw();
|
redraw();
|
||||||
|
|
||||||
// Don't "tickle" the dialog until the theme has had a chance
|
// Don't "tickle" the dialog until the theme has had a chance
|
||||||
@ -358,8 +358,6 @@ void GuiManager::runLoop() {
|
|||||||
case Common::EVENT_WHEELDOWN:
|
case Common::EVENT_WHEELDOWN:
|
||||||
activeDialog->handleMouseWheel(mouse.x, mouse.y, 1);
|
activeDialog->handleMouseWheel(mouse.x, mouse.y, 1);
|
||||||
break;
|
break;
|
||||||
case Common::EVENT_QUIT:
|
|
||||||
return;
|
|
||||||
case Common::EVENT_SCREEN_CHANGED:
|
case Common::EVENT_SCREEN_CHANGED:
|
||||||
screenChange();
|
screenChange();
|
||||||
break;
|
break;
|
||||||
@ -388,6 +386,17 @@ void GuiManager::runLoop() {
|
|||||||
_system->delayMillis(10);
|
_system->delayMillis(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WORKAROUND: When quitting we might not properly close the dialogs on
|
||||||
|
// the dialog stack, thus we do this here to avoid any problems.
|
||||||
|
// This is most noticable in bug #3481395 "LAUNCHER: Can't quit from unsupported game dialog".
|
||||||
|
// It seems that Dialog::runModal never removes the dialog from the dialog
|
||||||
|
// stack, thus if the dialog does not call Dialog::close to close itself
|
||||||
|
// it will never be removed. Since we can have multiple run loops being
|
||||||
|
// called we cannot rely on catching EVENT_QUIT in the event loop above,
|
||||||
|
// since it would only catch it for the top run loop.
|
||||||
|
if (eventMan->shouldQuit() && activeDialog == getTopDialog())
|
||||||
|
getTopDialog()->close();
|
||||||
|
|
||||||
if (didSaveState) {
|
if (didSaveState) {
|
||||||
_theme->disable();
|
_theme->disable();
|
||||||
restoreState();
|
restoreState();
|
||||||
|
Loading…
Reference in New Issue
Block a user