[Scummvm-cvs-logs] SF.net SVN: scummvm: [23141] scummvm/trunk/gui/newgui.cpp

eriktorbjorn at users.sourceforge.net eriktorbjorn at users.sourceforge.net
Fri Jun 16 08:26:30 CEST 2006


Revision: 23141
Author:   eriktorbjorn
Date:     2006-06-15 23:26:26 -0700 (Thu, 15 Jun 2006)
ViewCVS:  http://svn.sourceforge.net/scummvm/?rev=23141&view=rev

Log Message:
-----------
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.)

Modified Paths:
--------------
    scummvm/trunk/gui/newgui.cpp
Modified: scummvm/trunk/gui/newgui.cpp
===================================================================
--- scummvm/trunk/gui/newgui.cpp	2006-06-15 21:37:23 UTC (rev 23140)
+++ scummvm/trunk/gui/newgui.cpp	2006-06-16 06:26:26 UTC (rev 23141)
@@ -201,6 +201,9 @@
 		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 @@
 		}
 
 		// 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);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.





More information about the Scummvm-git-logs mailing list