diff options
author | Tal Einat <taleinat@gmail.com> | 2019-07-18 20:03:18 (GMT) |
---|---|---|
committer | Terry Jan Reedy <tjreedy@udel.edu> | 2019-07-18 20:03:18 (GMT) |
commit | e0a1f8fb5c60886dbddf1a3ccb5d47576bdd43e2 (patch) | |
tree | 6c5572560cdc1c0c9941edf11f08886a4d05243b /Lib | |
parent | 323842c2792a81e87917790506ec3457832c84b3 (diff) | |
download | cpython-e0a1f8fb5c60886dbddf1a3ccb5d47576bdd43e2.zip cpython-e0a1f8fb5c60886dbddf1a3ccb5d47576bdd43e2.tar.gz cpython-e0a1f8fb5c60886dbddf1a3ccb5d47576bdd43e2.tar.bz2 |
bpo-33610: IDLE's code-context always shows current context immediately (GH-14821)
Eliminate delay of up to 100ms and accompanying visual artifact.
Fix bug of never showing context when hide and show.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/idlelib/codecontext.py | 11 | ||||
-rw-r--r-- | Lib/idlelib/idle_test/test_codecontext.py | 17 |
2 files changed, 21 insertions, 7 deletions
diff --git a/Lib/idlelib/codecontext.py b/Lib/idlelib/codecontext.py index 9bd0fa1..3103391 100644 --- a/Lib/idlelib/codecontext.py +++ b/Lib/idlelib/codecontext.py @@ -63,10 +63,13 @@ class CodeContext: """ self.editwin = editwin self.text = editwin.text + self._reset() + + def _reset(self): self.context = None + self.t1 = None self.topvisible = 1 self.info = [(0, -1, "", False)] - self.t1 = None @classmethod def reload(cls): @@ -112,17 +115,17 @@ class CodeContext: padx=padx, border=border, relief=SUNKEN, state='disabled') self.update_highlight_colors() self.context.bind('<ButtonRelease-1>', self.jumptoline) + # Get the current context and initiate the recurring update event. + self.timer_event() # Pack the context widget before and above the text_frame widget, # thus ensuring that it will appear directly above text_frame. self.context.pack(side=TOP, fill=X, expand=False, before=self.editwin.text_frame) menu_status = 'Hide' - self.t1 = self.text.after(self.UPDATEINTERVAL, self.timer_event) else: self.context.destroy() - self.context = None self.text.after_cancel(self.t1) - self.t1 = None + self._reset() menu_status = 'Show' self.editwin.update_menu_label(menu='options', index='* Code Context', label=f'{menu_status} Code Context') diff --git a/Lib/idlelib/idle_test/test_codecontext.py b/Lib/idlelib/idle_test/test_codecontext.py index 05d3209..c6c8e8e 100644 --- a/Lib/idlelib/idle_test/test_codecontext.py +++ b/Lib/idlelib/idle_test/test_codecontext.py @@ -135,7 +135,7 @@ class CodeContextTest(unittest.TestCase): toggle() # Toggle on. - eq(toggle(), 'break') + toggle() self.assertIsNotNone(cc.context) eq(cc.context['font'], self.text['font']) eq(cc.context['fg'], self.highlight_cfg['foreground']) @@ -145,11 +145,22 @@ class CodeContextTest(unittest.TestCase): eq(self.root.tk.call('after', 'info', self.cc.t1)[1], 'timer') # Toggle off. - eq(toggle(), 'break') + toggle() self.assertIsNone(cc.context) eq(cc.editwin.label, 'Show Code Context') self.assertIsNone(self.cc.t1) + # Scroll down and toggle back on. + line11_context = '\n'.join(x[2] for x in cc.get_context(11)[0]) + cc.text.yview(11) + toggle() + eq(cc.context.get('1.0', 'end-1c'), line11_context) + + # Toggle off and on again. + toggle() + toggle() + eq(cc.context.get('1.0', 'end-1c'), line11_context) + def test_get_context(self): eq = self.assertEqual gc = self.cc.get_context @@ -329,7 +340,7 @@ class CodeContextTest(unittest.TestCase): eq = self.assertEqual cc = self.cc save_font = cc.text['font'] - test_font = 'TkFixedFont' + test_font = 'TkTextFont' # Ensure code context is not active. if cc.context is not None: |