summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTony Lownds <tony@lownds.com>2002-09-29 00:23:08 (GMT)
committerTony Lownds <tony@lownds.com>2002-09-29 00:23:08 (GMT)
commitaf7a302c78258d418eba57bc2f80e4dabd8bbe9a (patch)
tree03df522a0e80380fd3de077d201e3d241b638bb3
parent6565b261b687078c0edf08cc68077adced0acdc0 (diff)
downloadcpython-af7a302c78258d418eba57bc2f80e4dabd8bbe9a.zip
cpython-af7a302c78258d418eba57bc2f80e4dabd8bbe9a.tar.gz
cpython-af7a302c78258d418eba57bc2f80e4dabd8bbe9a.tar.bz2
Mac users now see correct modifiers in the Key Binding Entry window.
-rw-r--r--Lib/idlelib/keybindingDialog.py64
1 files changed, 35 insertions, 29 deletions
diff --git a/Lib/idlelib/keybindingDialog.py b/Lib/idlelib/keybindingDialog.py
index f99e452..427da5c 100644
--- a/Lib/idlelib/keybindingDialog.py
+++ b/Lib/idlelib/keybindingDialog.py
@@ -26,12 +26,12 @@ class GetKeysDialog(Toplevel):
self.result=''
self.keyString=StringVar(self)
self.keyString.set('')
- self.keyCtrl=StringVar(self)
- self.keyCtrl.set('')
- self.keyAlt=StringVar(self)
- self.keyAlt.set('')
- self.keyShift=StringVar(self)
- self.keyShift.set('')
+ self.SetModifiersForPlatform()
+ self.modifier_vars = []
+ for modifier in self.modifiers:
+ variable = StringVar(self)
+ variable.set('')
+ self.modifier_vars.append(variable)
self.CreateWidgets()
self.LoadFinalKeyList()
self.withdraw() #hide while setting geometry
@@ -74,18 +74,16 @@ class GetKeysDialog(Toplevel):
labelKeysBasic = Label(self.frameKeySeqBasic,justify=LEFT,
textvariable=self.keyString,relief=GROOVE,borderwidth=2)
labelKeysBasic.pack(ipadx=5,ipady=5,fill=X)
- checkCtrl=Checkbutton(self.frameControlsBasic,
+ self.modifier_checkbuttons = {}
+ column = 0
+ for modifier, variable in zip(self.modifiers, self.modifier_vars):
+ label = self.modifier_label.get(modifier, modifier)
+ check=Checkbutton(self.frameControlsBasic,
command=self.BuildKeyString,
- text='Ctrl',variable=self.keyCtrl,onvalue='Control',offvalue='')
- checkCtrl.grid(row=0,column=0,padx=2,sticky=W)
- checkAlt=Checkbutton(self.frameControlsBasic,
- command=self.BuildKeyString,
- text='Alt',variable=self.keyAlt,onvalue='Alt',offvalue='')
- checkAlt.grid(row=0,column=1,padx=2,sticky=W)
- checkShift=Checkbutton(self.frameControlsBasic,
- command=self.BuildKeyString,
- text='Shift',variable=self.keyShift,onvalue='Shift',offvalue='')
- checkShift.grid(row=0,column=3,padx=2,sticky=W)
+ text=label,variable=variable,onvalue=modifier,offvalue='')
+ check.grid(row=0,column=column,padx=2,sticky=W)
+ self.modifier_checkbuttons[modifier] = check
+ column += 1
labelFnAdvice=Label(self.frameControlsBasic,justify=LEFT,
text="Select the desired modifier\n"+
"keys above, and final key\n"+
@@ -119,6 +117,21 @@ class GetKeysDialog(Toplevel):
"separated by a space, eg., <Alt-v> <Meta-v>." )
labelHelpAdvanced.grid(row=0,column=0,sticky=NSEW)
+ def SetModifiersForPlatform(self):
+ """Determine list of names of key modifiers for this platform.
+
+ The names are used to build Tk bindings -- it doesn't matter if the
+ keyboard has these keys, it matters if Tk understands them. The
+ order is also important: key binding equality depends on it, so
+ config-keys.def must use the same ordering.
+ """
+ import sys
+ if sys.platform == 'darwin' and sys.executable.count('.app'):
+ self.modifiers = ['Shift', 'Control', 'Option', 'Command']
+ else:
+ self.modifiers = ['Control', 'Alt', 'Shift']
+ self.modifier_label = {'Control': 'Ctrl'}
+
def ToggleLevel(self):
if self.buttonLevel.cget('text')[:8]=='Advanced':
self.ClearKeySeq()
@@ -152,22 +165,15 @@ class GetKeysDialog(Toplevel):
self.keyString.set(keyStr)
def GetModifiers(self):
- modList=[]
- ctrl=self.keyCtrl.get()
- alt=self.keyAlt.get()
- shift=self.keyShift.get()
- if ctrl: modList.append(ctrl)
- if alt: modList.append(alt)
- if shift: modList.append(shift)
- return modList
+ modList = [variable.get() for variable in self.modifier_vars]
+ return filter(None, modList)
def ClearKeySeq(self):
self.listKeysFinal.select_clear(0,END)
self.listKeysFinal.yview(MOVETO, '0.0')
- self.keyCtrl.set('')
- self.keyAlt.set(''),
- self.keyShift.set('')
- self.keyString.set('')
+ for variable in self.modifier_vars:
+ variable.set('')
+ self.keyString.set('')
def LoadFinalKeyList(self):
#these tuples are also available for use in validity checks