@@ -30,11 +30,16 @@ impl Handle {
3030 uinput. set_relbit ( RelativeAxis :: X ) . unwrap ( ) ;
3131 uinput. set_relbit ( RelativeAxis :: Y ) . unwrap ( ) ;
3232 uinput. set_relbit ( RelativeAxis :: Wheel ) . unwrap ( ) ;
33+ uinput. set_relbit ( RelativeAxis :: WheelHiRes ) . unwrap ( ) ;
3334
3435 // Enable all keys
3536 for key in UKey :: iter ( ) {
3637 uinput. set_keybit ( key) . unwrap ( ) ;
3738 }
39+ // Enable all keys
40+ for rel in RelativeAxis :: iter ( ) {
41+ uinput. set_relbit ( rel) . unwrap ( ) ;
42+ }
3843
3944 let input_id = InputId {
4045 bustype : input_linux:: sys:: BUS_VIRTUAL ,
@@ -116,21 +121,30 @@ impl Handle {
116121 }
117122 EventType :: MouseMove { x, y } => {
118123 let time = Self :: get_current_time ( ) ;
124+ let reset_x = RelativeEvent :: new ( time, RelativeAxis :: X , i32:: MIN ) ;
125+ let reset_x: input_event = InputEvent :: from ( reset_x) . into ( ) ;
126+ let reset_y = RelativeEvent :: new ( time, RelativeAxis :: Y , i32:: MIN ) ;
127+ let reset_y: input_event = InputEvent :: from ( reset_y) . into ( ) ;
128+ let rsync = SynchronizeEvent :: new ( time, SynchronizeKind :: Report , 0 ) ;
129+ let rsync: input_event = InputEvent :: from ( rsync) . into ( ) ;
130+
119131 let event_x = RelativeEvent :: new ( time, RelativeAxis :: X , * x as i32 ) ;
120132 let event_x: input_event = InputEvent :: from ( event_x) . into ( ) ;
121133 let event_y = RelativeEvent :: new ( time, RelativeAxis :: Y , * y as i32 ) ;
122134 let event_y: input_event = InputEvent :: from ( event_y) . into ( ) ;
123135 let sync = SynchronizeEvent :: new ( time, SynchronizeKind :: Report , 0 ) ;
124136 let sync: input_event = InputEvent :: from ( sync) . into ( ) ;
125137 handle
126- . write ( & [ event_x, event_y, sync] )
138+ . write ( & [ reset_x , reset_y , rsync , event_x, event_y, sync] )
127139 . map_err ( |_| SimulateError ) ?;
128140 }
129141 EventType :: Wheel { delta_x, delta_y } => {
130142 let time = Self :: get_current_time ( ) ;
131- let event_x = RelativeEvent :: new ( time, RelativeAxis :: Wheel , * delta_x as i32 ) ;
143+ let event_x =
144+ RelativeEvent :: new ( time, RelativeAxis :: WheelHiRes , ( * delta_x * 120 ) as i32 ) ;
132145 let event_x: input_event = InputEvent :: from ( event_x) . into ( ) ;
133- let event_y = RelativeEvent :: new ( time, RelativeAxis :: Wheel , * delta_y as i32 ) ;
146+ let event_y =
147+ RelativeEvent :: new ( time, RelativeAxis :: WheelHiRes , ( * delta_y * 120 ) as i32 ) ;
134148 let event_y: input_event = InputEvent :: from ( event_y) . into ( ) ;
135149 let sync = SynchronizeEvent :: new ( time, SynchronizeKind :: Report , 0 ) ;
136150 let sync: input_event = InputEvent :: from ( sync) . into ( ) ;
0 commit comments