bpo-37849: IDLE: fix completion window positioning above line (GH-15267)
This commit is contained in:
parent
4fa10dde40
commit
71662dc2f1
|
@ -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,
|
bpo-37748: Reorder the Run menu. Put the most common choice,
|
||||||
Run Module, at the top.
|
Run Module, at the top.
|
||||||
|
|
||||||
|
|
|
@ -52,10 +52,12 @@ class AutoCompleteWindow:
|
||||||
# (for example, he clicked the list)
|
# (for example, he clicked the list)
|
||||||
self.userwantswindow = None
|
self.userwantswindow = None
|
||||||
# event ids
|
# event ids
|
||||||
self.hideid = self.keypressid = self.listupdateid = self.winconfigid \
|
self.hideid = self.keypressid = self.listupdateid = \
|
||||||
= self.keyreleaseid = self.doubleclickid = None
|
self.winconfigid = self.keyreleaseid = self.doubleclickid = None
|
||||||
# Flag set if last keypress was a tab
|
# Flag set if last keypress was a tab
|
||||||
self.lastkey_was_tab = False
|
self.lastkey_was_tab = False
|
||||||
|
# Flag set to avoid recursive <Configure> callback invocations.
|
||||||
|
self.is_configuring = False
|
||||||
|
|
||||||
def _change_start(self, newstart):
|
def _change_start(self, newstart):
|
||||||
min_len = min(len(self.start), len(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.widget.event_add(KEYRELEASE_VIRTUAL_EVENT_NAME,KEYRELEASE_SEQUENCE)
|
||||||
self.listupdateid = listbox.bind(LISTUPDATE_SEQUENCE,
|
self.listupdateid = listbox.bind(LISTUPDATE_SEQUENCE,
|
||||||
self.listselect_event)
|
self.listselect_event)
|
||||||
|
self.is_configuring = False
|
||||||
self.winconfigid = acw.bind(WINCONFIG_SEQUENCE, self.winconfig_event)
|
self.winconfigid = acw.bind(WINCONFIG_SEQUENCE, self.winconfig_event)
|
||||||
self.doubleclickid = listbox.bind(DOUBLECLICK_SEQUENCE,
|
self.doubleclickid = listbox.bind(DOUBLECLICK_SEQUENCE,
|
||||||
self.doubleclick_event)
|
self.doubleclick_event)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def winconfig_event(self, event):
|
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():
|
if not self.is_active():
|
||||||
return
|
return
|
||||||
# Position the completion list window
|
# Position the completion list window
|
||||||
|
@ -236,6 +244,7 @@ class AutoCompleteWindow:
|
||||||
text.see(self.startindex)
|
text.see(self.startindex)
|
||||||
x, y, cx, cy = text.bbox(self.startindex)
|
x, y, cx, cy = text.bbox(self.startindex)
|
||||||
acw = self.autocompletewindow
|
acw = self.autocompletewindow
|
||||||
|
acw.update()
|
||||||
acw_width, acw_height = acw.winfo_width(), acw.winfo_height()
|
acw_width, acw_height = acw.winfo_width(), acw.winfo_height()
|
||||||
text_width, text_height = text.winfo_width(), text.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))
|
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)
|
acw.unbind(WINCONFIG_SEQUENCE, self.winconfigid)
|
||||||
self.winconfigid = None
|
self.winconfigid = None
|
||||||
|
|
||||||
|
self.is_configuring = False
|
||||||
|
|
||||||
def _hide_event_check(self):
|
def _hide_event_check(self):
|
||||||
if not self.autocompletewindow:
|
if not self.autocompletewindow:
|
||||||
return
|
return
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Fixed completions list appearing too high or low when shown above
|
||||||
|
the current line.
|
Loading…
Reference in New Issue