]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
The GUI was hanging if the shell window was closed while a raw_input()
authorKurt B. Kaiser <kbk@shore.net>
Thu, 23 Dec 2004 04:26:55 +0000 (04:26 +0000)
committerKurt B. Kaiser <kbk@shore.net>
Thu, 23 Dec 2004 04:26:55 +0000 (04:26 +0000)
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

Lib/idlelib/NEWS.txt
Lib/idlelib/PyShell.py

index 1269ccd7f43f51289335b67f0261a45321b22cfe..eb74aa01b1025412f86e4925a7bf9f5e583b1657 100644 (file)
@@ -1,7 +1,11 @@
 What's New in IDLE 1.0.4?
 =========================
 
-*Release date: XX-XXX-2004*
+*Release date: XX-Dec-2004*
+
+- 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
 
 - Added a Tk error dialog to run.py inform the user if the subprocess can't
   connect to the user GUI process.  Added a timeout to the GUI's listening
index 2e0009f625bf09dd7faf154d9837b75cbfa1003c..7470585fdddc348bd319cd52f1edb9b6b3f9fcfb 100644 (file)
@@ -877,6 +877,9 @@ class PyShell(OutputWindow):
                 parent=self.text)
             if response == False:
                 return "cancel"
+        if self.reading:
+            self.top.quit()
+        self.canceled = True
         self.closing = True
         # Wait for poll_subprocess() rescheduling to stop
         self.text.after(2 * self.pollinterval, self.close2)
@@ -941,10 +944,12 @@ class PyShell(OutputWindow):
         save = self.reading
         try:
             self.reading = 1
-            self.top.mainloop()
+            self.top.mainloop()  # nested mainloop()
         finally:
             self.reading = save
         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):
             import IOBinding
             try:
@@ -954,10 +959,11 @@ class PyShell(OutputWindow):
         self.resetoutput()
         if self.canceled:
             self.canceled = 0
-            raise KeyboardInterrupt
+            if not use_subprocess:
+                raise KeyboardInterrupt
         if self.endoffile:
             self.endoffile = 0
-            return ""
+            line = ""
         return line
 
     def isatty(self):
@@ -976,13 +982,13 @@ class PyShell(OutputWindow):
             return "break"
         self.endoffile = 0
         self.canceled = 1
-        if self.reading:
-            self.top.quit()
-        elif (self.executing and self.interp.rpcclt):
+        if (self.executing and self.interp.rpcclt):
             if self.interp.getdebugger():
                 self.interp.restart_subprocess()
             else:
                 self.interp.interrupt_subprocess()
+        if self.reading:
+            self.top.quit()  # exit the nested mainloop() in readline()
         return "break"
 
     def eof_callback(self, event):