mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-04 08:17:40 +00:00
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 note intended for the new one. This hopefully fixes strange behaviour/crashes with pop-up widgets. (Most easy to trigger in 3x mode or when running ScummVM under Valgrind.) svn-id: r23141
This commit is contained in:
parent
84b54c3173
commit
50673f9f1f
@ -201,6 +201,9 @@ void NewGui::runLoop() {
|
||||
uint32 time = _system->getMillis();
|
||||
|
||||
while (_system->pollEvent(event)) {
|
||||
if (activeDialog != _dialogStack.top() && event.type != OSystem::EVENT_QUIT && event.type != OSystem::EVENT_SCREEN_CHANGED)
|
||||
continue;
|
||||
|
||||
Common::Point mouse(event.mouse.x - activeDialog->_x, event.mouse.y - activeDialog->_y);
|
||||
|
||||
switch (event.type) {
|
||||
@ -270,7 +273,7 @@ void NewGui::runLoop() {
|
||||
}
|
||||
|
||||
// check if event should be sent again (keydown)
|
||||
if (_currentKeyDown.keycode != 0) {
|
||||
if (_currentKeyDown.keycode != 0 && activeDialog == _dialogStack.top()) {
|
||||
if (_keyRepeatTime < time) {
|
||||
// fire event
|
||||
activeDialog->handleKeyDown(_currentKeyDown.ascii, _currentKeyDown.keycode, _currentKeyDown.flags);
|
||||
|
Loading…
Reference in New Issue
Block a user