From 4d3ee3cb2a92bc8973ce16d8d50337b439671e4e Mon Sep 17 00:00:00 2001 From: Tal Einat Date: Wed, 17 Jul 2019 21:44:45 +0300 Subject: [PATCH 1/4] When toggling code-context on, immediately show the current context. This avoids a delay of up to 100ms and the accompanying visual artifact. --- Lib/idlelib/codecontext.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Lib/idlelib/codecontext.py b/Lib/idlelib/codecontext.py index 9bd0fa1753fc6b..4e5f5448689ebe 100644 --- a/Lib/idlelib/codecontext.py +++ b/Lib/idlelib/codecontext.py @@ -112,12 +112,13 @@ def toggle_code_context_event(self, event=None): padx=padx, border=border, relief=SUNKEN, state='disabled') self.update_highlight_colors() self.context.bind('', 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 From d75c69b904828b875e1a1818b2ee79f9dfecfb52 Mon Sep 17 00:00:00 2001 From: Tal Einat Date: Thu, 18 Jul 2019 08:39:53 +0300 Subject: [PATCH 2/4] reset code context to its initial state when toggling off --- Lib/idlelib/codecontext.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Lib/idlelib/codecontext.py b/Lib/idlelib/codecontext.py index 4e5f5448689ebe..3103391cfe58be 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): @@ -121,9 +124,8 @@ def toggle_code_context_event(self, event=None): menu_status = 'Hide' 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') From ac3f4dc733259c503c0fdba18fb7068e5414dcc7 Mon Sep 17 00:00:00 2001 From: Tal Einat Date: Thu, 18 Jul 2019 10:01:18 +0300 Subject: [PATCH 3/4] expand toggling tests to cover newly fixed issues --- Lib/idlelib/idle_test/test_codecontext.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/Lib/idlelib/idle_test/test_codecontext.py b/Lib/idlelib/idle_test/test_codecontext.py index 05d3209db56888..c6c8e8efcd4fda 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: From 18497133d2ef81d875f45cc19a6b4dfd5db6994d Mon Sep 17 00:00:00 2001 From: Tal Einat Date: Thu, 18 Jul 2019 10:11:54 +0300 Subject: [PATCH 4/4] add NEWS entry --- Misc/NEWS.d/next/IDLE/2019-07-18-10-11-36.bpo-33610.xYqMLg.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/IDLE/2019-07-18-10-11-36.bpo-33610.xYqMLg.rst 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 00000000000000..6775b04378b0e7 --- /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.