Changeset 391 for python/trunk/Lib/idlelib/macosxSupport.py
- Timestamp:
- Mar 19, 2014, 11:31:01 PM (11 years ago)
- Location:
- python/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
python/trunk
-
Property svn:mergeinfo
set to
/python/vendor/Python-2.7.6 merged eligible /python/vendor/current merged eligible
-
Property svn:mergeinfo
set to
-
python/trunk/Lib/idlelib/macosxSupport.py
r2 r391 5 5 import sys 6 6 import Tkinter 7 from os import path 8 9 10 _appbundle = None 7 11 8 12 def runningAsOSXApp(): … … 10 14 Returns True if Python is running from within an app on OSX. 11 15 If so, assume that Python was built with Aqua Tcl/Tk rather than 12 X11 Tc k/Tk.16 X11 Tcl/Tk. 13 17 """ 14 return (sys.platform == 'darwin' and '.app' in sys.executable) 18 global _appbundle 19 if _appbundle is None: 20 _appbundle = (sys.platform == 'darwin' and '.app' in sys.executable) 21 return _appbundle 22 23 _carbonaquatk = None 24 25 def isCarbonAquaTk(root): 26 """ 27 Returns True if IDLE is using a Carbon Aqua Tk (instead of the 28 newer Cocoa Aqua Tk). 29 """ 30 global _carbonaquatk 31 if _carbonaquatk is None: 32 _carbonaquatk = (runningAsOSXApp() and 33 'aqua' in root.tk.call('tk', 'windowingsystem') and 34 'AppKit' not in root.tk.call('winfo', 'server', '.')) 35 return _carbonaquatk 36 37 def tkVersionWarning(root): 38 """ 39 Returns a string warning message if the Tk version in use appears to 40 be one known to cause problems with IDLE. 41 1. Apple Cocoa-based Tk 8.5.7 shipped with Mac OS X 10.6 is unusable. 42 2. Apple Cocoa-based Tk 8.5.9 in OS X 10.7 and 10.8 is better but 43 can still crash unexpectedly. 44 """ 45 46 if (runningAsOSXApp() and 47 ('AppKit' in root.tk.call('winfo', 'server', '.')) ): 48 patchlevel = root.tk.call('info', 'patchlevel') 49 if patchlevel not in ('8.5.7', '8.5.9'): 50 return False 51 return (r"WARNING: The version of Tcl/Tk ({0}) in use may" 52 r" be unstable.\n" 53 r"Visit http://www.python.org/download/mac/tcltk/" 54 r" for current information.".format(patchlevel)) 55 else: 56 return False 15 57 16 58 def addOpenEventSupport(root, flist): 17 59 """ 18 This ensures that the application will respon tto open AppleEvents, which19 makes is feas eable to use IDLE as the default application for python files.60 This ensures that the application will respond to open AppleEvents, which 61 makes is feasible to use IDLE as the default application for python files. 20 62 """ 21 63 def doOpenFile(*args): … … 52 94 # menu. 53 95 from Tkinter import Menu, Text, Text 54 from EditorWindow import prepstr, get_accelerator55 import Bindings56 import WindowList57 from MultiCall import MultiCallCreator96 from idlelib.EditorWindow import prepstr, get_accelerator 97 from idlelib import Bindings 98 from idlelib import WindowList 99 from idlelib.MultiCall import MultiCallCreator 58 100 59 101 menubar = Menu(root) … … 74 116 WindowList.register_callback(postwindowsmenu) 75 117 76 menudict['application'] = menu = Menu(menubar, name='apple')77 menubar.add_cascade(label='IDLE', menu=menu)78 79 118 def about_dialog(event=None): 80 import aboutDialog119 from idlelib import aboutDialog 81 120 aboutDialog.AboutDialog(root, 'About IDLE') 82 121 83 122 def config_dialog(event=None): 84 import configDialog123 from idlelib import configDialog 85 124 root.instance_dict = flist.inversedict 86 125 configDialog.ConfigDialog(root, 'Settings') 87 126 127 def help_dialog(event=None): 128 from idlelib import textView 129 fn = path.join(path.abspath(path.dirname(__file__)), 'help.txt') 130 textView.view_file(root, 'Help', fn) 88 131 89 132 root.bind('<<about-idle>>', about_dialog) 90 133 root.bind('<<open-config-dialog>>', config_dialog) 134 root.createcommand('::tk::mac::ShowPreferences', config_dialog) 91 135 if flist: 92 136 root.bind('<<close-all-windows>>', flist.close_all_callback) 93 137 138 # The binding above doesn't reliably work on all versions of Tk 139 # on MacOSX. Adding command definition below does seem to do the 140 # right thing for now. 141 root.createcommand('exit', flist.close_all_callback) 94 142 95 ###check if Tk version >= 8.4.14; if so, use hard-coded showprefs binding96 tkversion = root.tk.eval('info patchlevel')97 # Note: we cannot check if the string tkversion >= '8.4.14', because98 # the string '8.4.7' is greater than the string '8.4.14'.99 if tuple(map(int, tkversion.split('.'))) >= (8, 4, 14):100 Bindings.menudefs[0] =('application', [143 if isCarbonAquaTk(root): 144 # for Carbon AquaTk, replace the default Tk apple menu 145 menudict['application'] = menu = Menu(menubar, name='apple') 146 menubar.add_cascade(label='IDLE', menu=menu) 147 Bindings.menudefs.insert(0, 148 ('application', [ 101 149 ('About IDLE', '<<about-idle>>'), 102 None, 103 ]) 104 root.createcommand('::tk::mac::ShowPreferences', config_dialog) 150 None, 151 ])) 152 tkversion = root.tk.eval('info patchlevel') 153 if tuple(map(int, tkversion.split('.'))) < (8, 4, 14): 154 # for earlier AquaTk versions, supply a Preferences menu item 155 Bindings.menudefs[0][1].append( 156 ('_Preferences....', '<<open-config-dialog>>'), 157 ) 105 158 else: 106 for mname, entrylist in Bindings.menudefs: 107 menu = menudict.get(mname) 108 if not menu: 109 continue 110 else: 111 for entry in entrylist: 112 if not entry: 113 menu.add_separator() 114 else: 115 label, eventname = entry 116 underline, label = prepstr(label) 117 accelerator = get_accelerator(Bindings.default_keydefs, 118 eventname) 119 def command(text=root, eventname=eventname): 120 text.event_generate(eventname) 121 menu.add_command(label=label, underline=underline, 122 command=command, accelerator=accelerator) 159 # assume Cocoa AquaTk 160 # replace default About dialog with About IDLE one 161 root.createcommand('tkAboutDialog', about_dialog) 162 # replace default "Help" item in Help menu 163 root.createcommand('::tk::mac::ShowHelp', help_dialog) 164 # remove redundant "IDLE Help" from menu 165 del Bindings.menudefs[-1][1][0] 123 166 124 167 def setupApp(root, flist):
Note:
See TracChangeset
for help on using the changeset viewer.