[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:24:08 EDT 2019


https://github.com/python/cpython/commit/557802dc17498557e481f2ad3d4a83ece469e489
commit: 557802dc17498557e481f2ad3d4a83ece469e489
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: GitHub <noreply at github.com>
date: 2019-08-14T10:24:04-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 0fff7003b9d6..45918cf36b41 100644
--- a/Lib/idlelib/NEWS.txt
+++ b/Lib/idlelib/NEWS.txt
@@ -3,6 +3,11 @@ Released on 2019-10-20?
 ======================================
 
 
+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