Skip to content

Commit

Permalink
pythongh-97527: IDLE: protect macosx Tk() call when no GUI (pythonGH-…
Browse files Browse the repository at this point in the history
…97530)

Only call tkinter.tk and its follow-up code in _init_tk_type when requires('gui')
does not raise.  This function can be called as an unintended side-effect of
calling other idlelib code as part of tests on macOS without a GUI enabled.
(cherry picked from commit 9704f8d)

Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
  • Loading branch information
terryjreedy authored and miss-islington committed Sep 24, 2022
1 parent c2916d2 commit e2154d9
Showing 1 changed file with 17 additions and 13 deletions.
30 changes: 17 additions & 13 deletions Lib/idlelib/macosx.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
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 @@ -14,23 +15,26 @@
_tk_type = None

def _init_tk_type():
"""
Initializes OS X Tk variant values for
isAquaTk(), isCarbonTk(), isCocoaTk(), and isXQuartz().
""" Initialize _tk_type for isXyzTk functions.
"""
global _tk_type
if platform == 'darwin':
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"
try:
requires('gui')
except ResourceDenied: # Possible when testing.
_tk_type = "cocoa" # Newest and most common.
else:
_tk_type = "carbon"
root.destroy()
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"

Expand Down

0 comments on commit e2154d9

Please sign in to comment.