bpo-33610: IDLE's code-context always shows current context immediately (GH-14821) (#14846)
Eliminate delay of up to 100ms and accompanying visual artifact.
Fix bug of never showing context when hide and show.
(cherry picked from commit e0a1f8fb5c
)
Co-authored-by: Tal Einat <taleinat@gmail.com>
This commit is contained in:
parent
652b667b13
commit
86eb5daaf3
|
@ -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')
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Fix code context not showing the correct context when first toggled on.
|
Loading…
Reference in New Issue