[Python-checkins] bpo-33610: IDLE's code-context always shows current context immediately (GH-14821) (#14846)
Terry Jan Reedy
webhook-mailer at python.org
Thu Jul 18 16:47:30 EDT 2019
https://github.com/python/cpython/commit/86eb5daaf31860da479e034d69e9a6d4f47a8eb6
commit: 86eb5daaf31860da479e034d69e9a6d4f47a8eb6
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: Terry Jan Reedy <tjreedy at udel.edu>
date: 2019-07-18T16:47:26-04:00
summary:
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 e0a1f8fb5c60886dbddf1a3ccb5d47576bdd43e2)
Co-authored-by: Tal Einat <taleinat at gmail.com>
files:
A Misc/NEWS.d/next/IDLE/2019-07-18-10-11-36.bpo-33610.xYqMLg.rst
M Lib/idlelib/codecontext.py
M Lib/idlelib/idle_test/test_codecontext.py
diff --git a/Lib/idlelib/codecontext.py b/Lib/idlelib/codecontext.py
index 9bd0fa1753fc..3103391cfe58 100644
--- a/Lib/idlelib/codecontext.py
+++ b/Lib/idlelib/codecontext.py
@@ -63,10 +63,13 @@ def __init__(self, editwin):
"""
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 @@ def toggle_code_context_event(self, event=None):
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 05d3209db568..c6c8e8efcd4f 100644
--- a/Lib/idlelib/idle_test/test_codecontext.py
+++ b/Lib/idlelib/idle_test/test_codecontext.py
@@ -135,7 +135,7 @@ def test_toggle_code_context_event(self):
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 @@ def test_toggle_code_context_event(self):
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 @@ def test_font(self):
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:
diff --git a/Misc/NEWS.d/next/IDLE/2019-07-18-10-11-36.bpo-33610.xYqMLg.rst b/Misc/NEWS.d/next/IDLE/2019-07-18-10-11-36.bpo-33610.xYqMLg.rst
new file mode 100644
index 000000000000..6775b04378b0
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2019-07-18-10-11-36.bpo-33610.xYqMLg.rst
@@ -0,0 +1 @@
+Fix code context not showing the correct context when first toggled on.
More information about the Python-checkins
mailing list