]> granicus.if.org Git - python/commitdiff
(backport) Fixes #11088: IDLE crashes when using F5 to run a script on OSX with Tk 8.5
authorRonald Oussoren <ronaldoussoren@mac.com>
Tue, 17 May 2011 13:13:46 +0000 (15:13 +0200)
committerRonald Oussoren <ronaldoussoren@mac.com>
Tue, 17 May 2011 13:13:46 +0000 (15:13 +0200)
Without this patch IDLE will crash reliably on OSX when Tkinter
is linked to TkCocoa 8.5.x.

To reproduce:

* Create a new file (script.py) with the following two lines:

x = raw_input('prompt: ')
print x

* Save the script

* Run the script using the F5 keyboard shortcut
  (running from the menu works fine)

The patch is a fairly crude hack, but we haven't found a better
workaround for this Tk bug yet.

Lib/idlelib/ScriptBinding.py
Misc/NEWS

index 9a16e3c7798fb198c63fd3c88f1bcf65c4ce9620..1139b30784947d7aa6b2b3015b86c8fe46b63932 100644 (file)
@@ -26,6 +26,7 @@ import tkMessageBox
 from idlelib import PyShell
 
 from idlelib.configHandler import idleConf
+from idlelib import macosxSupport
 
 IDENTCHARS = string.ascii_letters + string.digits + "_"
 
@@ -53,6 +54,9 @@ class ScriptBinding:
         self.flist = self.editwin.flist
         self.root = self.editwin.root
 
+        if macosxSupport.runningAsOSXApp():
+            self.editwin.text_frame.bind('<<run-module-event-2>>', self._run_module_event)
+
     def check_module_event(self, event):
         filename = self.getfilename()
         if not filename:
@@ -166,6 +170,19 @@ class ScriptBinding:
         interp.runcode(code)
         return 'break'
 
+    if macosxSupport.runningAsOSXApp():
+        # Tk-Cocoa in MacOSX is broken until at least
+        # Tk 8.5.9, and without this rather
+        # crude workaround IDLE would hang when a user
+        # tries to run a module using the keyboard shortcut
+        # (the menu item works fine).
+        _run_module_event = run_module_event
+
+        def run_module_event(self, event):
+            self.editwin.text_frame.after(200,
+                lambda: self.editwin.text_frame.event_generate('<<run-module-event-2>>'))
+            return 'break'
+
     def getfilename(self):
         """Get source filename.  If not saved, offer to save (or create) file
 
index 3262205db4c54c92f6321bccfa817ae08ed0bbf3..c666d3e47fbb775a3284ac3b0e9cfdb88b769def 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -80,6 +80,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #11088: don't crash when using F5 to run a script in IDLE on MacOSX
+  with Tk 8.5.
+
 - Issue #10154, #10090: change the normalization of UTF-8 to "UTF-8" instead
   of "UTF8" in the locale module as the latter is not supported MacOSX and OpenBSD.