diff options
author | Tal Einat <taleinat+github@gmail.com> | 2019-08-14 17:06:06 (GMT) |
---|---|---|
committer | Terry Jan Reedy <tjreedy@udel.edu> | 2019-08-14 17:06:06 (GMT) |
commit | 71662dc2f12a7e77e5e1dfe64ec87c1b459c3f59 (patch) | |
tree | a84424e814ae1ede7053dc1d9b21c7bdd1ac3e4d /Lib/idlelib | |
parent | 4fa10dde40356d7c71e5524233bafc221d9e2deb (diff) | |
download | cpython-71662dc2f12a7e77e5e1dfe64ec87c1b459c3f59.zip cpython-71662dc2f12a7e77e5e1dfe64ec87c1b459c3f59.tar.gz cpython-71662dc2f12a7e77e5e1dfe64ec87c1b459c3f59.tar.bz2 |
bpo-37849: IDLE: fix completion window positioning above line (GH-15267)
Diffstat (limited to 'Lib/idlelib')
-rw-r--r-- | Lib/idlelib/NEWS.txt | 5 | ||||
-rw-r--r-- | Lib/idlelib/autocomplete_w.py | 15 |
2 files changed, 18 insertions, 2 deletions
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt index 0fff700..45918cf 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 c69ab4a..5035e06 100644 --- a/Lib/idlelib/autocomplete_w.py +++ b/Lib/idlelib/autocomplete_w.py @@ -52,10 +52,12 @@ class AutoCompleteWindow: # (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 @@ class AutoCompleteWindow: 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 @@ class AutoCompleteWindow: 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 @@ class AutoCompleteWindow: acw.unbind(WINCONFIG_SEQUENCE, self.winconfigid) self.winconfigid = None + self.is_configuring = False + def _hide_event_check(self): if not self.autocompletewindow: return |