Skip to content

Commit e995c58

Browse files
[3.11] gh-103820: IDLE: Do not interpret buttons 4/5 as scrolling on non-X11 (GH-103821) (GH-114902)
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 d25d4ee) Co-authored-by: Christopher Chavez <[email protected]>
1 parent 1eb791c commit e995c58

File tree

4 files changed

+25
-14
lines changed

4 files changed

+25
-14
lines changed

Lib/idlelib/editor.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,9 @@ def __init__(self, flist=None, filename=None, key=None, root=None):
166166
text.bind("<3>",self.right_menu_event)
167167

168168
text.bind('<MouseWheel>', wheel_event)
169-
text.bind('<Button-4>', wheel_event)
170-
text.bind('<Button-5>', wheel_event)
169+
if text._windowingsystem == 'x11':
170+
text.bind('<Button-4>', wheel_event)
171+
text.bind('<Button-5>', wheel_event)
171172
text.bind('<Configure>', self.handle_winconfig)
172173
text.bind("<<cut>>", self.cut)
173174
text.bind("<<copy>>", self.copy)

Lib/idlelib/idle_test/test_sidebar.py

+14-8
Original file line numberDiff line numberDiff line change
@@ -690,16 +690,22 @@ def test_mousewheel(self):
690690
last_lineno = get_end_linenumber(text)
691691
self.assertIsNotNone(text.dlineinfo(text.index(f'{last_lineno}.0')))
692692

693-
# Scroll up using the <MouseWheel> event.
694-
# The meaning of delta is platform-dependent.
695-
delta = -1 if sys.platform == 'darwin' else 120
696-
sidebar.canvas.event_generate('<MouseWheel>', x=0, y=0, delta=delta)
693+
# Delta for <MouseWheel>, whose meaning is platform-dependent.
694+
delta = 1 if sidebar.canvas._windowingsystem == 'aqua' else 120
695+
696+
# Scroll up.
697+
if sidebar.canvas._windowingsystem == 'x11':
698+
sidebar.canvas.event_generate('<Button-4>', x=0, y=0)
699+
else:
700+
sidebar.canvas.event_generate('<MouseWheel>', x=0, y=0, delta=delta)
697701
yield
698-
if sys.platform != 'darwin': # .update_idletasks() does not work.
699-
self.assertIsNone(text.dlineinfo(text.index(f'{last_lineno}.0')))
702+
self.assertIsNone(text.dlineinfo(text.index(f'{last_lineno}.0')))
700703

701-
# Scroll back down using the <Button-5> event.
702-
sidebar.canvas.event_generate('<Button-5>', x=0, y=0)
704+
# Scroll back down.
705+
if sidebar.canvas._windowingsystem == 'x11':
706+
sidebar.canvas.event_generate('<Button-5>', x=0, y=0)
707+
else:
708+
sidebar.canvas.event_generate('<MouseWheel>', x=0, y=0, delta=-delta)
703709
yield
704710
self.assertIsNotNone(text.dlineinfo(text.index(f'{last_lineno}.0')))
705711

Lib/idlelib/tree.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -285,8 +285,9 @@ def drawtext(self):
285285
self.label.bind("<1>", self.select_or_edit)
286286
self.label.bind("<Double-1>", self.flip)
287287
self.label.bind("<MouseWheel>", lambda e: wheel_event(e, self.canvas))
288-
self.label.bind("<Button-4>", lambda e: wheel_event(e, self.canvas))
289-
self.label.bind("<Button-5>", lambda e: wheel_event(e, self.canvas))
288+
if self.label._windowingsystem == 'x11':
289+
self.label.bind("<Button-4>", lambda e: wheel_event(e, self.canvas))
290+
self.label.bind("<Button-5>", lambda e: wheel_event(e, self.canvas))
290291
self.text_id = id
291292

292293
def select_or_edit(self, event=None):
@@ -460,8 +461,9 @@ def __init__(self, master, **opts):
460461
self.canvas.bind("<Key-Up>", self.unit_up)
461462
self.canvas.bind("<Key-Down>", self.unit_down)
462463
self.canvas.bind("<MouseWheel>", wheel_event)
463-
self.canvas.bind("<Button-4>", wheel_event)
464-
self.canvas.bind("<Button-5>", wheel_event)
464+
if self.canvas._windowingsystem == 'x11':
465+
self.canvas.bind("<Button-4>", wheel_event)
466+
self.canvas.bind("<Button-5>", wheel_event)
465467
#if isinstance(master, Toplevel) or isinstance(master, Tk):
466468
self.canvas.bind("<Alt-Key-2>", self.zoom_height)
467469
self.canvas.focus_set()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Revise IDLE bindings so that events from mouse button 4/5 on non-X11
2+
windowing systems (i.e. Win32 and Aqua) are not mistaken for scrolling.

0 commit comments

Comments
 (0)