[3.12] gh-103820: IDLE: Do not interpret buttons 4/5 as scrolling on non-X11 (GH-103821) (GH-114901)

Also fix test_mousewheel: do not skip a check which was broken due to incorrect
delta on Aqua and XQuartz, and probably not because of `.update_idletasks()`.
(cherry picked from commit d25d4ee60c)

Co-authored-by: Christopher Chavez <chrischavez@gmx.us>
This commit is contained in:
Miss Islington (bot) 2024-02-02 14:12:31 +01:00 committed by GitHub
parent 8cb7e5cc7c
commit 564d8484d1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 26 additions and 15 deletions

View file

@ -166,6 +166,7 @@ class EditorWindow:
text.bind("<3>",self.right_menu_event) text.bind("<3>",self.right_menu_event)
text.bind('<MouseWheel>', wheel_event) text.bind('<MouseWheel>', wheel_event)
if text._windowingsystem == 'x11':
text.bind('<Button-4>', wheel_event) text.bind('<Button-4>', wheel_event)
text.bind('<Button-5>', wheel_event) text.bind('<Button-5>', wheel_event)
text.bind('<Configure>', self.handle_winconfig) text.bind('<Configure>', self.handle_winconfig)

View file

@ -690,16 +690,22 @@ class ShellSidebarTest(unittest.TestCase):
last_lineno = get_end_linenumber(text) last_lineno = get_end_linenumber(text)
self.assertIsNotNone(text.dlineinfo(text.index(f'{last_lineno}.0'))) self.assertIsNotNone(text.dlineinfo(text.index(f'{last_lineno}.0')))
# Scroll up using the <MouseWheel> event. # Delta for <MouseWheel>, whose meaning is platform-dependent.
# The meaning of delta is platform-dependent. delta = 1 if sidebar.canvas._windowingsystem == 'aqua' else 120
delta = -1 if sys.platform == 'darwin' else 120
# Scroll up.
if sidebar.canvas._windowingsystem == 'x11':
sidebar.canvas.event_generate('<Button-4>', x=0, y=0)
else:
sidebar.canvas.event_generate('<MouseWheel>', x=0, y=0, delta=delta) sidebar.canvas.event_generate('<MouseWheel>', x=0, y=0, delta=delta)
yield yield
if sys.platform != 'darwin': # .update_idletasks() does not work.
self.assertIsNone(text.dlineinfo(text.index(f'{last_lineno}.0'))) self.assertIsNone(text.dlineinfo(text.index(f'{last_lineno}.0')))
# Scroll back down using the <Button-5> event. # Scroll back down.
if sidebar.canvas._windowingsystem == 'x11':
sidebar.canvas.event_generate('<Button-5>', x=0, y=0) sidebar.canvas.event_generate('<Button-5>', x=0, y=0)
else:
sidebar.canvas.event_generate('<MouseWheel>', x=0, y=0, delta=-delta)
yield yield
self.assertIsNotNone(text.dlineinfo(text.index(f'{last_lineno}.0'))) self.assertIsNotNone(text.dlineinfo(text.index(f'{last_lineno}.0')))

View file

@ -285,6 +285,7 @@ class TreeNode:
self.label.bind("<1>", self.select_or_edit) self.label.bind("<1>", self.select_or_edit)
self.label.bind("<Double-1>", self.flip) self.label.bind("<Double-1>", self.flip)
self.label.bind("<MouseWheel>", lambda e: wheel_event(e, self.canvas)) self.label.bind("<MouseWheel>", lambda e: wheel_event(e, self.canvas))
if self.label._windowingsystem == 'x11':
self.label.bind("<Button-4>", lambda e: wheel_event(e, self.canvas)) self.label.bind("<Button-4>", lambda e: wheel_event(e, self.canvas))
self.label.bind("<Button-5>", lambda e: wheel_event(e, self.canvas)) self.label.bind("<Button-5>", lambda e: wheel_event(e, self.canvas))
self.text_id = id self.text_id = id
@ -460,6 +461,7 @@ class ScrolledCanvas:
self.canvas.bind("<Key-Up>", self.unit_up) self.canvas.bind("<Key-Up>", self.unit_up)
self.canvas.bind("<Key-Down>", self.unit_down) self.canvas.bind("<Key-Down>", self.unit_down)
self.canvas.bind("<MouseWheel>", wheel_event) self.canvas.bind("<MouseWheel>", wheel_event)
if self.canvas._windowingsystem == 'x11':
self.canvas.bind("<Button-4>", wheel_event) self.canvas.bind("<Button-4>", wheel_event)
self.canvas.bind("<Button-5>", wheel_event) self.canvas.bind("<Button-5>", wheel_event)
#if isinstance(master, Toplevel) or isinstance(master, Tk): #if isinstance(master, Toplevel) or isinstance(master, Tk):

View file

@ -0,0 +1,2 @@
Revise IDLE bindings so that events from mouse button 4/5 on non-X11
windowing systems (i.e. Win32 and Aqua) are not mistaken for scrolling.