@ -25,6 +25,7 @@
* Adam Jackson ( ajax @ redhat . com )
* Adam Jackson ( ajax @ redhat . com )
* Peter Hutterer ( peter . hutterer @ redhat . com )
* Peter Hutterer ( peter . hutterer @ redhat . com )
* Oliver McFadden ( oliver . mcfadden @ nokia . com )
* Oliver McFadden ( oliver . mcfadden @ nokia . com )
* Thomas H . P . Andersen ( phomes @ gmail . com )
*/
*/
# ifdef HAVE_CONFIG_H
# ifdef HAVE_CONFIG_H
@ -432,31 +433,36 @@ EvdevProcessValuators(InputInfoPtr pInfo)
/* Apply transformations on relative coordinates */
/* Apply transformations on relative coordinates */
if ( pEvdev - > rel_queued ) {
if ( pEvdev - > rel_queued ) {
int deltaX = 0 , deltaY = 0 ;
double deltaX = 0 , deltaY = 0 ;
if ( valuator_mask_isset ( pEvdev - > rel_vals , REL_X ) )
if ( valuator_mask_isset ( pEvdev - > rel_vals , REL_X ) )
deltaX = valuator_mask_get ( pEvdev - > rel_vals , REL_X ) ;
deltaX = valuator_mask_get_double ( pEvdev - > rel_vals , REL_X ) ;
if ( valuator_mask_isset ( pEvdev - > rel_vals , REL_Y ) )
if ( valuator_mask_isset ( pEvdev - > rel_vals , REL_Y ) )
deltaY = valuator_mask_get ( pEvdev - > rel_vals , REL_Y ) ;
deltaY = valuator_mask_get_double ( pEvdev - > rel_vals , REL_Y ) ;
if ( pEvdev - > swap_axes ) {
if ( pEvdev - > swap_axes ) {
int tmp = deltaX ;
double tmp = deltaX ;
deltaX = deltaY ;
deltaX = deltaY ;
deltaY = tmp ;
deltaY = tmp ;
}
}
if ( pEvdev - > resolution > 0 ) {
deltaX * = DEFAULT_MOUSE_DPI / pEvdev - > resolution ;
deltaY * = DEFAULT_MOUSE_DPI / pEvdev - > resolution ;
}
if ( pEvdev - > invert_x )
if ( pEvdev - > invert_x )
deltaX * = - 1 ;
deltaX * = - 1 ;
if ( pEvdev - > invert_y )
if ( pEvdev - > invert_y )
deltaY * = - 1 ;
deltaY * = - 1 ;
if ( deltaX )
if ( deltaX )
valuator_mask_set ( pEvdev - > rel_vals , REL_X , deltaX ) ;
valuator_mask_set_double ( pEvdev - > rel_vals , REL_X , deltaX ) ;
else
else
valuator_mask_unset ( pEvdev - > rel_vals , REL_X ) ;
valuator_mask_unset ( pEvdev - > rel_vals , REL_X ) ;
if ( deltaY )
if ( deltaY )
valuator_mask_set ( pEvdev - > rel_vals , REL_Y , deltaY ) ;
valuator_mask_set_double ( pEvdev - > rel_vals , REL_Y , deltaY ) ;
else
else
valuator_mask_unset ( pEvdev - > rel_vals , REL_Y ) ;
valuator_mask_unset ( pEvdev - > rel_vals , REL_Y ) ;
@ -2293,6 +2299,12 @@ EvdevProbe(InputInfoPtr pInfo)
pEvdev - > invert_y = xf86SetBoolOption ( pInfo - > options , " InvertY " , FALSE ) ;
pEvdev - > invert_y = xf86SetBoolOption ( pInfo - > options , " InvertY " , FALSE ) ;
pEvdev - > swap_axes = xf86SetBoolOption ( pInfo - > options , " SwapAxes " , FALSE ) ;
pEvdev - > swap_axes = xf86SetBoolOption ( pInfo - > options , " SwapAxes " , FALSE ) ;
pEvdev - > resolution = xf86SetIntOption ( pInfo - > options , " Resolution " , 0 ) ;
if ( pEvdev - > resolution < 0 ) {
xf86IDrvMsg ( pInfo , X_ERROR , " Resolution must be a positive number " ) ;
pEvdev - > resolution = 0 ;
}
str = xf86CheckStrOption ( pInfo - > options , " Calibration " , NULL ) ;
str = xf86CheckStrOption ( pInfo - > options , " Calibration " , NULL ) ;
if ( str ) {
if ( str ) {
num_calibration = sscanf ( str , " %d %d %d %d " ,
num_calibration = sscanf ( str , " %d %d %d %d " ,