Commit 61736bc3 authored by Ronald Oussoren's avatar Ronald Oussoren

(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.
parent 5bf77fca
...@@ -26,6 +26,7 @@ import tkMessageBox ...@@ -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: ...@@ -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: ...@@ -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
......
...@@ -80,6 +80,9 @@ Core and Builtins ...@@ -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.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment