Commit e0a1f8fb authored by Tal Einat's avatar Tal Einat Committed by Terry Jan Reedy

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.
parent 323842c2
...@@ -63,10 +63,13 @@ class CodeContext: ...@@ -63,10 +63,13 @@ class CodeContext:
""" """
self.editwin = editwin self.editwin = editwin
self.text = editwin.text self.text = editwin.text
self._reset()
def _reset(self):
self.context = None self.context = None
self.t1 = None
self.topvisible = 1 self.topvisible = 1
self.info = [(0, -1, "", False)] self.info = [(0, -1, "", False)]
self.t1 = None
@classmethod @classmethod
def reload(cls): def reload(cls):
...@@ -112,17 +115,17 @@ class CodeContext: ...@@ -112,17 +115,17 @@ class CodeContext:
padx=padx, border=border, relief=SUNKEN, state='disabled') padx=padx, border=border, relief=SUNKEN, state='disabled')
self.update_highlight_colors() self.update_highlight_colors()
self.context.bind('<ButtonRelease-1>', self.jumptoline) 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, # Pack the context widget before and above the text_frame widget,
# thus ensuring that it will appear directly above text_frame. # thus ensuring that it will appear directly above text_frame.
self.context.pack(side=TOP, fill=X, expand=False, self.context.pack(side=TOP, fill=X, expand=False,
before=self.editwin.text_frame) before=self.editwin.text_frame)
menu_status = 'Hide' menu_status = 'Hide'
self.t1 = self.text.after(self.UPDATEINTERVAL, self.timer_event)
else: else:
self.context.destroy() self.context.destroy()
self.context = None
self.text.after_cancel(self.t1) self.text.after_cancel(self.t1)
self.t1 = None self._reset()
menu_status = 'Show' menu_status = 'Show'
self.editwin.update_menu_label(menu='options', index='* Code Context', self.editwin.update_menu_label(menu='options', index='* Code Context',
label=f'{menu_status} Code Context') label=f'{menu_status} Code Context')
......
...@@ -135,7 +135,7 @@ class CodeContextTest(unittest.TestCase): ...@@ -135,7 +135,7 @@ class CodeContextTest(unittest.TestCase):
toggle() toggle()
# Toggle on. # Toggle on.
eq(toggle(), 'break') toggle()
self.assertIsNotNone(cc.context) self.assertIsNotNone(cc.context)
eq(cc.context['font'], self.text['font']) eq(cc.context['font'], self.text['font'])
eq(cc.context['fg'], self.highlight_cfg['foreground']) eq(cc.context['fg'], self.highlight_cfg['foreground'])
...@@ -145,11 +145,22 @@ class CodeContextTest(unittest.TestCase): ...@@ -145,11 +145,22 @@ class CodeContextTest(unittest.TestCase):
eq(self.root.tk.call('after', 'info', self.cc.t1)[1], 'timer') eq(self.root.tk.call('after', 'info', self.cc.t1)[1], 'timer')
# Toggle off. # Toggle off.
eq(toggle(), 'break') toggle()
self.assertIsNone(cc.context) self.assertIsNone(cc.context)
eq(cc.editwin.label, 'Show Code Context') eq(cc.editwin.label, 'Show Code Context')
self.assertIsNone(self.cc.t1) 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): def test_get_context(self):
eq = self.assertEqual eq = self.assertEqual
gc = self.cc.get_context gc = self.cc.get_context
...@@ -329,7 +340,7 @@ class CodeContextTest(unittest.TestCase): ...@@ -329,7 +340,7 @@ class CodeContextTest(unittest.TestCase):
eq = self.assertEqual eq = self.assertEqual
cc = self.cc cc = self.cc
save_font = cc.text['font'] save_font = cc.text['font']
test_font = 'TkFixedFont' test_font = 'TkTextFont'
# Ensure code context is not active. # Ensure code context is not active.
if cc.context is not None: if cc.context is not None:
......
Fix code context not showing the correct context when first toggled on.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment