@@ -698,19 +698,30 @@ def _inject_mouse(screen, x, y, button):
698
698
event .ButtonState |= win32con .FROM_LEFT_1ST_BUTTON_PRESSED
699
699
if button & MouseEvent .RIGHT_CLICK != 0 :
700
700
event .ButtonState |= win32con .RIGHTMOST_BUTTON_PRESSED
701
+ if button & MouseEvent .SCROLL_UP != 0 :
702
+ event .EventFlags |= win32con .MOUSE_WHEELED
703
+ event .ButtonState = 120
704
+ if button & MouseEvent .SCROLL_DOWN != 0 :
705
+ event .EventFlags |= win32con .MOUSE_WHEELED
706
+ event .ButtonState = - 120
701
707
if button & MouseEvent .DOUBLE_CLICK != 0 :
702
708
event .EventFlags |= win32con .DOUBLE_CLICK
703
709
screen ._stdin .WriteConsoleInput ([event ])
704
710
else :
705
711
# Curses doesn't like no value in some cases - use a dummy button
706
712
# click which we don't use instead.
707
- bstate = curses .BUTTON4_CLICKED
713
+ bstate = curses .BUTTON2_CLICKED
708
714
if button & MouseEvent .LEFT_CLICK != 0 :
709
715
bstate |= curses .BUTTON1_CLICKED
710
716
if button & MouseEvent .RIGHT_CLICK != 0 :
711
717
bstate |= curses .BUTTON3_CLICKED
712
718
if button & MouseEvent .DOUBLE_CLICK != 0 :
713
719
bstate |= curses .BUTTON1_DOUBLE_CLICKED
720
+ if sys .platform != "win32" and hasattr (curses , "BUTTON5_PRESSED" ):
721
+ if button & MouseEvent .SCROLL_UP != 0 :
722
+ bstate |= curses .BUTTON4_CLICKED
723
+ if button & MouseEvent .SCROLL_DOWN != 0 :
724
+ bstate |= curses .BUTTON5_CLICKED
714
725
curses .ungetmouse (0 , x , y , 0 , bstate )
715
726
716
727
def test_key_input (self ):
@@ -787,6 +798,24 @@ def internal_checks(screen):
787
798
self .assertEqual (ev .buttons , MouseEvent .DOUBLE_CLICK )
788
799
self .assertIsNone (screen .get_event ())
789
800
801
+ # Not all curses versions support scrolling...
802
+ if sys .platform == "win32" or hasattr (curses , "BUTTON5_PRESSED" ):
803
+ # Check scroll up
804
+ self ._inject_mouse (screen , 1 , 1 , MouseEvent .SCROLL_UP )
805
+ ev = screen .get_event ()
806
+ self .assertEqual (ev .x , 1 )
807
+ self .assertEqual (ev .y , 1 )
808
+ self .assertEqual (ev .buttons , MouseEvent .SCROLL_UP )
809
+ self .assertIsNone (screen .get_event ())
810
+
811
+ # Check scroll up
812
+ self ._inject_mouse (screen , 1 , 1 , MouseEvent .SCROLL_DOWN )
813
+ ev = screen .get_event ()
814
+ self .assertEqual (ev .x , 1 )
815
+ self .assertEqual (ev .y , 1 )
816
+ self .assertEqual (ev .buttons , MouseEvent .SCROLL_DOWN )
817
+ self .assertIsNone (screen .get_event ())
818
+
790
819
Screen .wrapper (internal_checks , height = 15 )
791
820
792
821
def test_windows_input (self ):
0 commit comments