(backport) Fixes #11088: IDLE crashes when using F5 to run a script on OSX with Tk 8.5

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.
This commit is contained in:
Ronald Oussoren 2011-05-17 15:13:46 +02:00
parent 372954e059
commit b13cacf677
2 changed files with 20 additions and 0 deletions

View File

@ -26,6 +26,7 @@ import tkMessageBox
from idlelib import PyShell from idlelib import PyShell
from idlelib.configHandler import idleConf from idlelib.configHandler import idleConf
from idlelib import macosxSupport
IDENTCHARS = string.ascii_letters + string.digits + "_" IDENTCHARS = string.ascii_letters + string.digits + "_"
@ -53,6 +54,9 @@ class ScriptBinding:
self.flist = self.editwin.flist self.flist = self.editwin.flist
self.root = self.editwin.root 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): def check_module_event(self, event):
filename = self.getfilename() filename = self.getfilename()
if not filename: if not filename:
@ -166,6 +170,19 @@ class ScriptBinding:
interp.runcode(code) interp.runcode(code)
return 'break' 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): def getfilename(self):
"""Get source filename. If not saved, offer to save (or create) file """Get source filename. If not saved, offer to save (or create) file

View File

@ -80,6 +80,9 @@ Core and Builtins
Library 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 - 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. of "UTF8" in the locale module as the latter is not supported MacOSX and OpenBSD.