Skip to content

Commit

Permalink
pythongh-97527: IDLE - fix buggy macosx patch (pythonGH-98313)
Browse files Browse the repository at this point in the history
pythonGH-97530 fixed IDLE tests possibly crashing on a Mac without a GUI.
But it resulted in IDLE not starting in 3.10.8, 3.12.0a1, and
Microsoft Python 3.10.2288.0 when test/* is not installed.
After this patch, test.* is only imported when testing on Mac.
(cherry picked from commit 35fa5d5)

Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
  • Loading branch information
terryjreedy authored and miss-islington committed Oct 16, 2022
1 parent b5874fa commit 50ef214
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 16 deletions.
5 changes: 5 additions & 0 deletions Lib/idlelib/NEWS.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ Released on 2022-10-03
=========================


gh-97527: Fix a bug in the previous bugfix that caused IDLE to not
start when run with 3.10.8, 3.12.0a1, and at least Microsoft Python
3.10.2288.0 installed without the Lib/test package. 3.11.0 was never
affected.

gh-65802: Document handling of extensions in Save As dialogs.

gh-95191: Include prompts when saving Shell (interactive input/output).
Expand Down
42 changes: 26 additions & 16 deletions Lib/idlelib/macosx.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
from os.path import expanduser
import plistlib
from sys import platform # Used in _init_tk_type, changed by test.
from test.support import requires, ResourceDenied

import tkinter

Expand All @@ -16,27 +15,38 @@

def _init_tk_type():
""" Initialize _tk_type for isXyzTk functions.
This function is only called once, when _tk_type is still None.
"""
global _tk_type
if platform == 'darwin':
try:
requires('gui')
except ResourceDenied: # Possible when testing.
_tk_type = "cocoa" # Newest and most common.
else:
root = tkinter.Tk()
ws = root.tk.call('tk', 'windowingsystem')
if 'x11' in ws:
_tk_type = "xquartz"
elif 'aqua' not in ws:
_tk_type = "other"
elif 'AppKit' in root.tk.call('winfo', 'server', '.'):

# When running IDLE, GUI is present, test/* may not be.
# When running tests, test/* is present, GUI may not be.
# If not, guess most common. Does not matter for testing.
from idlelib.__init__ import testing
if testing:
from test.support import requires, ResourceDenied
try:
requires('gui')
except ResourceDenied:
_tk_type = "cocoa"
else:
_tk_type = "carbon"
root.destroy()
return

root = tkinter.Tk()
ws = root.tk.call('tk', 'windowingsystem')
if 'x11' in ws:
_tk_type = "xquartz"
elif 'aqua' not in ws:
_tk_type = "other"
elif 'AppKit' in root.tk.call('winfo', 'server', '.'):
_tk_type = "cocoa"
else:
_tk_type = "carbon"
root.destroy()
else:
_tk_type = "other"
return

def isAquaTk():
"""
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Fix a bug in the previous bugfix that caused IDLE to not start when run with
3.10.8, 3.12.0a1, and at least Microsoft Python 3.10.2288.0 installed
without the Lib/test package. 3.11.0 was never affected.

0 comments on commit 50ef214

Please sign in to comment.