]> granicus.if.org Git - python/commitdiff
bpo-21519: IDLE basic custom key entry better detects duplicates. (#2428)
authorterryjreedy <tjreedy@udel.edu>
Tue, 27 Jun 2017 05:23:55 +0000 (01:23 -0400)
committerGitHub <noreply@github.com>
Tue, 27 Jun 2017 05:23:55 +0000 (01:23 -0400)
Lib/idlelib/config_key.py
Lib/idlelib/idle_test/test_config_key.py
Misc/NEWS.d/next/IDLE/2017-06-27-00-29-56.bpo-21519.fTj9T0.rst [new file with mode: 0644]

index 8d575ec43ca833919876fda9138e463056954b04..fc6e341acad0eee65af5ef0f69d070c7722cabb5 100644 (file)
@@ -250,10 +250,10 @@ class GetKeysDialog(Toplevel):
         '''
         finalKey = self.listKeysFinal.get(ANCHOR)
         modifiers = self.GetModifiers()
-        # create a key sequence list for overlap check:
-        keySequence = keys.split()
         keysOK = False
         title = self.keyerror_title
+        key_sequences = [key for keylist in self.currentKeySequences
+                             for key in keylist]
         if not keys.endswith('>'):
             self.showerror(title, parent=self,
                            message='Missing the final Key')
@@ -267,7 +267,7 @@ class GetKeysDialog(Toplevel):
             msg = 'The shift modifier by itself may not be used with'\
                   ' this key symbol.'
             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.'
             self.showerror(title=title, parent=self, message=msg)
         else:
index a4227ed0552b7f2b375dfe3006d8709cf8a197c5..9074e23aab35d1859439c6585dfbb8bc91177da0 100644 (file)
@@ -28,8 +28,9 @@ class ValidationTest(unittest.TestCase):
         requires('gui')
         cls.root = Tk()
         cls.root.withdraw()
+        keylist = [['<Key-F12>'], ['<Control-Key-x>', '<Control-Key-X>']]
         cls.dialog = cls.Validator(
-            cls.root, 'Title', '<<Test>>', [['<Key-F12>']], _utest=True)
+            cls.root, 'Title', '<<Test>>', keylist, _utest=True)
 
     @classmethod
     def tearDownClass(cls):
@@ -78,10 +79,15 @@ class ValidationTest(unittest.TestCase):
         self.dialog.GetModifiers.result = []
 
     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.assertFalse(self.dialog.KeysOK('<Key-F12>'))
-        self.assertIn('already in use', self.dialog.showerror.message)
 
     def test_bind_ok(self):
         self.assertTrue(self.dialog.bind_ok('<Control-Shift-Key-a>'))
diff --git a/Misc/NEWS.d/next/IDLE/2017-06-27-00-29-56.bpo-21519.fTj9T0.rst b/Misc/NEWS.d/next/IDLE/2017-06-27-00-29-56.bpo-21519.fTj9T0.rst
new file mode 100644 (file)
index 0000000..b224f6b
--- /dev/null
@@ -0,0 +1,2 @@
+IDLE's basic custom key entry dialog now detects duplicates properly.
+Original patch by Saimadhav Heblikar.