diff Lib/lib-stdwin/mainloop.py @ 1178:f9bbb01388d5 legacy-trunk

* More changes due to stricter argument passing rules * Fixed calendar.py, mimetools.py, whrandom.py to cope with time.time() returning a floating point number. (And fix old bug in calendar) * Add recursion level to mainloop.mainloop(), to make it reentrant.
author Guido van Rossum <guido@python.org>
date Mon, 04 Jan 1993 09:16:51 +0000
parents 1d06b1499eb9
children ea8d4cce782b
line wrap: on
line diff
--- a/Lib/lib-stdwin/mainloop.py	Mon Jan 04 09:09:59 1993 +0000
+++ b/Lib/lib-stdwin/mainloop.py	Mon Jan 04 09:16:51 1993 +0000
@@ -4,6 +4,9 @@
 # - have a 'dispatch' function as a window member
 
 
+# XXX This is UNIX specific!  For the Mac we need to use a simpler version!
+
+
 import stdwin, stdwinq
 from stdwinevents import *
 
@@ -123,23 +126,38 @@
 # Python's stdwin.getevent() turns WE_COMMAND/WC_CANCEL events
 # into KeyboardInterrupt exceptions; these are turned back in events.
 #
+recursion_level = 0 # Hack to make it reentrant
 def mainloop():
-	stdwin_select_handler() # Process events already in stdwin queue
-	fd = stdwin.fileno()
-	while 1:
-		if windows:
-			registerfd(fd, 'r', stdwin_select_handler)
-			try:
-				while windows:
+	global recursion_level
+	recursion_level = recursion_level + 1
+	try:
+		stdwin_select_handler() # Process events already in queue
+		fd = stdwin.fileno()
+		while 1:
+			if windows:
+				if recursion_level == 1:
+				    registerfd(fd, 'r', stdwin_select_handler)
+				try:
+					while windows:
+						do_select()
+						stdwin_select_handler()
+				finally:
+					if recursion_level == 1:
+						unregisterfd(fd)
+			elif fdlist:
+				while fdlist and not windows:
 					do_select()
-					stdwin_select_handler()
-			finally:
-				unregisterfd(fd)
-		elif fdlist:
-			while fdlist and not windows:
-				do_select()
-		else:
-			break
+			else:
+				break
+	finally:
+		recursion_level = recursion_level - 1
+
+
+# Check for events without ever blocking
+#
+def check():
+	stdwin_select_handler()
+	# XXX Should check for socket stuff as well
 
 
 # Handle stdwin events until none are left