Skip to content

Commit 4ed5552

Browse files
committed
fixed horizontal scrolling issue in IDLE editor
1 parent a752f58 commit 4ed5552

File tree

4 files changed

+32
-12
lines changed

4 files changed

+32
-12
lines changed

Lib/idlelib/idle_test/test_tree.py

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,27 +32,39 @@ def test_init(self):
3232
class TestScrollEvent(unittest.TestCase):
3333

3434
def test_wheel_event(self):
35-
# Fake widget class containing `yview` only.
35+
# Fake widget class containing `xview` and `yview` only.
3636
class _Widget:
37-
def __init__(widget, *expected):
37+
def __init__(widget, direction, *expected):
38+
widget.direction = direction
3839
widget.expected = expected
40+
def xview(widget, *args):
41+
self.assertEqual(widget.state&1, 1)
42+
self.assertTupleEqual(widget.expected, args)
3943
def yview(widget, *args):
44+
self.assertEqual(widget.state&1, 0)
4045
self.assertTupleEqual(widget.expected, args)
4146
# Fake event class
4247
class _Event:
4348
pass
44-
# (type, delta, num, amount)
45-
tests = ((EventType.MouseWheel, 120, -1, -5),
46-
(EventType.MouseWheel, -120, -1, 5),
47-
(EventType.ButtonPress, -1, 4, -5),
48-
(EventType.ButtonPress, -1, 5, 5))
49+
# (type, delta, num, state, amount)
50+
# If the first bit of state is set, scroll horizontally
51+
tests = ((EventType.MouseWheel, 120, -1, 0, -5),
52+
(EventType.MouseWheel, -120, -1, 0, 5),
53+
(EventType.ButtonPress, -1, 4, 0, -5),
54+
(EventType.ButtonPress, -1, 5, 0, 5),
55+
(EventType.MouseWheel, 120, -1, 1, -5),
56+
(EventType.MouseWheel, -120, -1, 1, 5),
57+
(EventType.ButtonPress, -1, 4, 1, -5),
58+
(EventType.ButtonPress, -1, 5, 1, 5))
4959

5060
event = _Event()
51-
for ty, delta, num, amount in tests:
61+
for ty, delta, num, state, amount in tests:
5262
event.type = ty
5363
event.delta = delta
5464
event.num = num
55-
res = tree.wheel_event(event, _Widget(SCROLL, amount, "units"))
65+
event.state = state
66+
res = tree.wheel_event(event, state,
67+
_Widget(SCROLL, amount, "units"))
5668
self.assertEqual(res, "break")
5769

5870

Lib/idlelib/tree.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,19 +65,25 @@ def wheel_event(event, widget=None):
6565
Macs use wheel down (delta = 1*n) to scroll up, so positive
6666
delta means to scroll up on both systems.
6767
68+
On both Windows and X-11, if the first bit of event.state is
69+
set, it means that we should scroll horizontally not vertically.
70+
6871
X-11 sends Control-Button-4,5 events instead.
6972
7073
The widget parameter is needed so browser label bindings can pass
7174
the underlying canvas.
7275
73-
This function depends on widget.yview to not be overridden by
74-
a subclass.
76+
This function depends on widget.xview/widget.yview to not be
77+
overridden by a subclass.
7578
"""
7679
up = {EventType.MouseWheel: event.delta > 0,
7780
EventType.ButtonPress: event.num == 4}
7881
lines = -5 if up[event.type] else 5
7982
widget = event.widget if widget is None else widget
80-
widget.yview(SCROLL, lines, 'units')
83+
if event.state&1: # If the first bit is set, scroll horizontally
84+
widget.xview(SCROLL, lines, 'units')
85+
else:
86+
widget.yview(SCROLL, lines, 'units')
8187
return 'break'
8288

8389

Misc/ACKS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1942,6 +1942,7 @@ John Tromp
19421942
Diane Trout
19431943
Jason Trowbridge
19441944
Steven Troxler
1945+
Daniel Tsvetkov
19451946
Brent Tubbs
19461947
Anthony Tuininga
19471948
Erno Tukia
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fixed trackpad scrolling direction in :mod:`IDLE <idlelib>`

0 commit comments

Comments
 (0)