[3.6] bpo-21519: IDLE basic custom key entry better detects duplicates. (GH-2428) (#2433)
Original patch by Saimadhav Heblikar.
(cherry picked from commit 44913e5
)
This commit is contained in:
parent
8bdc3bd3d6
commit
93b88e9953
|
@ -250,10 +250,10 @@ class GetKeysDialog(Toplevel):
|
||||||
'''
|
'''
|
||||||
finalKey = self.listKeysFinal.get(ANCHOR)
|
finalKey = self.listKeysFinal.get(ANCHOR)
|
||||||
modifiers = self.GetModifiers()
|
modifiers = self.GetModifiers()
|
||||||
# create a key sequence list for overlap check:
|
|
||||||
keySequence = keys.split()
|
|
||||||
keysOK = False
|
keysOK = False
|
||||||
title = self.keyerror_title
|
title = self.keyerror_title
|
||||||
|
key_sequences = [key for keylist in self.currentKeySequences
|
||||||
|
for key in keylist]
|
||||||
if not keys.endswith('>'):
|
if not keys.endswith('>'):
|
||||||
self.showerror(title, parent=self,
|
self.showerror(title, parent=self,
|
||||||
message='Missing the final Key')
|
message='Missing the final Key')
|
||||||
|
@ -267,7 +267,7 @@ class GetKeysDialog(Toplevel):
|
||||||
msg = 'The shift modifier by itself may not be used with'\
|
msg = 'The shift modifier by itself may not be used with'\
|
||||||
' this key symbol.'
|
' this key symbol.'
|
||||||
self.showerror(title=title, parent=self, message=msg)
|
self.showerror(title=title, parent=self, message=msg)
|
||||||
elif keySequence in self.currentKeySequences:
|
elif keys in key_sequences:
|
||||||
msg = 'This key combination is already in use.'
|
msg = 'This key combination is already in use.'
|
||||||
self.showerror(title=title, parent=self, message=msg)
|
self.showerror(title=title, parent=self, message=msg)
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -28,8 +28,9 @@ class ValidationTest(unittest.TestCase):
|
||||||
requires('gui')
|
requires('gui')
|
||||||
cls.root = Tk()
|
cls.root = Tk()
|
||||||
cls.root.withdraw()
|
cls.root.withdraw()
|
||||||
|
keylist = [['<Key-F12>'], ['<Control-Key-x>', '<Control-Key-X>']]
|
||||||
cls.dialog = cls.Validator(
|
cls.dialog = cls.Validator(
|
||||||
cls.root, 'Title', '<<Test>>', [['<Key-F12>']], _utest=True)
|
cls.root, 'Title', '<<Test>>', keylist, _utest=True)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def tearDownClass(cls):
|
def tearDownClass(cls):
|
||||||
|
@ -78,10 +79,15 @@ class ValidationTest(unittest.TestCase):
|
||||||
self.dialog.GetModifiers.result = []
|
self.dialog.GetModifiers.result = []
|
||||||
|
|
||||||
def test_keys_dup(self):
|
def test_keys_dup(self):
|
||||||
self.dialog.listKeysFinal.get.result = 'F12'
|
for mods, final, seq in (([], 'F12', '<Key-F12>'),
|
||||||
|
(['Control'], 'x', '<Control-Key-x>'),
|
||||||
|
(['Control'], 'X', '<Control-Key-X>')):
|
||||||
|
with self.subTest(m=mods, f=final, s=seq):
|
||||||
|
self.dialog.listKeysFinal.get.result = final
|
||||||
|
self.dialog.GetModifiers.result = mods
|
||||||
|
self.assertFalse(self.dialog.KeysOK(seq))
|
||||||
|
self.assertIn('already in use', self.dialog.showerror.message)
|
||||||
self.dialog.GetModifiers.result = []
|
self.dialog.GetModifiers.result = []
|
||||||
self.assertFalse(self.dialog.KeysOK('<Key-F12>'))
|
|
||||||
self.assertIn('already in use', self.dialog.showerror.message)
|
|
||||||
|
|
||||||
def test_bind_ok(self):
|
def test_bind_ok(self):
|
||||||
self.assertTrue(self.dialog.bind_ok('<Control-Shift-Key-a>'))
|
self.assertTrue(self.dialog.bind_ok('<Control-Shift-Key-a>'))
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
IDLE's basic custom key entry dialog now detects duplicates properly.
|
||||||
|
Original patch by Saimadhav Heblikar.
|
Loading…
Reference in New Issue