The GUI was hanging if the shell window was closed while a raw_input()

was pending.  Restored the quit() of the readline() mainloop().
http://mail.python.org/pipermail/idle-dev/2004-December/002307.html

M NEWS.txt
M PyShell.py
This commit is contained in:
Kurt B. Kaiser 2004-12-23 04:20:59 +00:00
parent ee4bb6612a
commit 5c3df35b6b
2 changed files with 16 additions and 6 deletions

View file

@ -3,6 +3,10 @@ What's New in IDLE 1.2a0?
*Release date: XX-XXX-2005* *Release date: XX-XXX-2005*
- The GUI was hanging if the shell window was closed while a raw_input()
was pending. Restored the quit() of the readline() mainloop().
http://mail.python.org/pipermail/idle-dev/2004-December/002307.html
- The remote procedure call module rpc.py can now access data attributes of - The remote procedure call module rpc.py can now access data attributes of
remote registered objects. Changes to these attributes are local, however. remote registered objects. Changes to these attributes are local, however.

View file

@ -910,6 +910,9 @@ class PyShell(OutputWindow):
parent=self.text) parent=self.text)
if response == False: if response == False:
return "cancel" return "cancel"
if self.reading:
self.top.quit()
self.canceled = True
self.closing = True self.closing = True
# Wait for poll_subprocess() rescheduling to stop # Wait for poll_subprocess() rescheduling to stop
self.text.after(2 * self.pollinterval, self.close2) self.text.after(2 * self.pollinterval, self.close2)
@ -974,10 +977,12 @@ class PyShell(OutputWindow):
save = self.reading save = self.reading
try: try:
self.reading = 1 self.reading = 1
self.top.mainloop() self.top.mainloop() # nested mainloop()
finally: finally:
self.reading = save self.reading = save
line = self.text.get("iomark", "end-1c") line = self.text.get("iomark", "end-1c")
if len(line) == 0: # may be EOF if we quit our mainloop with Ctrl-C
line = "\n"
if isinstance(line, unicode): if isinstance(line, unicode):
import IOBinding import IOBinding
try: try:
@ -987,10 +992,11 @@ class PyShell(OutputWindow):
self.resetoutput() self.resetoutput()
if self.canceled: if self.canceled:
self.canceled = 0 self.canceled = 0
raise KeyboardInterrupt if not use_subprocess:
raise KeyboardInterrupt
if self.endoffile: if self.endoffile:
self.endoffile = 0 self.endoffile = 0
return "" line = ""
return line return line
def isatty(self): def isatty(self):
@ -1009,13 +1015,13 @@ class PyShell(OutputWindow):
return "break" return "break"
self.endoffile = 0 self.endoffile = 0
self.canceled = 1 self.canceled = 1
if self.reading: if (self.executing and self.interp.rpcclt):
self.top.quit()
elif (self.executing and self.interp.rpcclt):
if self.interp.getdebugger(): if self.interp.getdebugger():
self.interp.restart_subprocess() self.interp.restart_subprocess()
else: else:
self.interp.interrupt_subprocess() self.interp.interrupt_subprocess()
if self.reading:
self.top.quit() # exit the nested mainloop() in readline()
return "break" return "break"
def eof_callback(self, event): def eof_callback(self, event):