[Python-checkins] bpo-42508: Keep IDLE running on macOS (GH-23577) (GH-23669)

ned-deily webhook-mailer at python.org
Sun Dec 6 22:49:06 EST 2020


https://github.com/python/cpython/commit/2a9a883d361d37b40fb0b0011dd300bb83ceb73c
commit: 2a9a883d361d37b40fb0b0011dd300bb83ceb73c
branch: 3.9
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: ned-deily <nad at python.org>
date: 2020-12-06T22:48:48-05:00
summary:

bpo-42508: Keep IDLE running on macOS (GH-23577) (GH-23669)

Remove obsolete workaround that prevented running files with
shortcuts when using new universal2 installers built on macOS 11.
Ignore buggy 2nd run_module_event call.
(cherry picked from commit 57e511361047895231f5ee7abfdfbbc60e11d2db)

Co-authored-by: Terry Jan Reedy <tjreedy at udel.edu>

files:
A Misc/NEWS.d/next/IDLE/2020-11-30-19-46-05.bpo-42508.fE7w4M.rst
M Lib/idlelib/NEWS.txt
M Lib/idlelib/runscript.py

diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt
index e257ee9fdeb32..869be0a62b7db 100644
--- a/Lib/idlelib/NEWS.txt
+++ b/Lib/idlelib/NEWS.txt
@@ -3,6 +3,10 @@ Released on 2020-12-07?
 ======================================
 
 
+bpo-42508: Keep IDLE running on macOS.  Remove obsolete workaround
+that prevented running files with shortcuts when using new universal2
+installers built on macOS 11.
+
 bpo-42426: Fix reporting offset of the RE error in searchengine.
 
 bpo-42416: Get docstrings for IDLE calltips more often
diff --git a/Lib/idlelib/runscript.py b/Lib/idlelib/runscript.py
index a54108794ab59..028b0dbd21dfe 100644
--- a/Lib/idlelib/runscript.py
+++ b/Lib/idlelib/runscript.py
@@ -11,6 +11,7 @@
 """
 import os
 import tabnanny
+import time
 import tokenize
 
 import tkinter.messagebox as tkMessageBox
@@ -42,9 +43,7 @@ def __init__(self, editwin):
         self.root = self.editwin.root
         # cli_args is list of strings that extends sys.argv
         self.cli_args = []
-
-        if macosx.isCocoaTk():
-            self.editwin.text_frame.bind('<<run-module-event-2>>', self._run_module_event)
+        self.perf = 0.0    # Workaround for macOS 11 Uni2; see bpo-42508.
 
     def check_module_event(self, event):
         if isinstance(self.editwin, outwin.OutputWindow):
@@ -107,24 +106,10 @@ def checksyntax(self, filename):
         finally:
             shell.set_warning_stream(saved_stream)
 
-    def run_module_event(self, event):
-        if macosx.isCocoaTk():
-            # 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).
-            self.editwin.text_frame.after(200,
-                lambda: self.editwin.text_frame.event_generate(
-                        '<<run-module-event-2>>'))
-            return 'break'
-        else:
-            return self._run_module_event(event)
-
     def run_custom_event(self, event):
-        return self._run_module_event(event, customize=True)
+        return self.run_module_event(event, customize=True)
 
-    def _run_module_event(self, event, *, customize=False):
+    def run_module_event(self, event, *, customize=False):
         """Run the module after setting up the environment.
 
         First check the syntax.  Next get customization.  If OK, make
@@ -133,6 +118,8 @@ def _run_module_event(self, event, *, customize=False):
         module being executed and also add that directory to its
         sys.path if not already included.
         """
+        if macosx.isCocoaTk() and (time.perf_counter() - self.perf < .05):
+            return 'break'
         if isinstance(self.editwin, outwin.OutputWindow):
             self.editwin.text.bell()
             return 'break'
@@ -218,6 +205,7 @@ def errorbox(self, title, message):
         # XXX This should really be a function of EditorWindow...
         tkMessageBox.showerror(title, message, parent=self.editwin.text)
         self.editwin.text.focus_set()
+        self.perf = time.perf_counter()
 
 
 if __name__ == "__main__":
diff --git a/Misc/NEWS.d/next/IDLE/2020-11-30-19-46-05.bpo-42508.fE7w4M.rst b/Misc/NEWS.d/next/IDLE/2020-11-30-19-46-05.bpo-42508.fE7w4M.rst
new file mode 100644
index 0000000000000..b449351f7f458
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2020-11-30-19-46-05.bpo-42508.fE7w4M.rst
@@ -0,0 +1,3 @@
+Keep IDLE running on macOS.  Remove obsolete workaround that prevented
+running files with shortcuts when using new universal2 installers built
+on macOS 11.



More information about the Python-checkins mailing list