diff options
author | Terry Jan Reedy <tjreedy@udel.edu> | 2015-11-12 20:02:50 (GMT) |
---|---|---|
committer | Terry Jan Reedy <tjreedy@udel.edu> | 2015-11-12 20:02:50 (GMT) |
commit | 35aa5d07a2865f34d178e7c35c1f1eeb73289eac (patch) | |
tree | c4a7f58dbb41a8c924040717a8da6e675bd39314 /Lib/idlelib | |
parent | 0d649406aeda1c78ddd1061e5ece0c58120367ba (diff) | |
download | cpython-35aa5d07a2865f34d178e7c35c1f1eeb73289eac.zip cpython-35aa5d07a2865f34d178e7c35c1f1eeb73289eac.tar.gz cpython-35aa5d07a2865f34d178e7c35c1f1eeb73289eac.tar.bz2 |
Issue #25313: Change the handling of new built-in text color themes to better
address the compatibility problem introduced by the addition of IDLE Dark.
Consistently use the revised idleConf.CurrentTheme everywhere in idlelib.
Diffstat (limited to 'Lib/idlelib')
-rw-r--r-- | Lib/idlelib/ClassBrowser.py | 2 | ||||
-rw-r--r-- | Lib/idlelib/ColorDelegator.py | 2 | ||||
-rw-r--r-- | Lib/idlelib/EditorWindow.py | 2 | ||||
-rwxr-xr-x | Lib/idlelib/PyShell.py | 6 | ||||
-rw-r--r-- | Lib/idlelib/TreeWidget.py | 2 | ||||
-rw-r--r-- | Lib/idlelib/config-main.def | 2 | ||||
-rw-r--r-- | Lib/idlelib/configDialog.py | 29 | ||||
-rw-r--r-- | Lib/idlelib/configHandler.py | 28 |
8 files changed, 48 insertions, 25 deletions
diff --git a/Lib/idlelib/ClassBrowser.py b/Lib/idlelib/ClassBrowser.py index 5be65ef..d09c52f 100644 --- a/Lib/idlelib/ClassBrowser.py +++ b/Lib/idlelib/ClassBrowser.py @@ -56,7 +56,7 @@ class ClassBrowser: self.settitle() top.focus_set() # create scrolled canvas - theme = idleConf.GetOption('main','Theme','name') + theme = idleConf.CurrentTheme() background = idleConf.GetHighlight(theme, 'normal')['background'] sc = ScrolledCanvas(top, bg=background, highlightthickness=0, takefocus=1) sc.frame.pack(expand=1, fill="both") diff --git a/Lib/idlelib/ColorDelegator.py b/Lib/idlelib/ColorDelegator.py index 96c1fab..fec2670 100644 --- a/Lib/idlelib/ColorDelegator.py +++ b/Lib/idlelib/ColorDelegator.py @@ -62,7 +62,7 @@ class ColorDelegator(Delegator): self.tag_raise('sel') def LoadTagDefs(self): - theme = idleConf.GetOption('main','Theme','name') + theme = idleConf.CurrentTheme() self.tagdefs = { "COMMENT": idleConf.GetHighlight(theme, "comment"), "KEYWORD": idleConf.GetHighlight(theme, "keyword"), diff --git a/Lib/idlelib/EditorWindow.py b/Lib/idlelib/EditorWindow.py index 5b4ed30..4680f5c 100644 --- a/Lib/idlelib/EditorWindow.py +++ b/Lib/idlelib/EditorWindow.py @@ -754,7 +754,7 @@ class EditorWindow(object): # Called from self.filename_change_hook and from configDialog.py self._rmcolorizer() self._addcolorizer() - theme = idleConf.GetOption('main','Theme','name') + theme = idleConf.CurrentTheme() normal_colors = idleConf.GetHighlight(theme, 'normal') cursor_color = idleConf.GetHighlight(theme, 'cursor', fgBg='fg') select_colors = idleConf.GetHighlight(theme, 'hilite') diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py index 07f8d38..a6f2448 100755 --- a/Lib/idlelib/PyShell.py +++ b/Lib/idlelib/PyShell.py @@ -158,7 +158,7 @@ class PyShellEditorWindow(EditorWindow): # possible due to update in restore_file_breaks return if color: - theme = idleConf.GetOption('main','Theme','name') + theme = idleConf.CurrentTheme() cfg = idleConf.GetHighlight(theme, "break") else: cfg = {'foreground': '', 'background': ''} @@ -343,7 +343,7 @@ class ModifiedColorDelegator(ColorDelegator): def LoadTagDefs(self): ColorDelegator.LoadTagDefs(self) - theme = idleConf.GetOption('main','Theme','name') + theme = idleConf.CurrentTheme() self.tagdefs.update({ "stdin": {'background':None,'foreground':None}, "stdout": idleConf.GetHighlight(theme, "stdout"), @@ -631,7 +631,7 @@ class ModifiedInterpreter(InteractiveInterpreter): item = RemoteObjectBrowser.StubObjectTreeItem(self.rpcclt, oid) from idlelib.TreeWidget import ScrolledCanvas, TreeNode top = Toplevel(self.tkconsole.root) - theme = idleConf.GetOption('main','Theme','name') + theme = idleConf.CurrentTheme() background = idleConf.GetHighlight(theme, 'normal')['background'] sc = ScrolledCanvas(top, bg=background, highlightthickness=0) sc.frame.pack(expand=1, fill="both") diff --git a/Lib/idlelib/TreeWidget.py b/Lib/idlelib/TreeWidget.py index 88083f0..9d9d4d9 100644 --- a/Lib/idlelib/TreeWidget.py +++ b/Lib/idlelib/TreeWidget.py @@ -250,7 +250,7 @@ class TreeNode: except AttributeError: # padding carefully selected (on Windows) to match Entry widget: self.label = Label(self.canvas, text=text, bd=0, padx=2, pady=2) - theme = idleConf.GetOption('main','Theme','name') + theme = idleConf.CurrentTheme() if self.selected: self.label.configure(idleConf.GetHighlight(theme, 'hilite')) else: diff --git a/Lib/idlelib/config-main.def b/Lib/idlelib/config-main.def index 01a9cf1..f241199 100644 --- a/Lib/idlelib/config-main.def +++ b/Lib/idlelib/config-main.def @@ -65,6 +65,8 @@ num-spaces= 4 [Theme] default= 1 name= IDLE Classic +name2= +# name2 set in user config-main.cfg for themes added after 2015 Oct 1 [Keys] default= 1 diff --git a/Lib/idlelib/configDialog.py b/Lib/idlelib/configDialog.py index 579b9b3..585a871 100644 --- a/Lib/idlelib/configDialog.py +++ b/Lib/idlelib/configDialog.py @@ -261,6 +261,7 @@ class ConfigDialog(Toplevel): self.buttonDeleteCustomTheme=Button( frameTheme, text='Delete Custom Theme', command=self.DeleteCustomTheme) + self.new_custom_theme = Label(frameTheme, bd=2) ##widget packing #body @@ -284,6 +285,7 @@ class ConfigDialog(Toplevel): self.optMenuThemeBuiltin.pack(side=TOP, fill=X, padx=5, pady=5) self.optMenuThemeCustom.pack(side=TOP, fill=X, anchor=W, padx=5, pady=5) self.buttonDeleteCustomTheme.pack(side=TOP, fill=X, padx=5, pady=5) + self.new_custom_theme.pack(side=TOP, fill=X, pady=5) return frame def CreatePageKeys(self): @@ -520,20 +522,15 @@ class ConfigDialog(Toplevel): def VarChanged_builtinTheme(self, *params): value = self.builtinTheme.get() if value == 'IDLE Dark': - tkMessageBox.showwarning( - title="The 'IDLE Dark' Text Color Theme", - message="IDLE Dark is new in October, 2015. Trying to " - "run earlier versions of IDLE with it selected " - "will disable colorizing, or worse.\n\n" - "If you might ever run an earlier release of IDLE, " - "then before exiting this version, " - "either switch to another theme or " - "hit the 'Save as New Custom Theme' button. " - "The latter requires a new name, such as " - "'Custom Dark', but the custom theme will work " - "with any IDLE release, and can be modified.", - parent=self) - self.AddChangedItem('main', 'Theme', 'name', value) + if idleConf.GetOption('main', 'Theme', 'name') != 'IDLE New': + self.AddChangedItem('main', 'Theme', 'name', 'IDLE Classic') + self.AddChangedItem('main', 'Theme', 'name2', value) + self.new_custom_theme.config(text='New theme, see Help', + fg='#500000') + else: + self.AddChangedItem('main', 'Theme', 'name', value) + self.AddChangedItem('main', 'Theme', 'name2', '') + self.new_custom_theme.config(text='', fg='black') self.PaintThemeSample() def VarChanged_customTheme(self, *params): @@ -1367,14 +1364,14 @@ help_common = '''\ When you click either the Apply or Ok buttons, settings in this dialog that are different from IDLE's default are saved in a .idlerc directory in your home directory. Except as noted, -hese changes apply to all versions of IDLE installed on this +these changes apply to all versions of IDLE installed on this machine. Some do not take affect until IDLE is restarted. [Cancel] only cancels changes made since the last save. ''' help_pages = { 'Highlighting':''' Highlighting: -The IDLE Dark color theme is new in Octover 2015. It can only +The IDLE Dark color theme is new in October 2015. It can only be used with older IDLE releases if it is saved as a custom theme, with a different name. ''' diff --git a/Lib/idlelib/configHandler.py b/Lib/idlelib/configHandler.py index 899e50a..7d1e388 100644 --- a/Lib/idlelib/configHandler.py +++ b/Lib/idlelib/configHandler.py @@ -373,8 +373,32 @@ class IdleConf: return theme def CurrentTheme(self): - "Return the name of the currently active theme." - return self.GetOption('main', 'Theme', 'name', default='') + """Return the name of the currently active text color theme. + + idlelib.config-main.def includes this section + [Theme] + default= 1 + name= IDLE Classic + name2= + # name2 set in user config-main.cfg for themes added after 2015 Oct 1 + + Item name2 is needed because setting name to a new builtin + causes older IDLEs to display multiple error messages or quit. + See https://bugs.python.org/issue25313. + When default = True, name2 takes precedence over name, + while older IDLEs will just use name. + """ + default = self.GetOption('main', 'Theme', 'default', + type='bool', default=True) + if default: + theme = self.GetOption('main', 'Theme', 'name2', default='') + if default and not theme or not default: + theme = self.GetOption('main', 'Theme', 'name', default='') + source = self.defaultCfg if default else self.userCfg + if source['highlight'].has_section(theme): + return theme + else: + return "IDLE Classic" def CurrentKeys(self): "Return the name of the currently active key set." |