[Python-checkins] bpo-37849: IDLE: fix completion window positioning above line (GH-15267)
Miss Islington (bot)
webhook-mailer at python.org
Wed Aug 14 13:37:53 EDT 2019
https://github.com/python/cpython/commit/88cce7b59fa503616295ca1a25bce6251f9cd317
commit: 88cce7b59fa503616295ca1a25bce6251f9cd317
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: GitHub <noreply at github.com>
date: 2019-08-14T10:37:49-07:00
summary:
bpo-37849: IDLE: fix completion window positioning above line (GH-15267)
(cherry picked from commit 71662dc2f12a7e77e5e1dfe64ec87c1b459c3f59)
Co-authored-by: Tal Einat <taleinat+github at gmail.com>
files:
A Misc/NEWS.d/next/IDLE/2019-08-14-09-43-15.bpo-37849.-bcYF3.rst
M Lib/idlelib/NEWS.txt
M Lib/idlelib/autocomplete_w.py
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt
index d4a00027f858..b579c2c1a6dd 100644
--- a/Lib/idlelib/NEWS.txt
+++ b/Lib/idlelib/NEWS.txt
@@ -3,6 +3,11 @@ Released on 2019-09-30?
======================================
+bpo-37849: Fix completions list appearing too high or low when shown
+above the current line.
+
+bpo-36419: Refactor autocompete and improve testing.
+
bpo-37748: Reorder the Run menu. Put the most common choice,
Run Module, at the top.
diff --git a/Lib/idlelib/autocomplete_w.py b/Lib/idlelib/autocomplete_w.py
index c69ab4a36836..5035e067392e 100644
--- a/Lib/idlelib/autocomplete_w.py
+++ b/Lib/idlelib/autocomplete_w.py
@@ -52,10 +52,12 @@ def __init__(self, widget):
# (for example, he clicked the list)
self.userwantswindow = None
# event ids
- self.hideid = self.keypressid = self.listupdateid = self.winconfigid \
- = self.keyreleaseid = self.doubleclickid = None
+ self.hideid = self.keypressid = self.listupdateid = \
+ self.winconfigid = self.keyreleaseid = self.doubleclickid = None
# Flag set if last keypress was a tab
self.lastkey_was_tab = False
+ # Flag set to avoid recursive <Configure> callback invocations.
+ self.is_configuring = False
def _change_start(self, newstart):
min_len = min(len(self.start), len(newstart))
@@ -223,12 +225,18 @@ def show_window(self, comp_lists, index, complete, mode, userWantsWin):
self.widget.event_add(KEYRELEASE_VIRTUAL_EVENT_NAME,KEYRELEASE_SEQUENCE)
self.listupdateid = listbox.bind(LISTUPDATE_SEQUENCE,
self.listselect_event)
+ self.is_configuring = False
self.winconfigid = acw.bind(WINCONFIG_SEQUENCE, self.winconfig_event)
self.doubleclickid = listbox.bind(DOUBLECLICK_SEQUENCE,
self.doubleclick_event)
return None
def winconfig_event(self, event):
+ if self.is_configuring:
+ # Avoid running on recursive <Configure> callback invocations.
+ return
+
+ self.is_configuring = True
if not self.is_active():
return
# Position the completion list window
@@ -236,6 +244,7 @@ def winconfig_event(self, event):
text.see(self.startindex)
x, y, cx, cy = text.bbox(self.startindex)
acw = self.autocompletewindow
+ acw.update()
acw_width, acw_height = acw.winfo_width(), acw.winfo_height()
text_width, text_height = text.winfo_width(), text.winfo_height()
new_x = text.winfo_rootx() + min(x, max(0, text_width - acw_width))
@@ -256,6 +265,8 @@ def winconfig_event(self, event):
acw.unbind(WINCONFIG_SEQUENCE, self.winconfigid)
self.winconfigid = None
+ self.is_configuring = False
+
def _hide_event_check(self):
if not self.autocompletewindow:
return
diff --git a/Misc/NEWS.d/next/IDLE/2019-08-14-09-43-15.bpo-37849.-bcYF3.rst b/Misc/NEWS.d/next/IDLE/2019-08-14-09-43-15.bpo-37849.-bcYF3.rst
new file mode 100644
index 000000000000..9f700d9031f1
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2019-08-14-09-43-15.bpo-37849.-bcYF3.rst
@@ -0,0 +1,2 @@
+Fixed completions list appearing too high or low when shown above
+the current line.
More information about the Python-checkins
mailing list