diff options
author | Ronald Oussoren <ronaldoussoren@mac.com> | 2006-07-23 09:46:11 (GMT) |
---|---|---|
committer | Ronald Oussoren <ronaldoussoren@mac.com> | 2006-07-23 09:46:11 (GMT) |
commit | 8133f9da1756adaee5548015528f8e2f0ff3f8d4 (patch) | |
tree | c7500bb5c3807d5736b2c810f1b9cabc517f6739 /Lib | |
parent | 17db495445ba1f6c9d360ade62471d49ceb05cfe (diff) | |
download | cpython-8133f9da1756adaee5548015528f8e2f0ff3f8d4.zip cpython-8133f9da1756adaee5548015528f8e2f0ff3f8d4.tar.gz cpython-8133f9da1756adaee5548015528f8e2f0ff3f8d4.tar.bz2 |
Fix for bug #1517996: Class and Path browsers show Tk menu
This patch replaces the menubar that is used by AquaTk for windows without a
menubar of their own by one that is more appropriate for IDLE.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/idlelib/macosxSupport.py | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/Lib/idlelib/macosxSupport.py b/Lib/idlelib/macosxSupport.py index 10b9aa5..8aea160 100644 --- a/Lib/idlelib/macosxSupport.py +++ b/Lib/idlelib/macosxSupport.py @@ -25,6 +25,81 @@ def addOpenEventSupport(root, flist): def hideTkConsole(root): root.tk.call('console', 'hide') +def overrideRootMenu(root, flist): + """ + Replace the Tk root menu by something that's more appropriate for + IDLE. + """ + # The menu that is attached to the Tk root (".") is also used by AquaTk for + # all windows that don't specify a menu of their own. The default menubar + # contains a number of menus, none of which are appropriate for IDLE. The + # Most annoying of those is an 'About Tck/Tk...' menu in the application + # menu. + # + # This function replaces the default menubar by a mostly empty one, it + # should only contain the correct application menu and the window menu. + # + # Due to a (mis-)feature of TkAqua the user will also see an empty Help + # menu. + from Tkinter import Menu, Text, Text + from EditorWindow import prepstr, get_accelerator + import Bindings + import WindowList + from MultiCall import MultiCallCreator + + menubar = Menu(root) + root.configure(menu=menubar) + menudict = {} + + menudict['windows'] = menu = Menu(menubar, name='windows') + menubar.add_cascade(label='Window', menu=menu, underline=0) + + def postwindowsmenu(menu=menu): + end = menu.index('end') + if end is None: + end = -1 + + if end > 0: + menu.delete(0, end) + WindowList.add_windows_to_menu(menu) + WindowList.register_callback(postwindowsmenu) + + menudict['application'] = menu = Menu(menubar, name='apple') + menubar.add_cascade(label='IDLE', menu=menu) + + def about_dialog(event=None): + import aboutDialog + aboutDialog.AboutDialog(root, 'About IDLE') + + def config_dialog(event=None): + import configDialog + configDialog.ConfigDialog(root, 'Settings') + + root.bind('<<about-idle>>', about_dialog) + root.bind('<<open-config-dialog>>', config_dialog) + if flist: + root.bind('<<close-all-windows>>', flist.close_all_callback) + + for mname, entrylist in Bindings.menudefs: + menu = menudict.get(mname) + if not menu: + continue + for entry in entrylist: + if not entry: + menu.add_separator() + else: + label, eventname = entry + underline, label = prepstr(label) + accelerator = get_accelerator(Bindings.default_keydefs, + eventname) + def command(text=root, eventname=eventname): + text.event_generate(eventname) + menu.add_command(label=label, underline=underline, + command=command, accelerator=accelerator) + + + + def setupApp(root, flist): """ @@ -33,4 +108,5 @@ def setupApp(root, flist): if not runningAsOSXApp(): return hideTkConsole(root) + overrideRootMenu(root, flist) addOpenEventSupport(root, flist) |