mirror of
https://github.com/python/cpython.git
synced 2025-07-19 01:05:26 +00:00
* 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.
This commit is contained in:
parent
a2b7f40513
commit
fea2af1e9b
18 changed files with 113 additions and 78 deletions
|
@ -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 @@ def do_select():
|
|||
# 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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue