@ -167,17 +167,20 @@ default_grab_pointer_focus(struct weston_pointer_grab *grab) 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  void  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					default_grab_pointer_motion ( struct  weston_pointer_grab  * grab ,  uint32_t  time ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								    wl_fixed_t  x ,  wl_fixed_t  y )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								    struct  weston_pointer_motion_event  * event )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  weston_pointer  * pointer  =  grab - > pointer ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  wl_list  * resource_list ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  wl_resource  * resource ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						wl_fixed_t  x ,  y ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  ( pointer - > focus )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  ( pointer - > focus )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							weston_pointer_motion_to_abs ( pointer ,  event ,  & x ,  & y ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							weston_view_from_global_fixed ( pointer - > focus ,  x ,  y ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
										      & pointer - > sx ,  & pointer - > sy ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						weston_pointer_move ( pointer ,  x ,  y ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						weston_pointer_move ( pointer ,  event ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						resource_list  =  & pointer - > focus_resource_list ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						wl_resource_for_each ( resource ,  resource_list )  {   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -936,9 +939,9 @@ weston_pointer_clamp(struct weston_pointer *pointer, wl_fixed_t *fx, wl_fixed_t 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							weston_pointer_clamp_for_output ( pointer ,  prev ,  fx ,  fy ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					/* Takes absolute values */  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					WL_EXPORT  void  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					weston_pointer_move ( struct  weston_pointer  * pointer ,   wl_fixed_t  x ,  wl_fixed_t  y )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  void  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					weston_pointer_move_to ( struct  weston_pointer  * pointer ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							        wl_fixed_t  x ,  wl_fixed_t  y )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						int32_t  ix ,  iy ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -961,6 +964,33 @@ weston_pointer_move(struct weston_pointer *pointer, wl_fixed_t x, wl_fixed_t y) 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						wl_signal_emit ( & pointer - > motion_signal ,  pointer ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					WL_EXPORT  void  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					weston_pointer_motion_to_abs ( struct  weston_pointer  * pointer ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								     struct  weston_pointer_motion_event  * event ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
								     wl_fixed_t  * x ,  wl_fixed_t  * y )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  ( event - > mask  &  WESTON_POINTER_MOTION_ABS )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							* x  =  wl_fixed_from_double ( event - > x ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							* y  =  wl_fixed_from_double ( event - > y ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						}  else  if  ( event - > mask  &  WESTON_POINTER_MOTION_REL )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							* x  =  pointer - > x  +  wl_fixed_from_double ( event - > dx ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							* y  =  pointer - > y  +  wl_fixed_from_double ( event - > dy ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						}  else  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							assert ( ! " invalid motion event " ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							* x  =  * y  =  0 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						}   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					WL_EXPORT  void  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					weston_pointer_move ( struct  weston_pointer  * pointer ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							    struct  weston_pointer_motion_event  * event )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						wl_fixed_t  x ,  y ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						weston_pointer_motion_to_abs ( pointer ,  event ,  & x ,  & y ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						weston_pointer_move_to ( pointer ,  x ,  y ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					/** Verify if the pointer is in a valid position and move it if it isn't.
  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					 */   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  void  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -1002,18 +1032,19 @@ weston_pointer_handle_output_destroy(struct wl_listener *listener, void *data) 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						fy  =  pointer - > y ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						weston_pointer_clamp_for_output ( pointer ,  closest ,  & fx ,  & fy ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						weston_pointer_move ( pointer ,  fx ,  fy ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						weston_pointer_move_to  ( pointer ,  fx ,  fy ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					WL_EXPORT  void  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					notify_motion ( struct  weston_seat  * seat ,  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						      uint32_t  time ,  wl_fixed_t  dx ,  wl_fixed_t  dy )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						      uint32_t  time ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						      struct  weston_pointer_motion_event  * event )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  weston_compositor  * ec  =  seat - > compositor ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  weston_pointer  * pointer  =  weston_seat_get_pointer ( seat ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						weston_compositor_wake ( ec ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						pointer - > grab - > interface - > motion ( pointer - > grab ,  time ,  pointer - > x  +  dx ,  pointer - > y  +  dy ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						pointer - > grab - > interface - > motion ( pointer - > grab ,  time ,  event ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					static  void  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -1058,9 +1089,17 @@ notify_motion_absolute(struct weston_seat *seat, 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  weston_compositor  * ec  =  seat - > compositor ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  weston_pointer  * pointer  =  weston_seat_get_pointer ( seat ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  weston_pointer_motion_event  event  =  {  0  } ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						weston_compositor_wake ( ec ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						pointer - > grab - > interface - > motion ( pointer - > grab ,  time ,  x ,  y ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						event  =  ( struct  weston_pointer_motion_event )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							. mask  =  WESTON_POINTER_MOTION_ABS ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							. x  =  wl_fixed_to_double ( x ) ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							. y  =  wl_fixed_to_double ( y ) ,   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						} ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						pointer - > grab - > interface - > motion ( pointer - > grab ,  time ,  & event ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					WL_EXPORT  void  
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -1439,7 +1478,7 @@ notify_pointer_focus(struct weston_seat *seat, struct weston_output *output, 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						struct  weston_pointer  * pointer  =  weston_seat_get_pointer ( seat ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  ( output )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							weston_pointer_move ( pointer ,  x ,  y ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							weston_pointer_move_to  ( pointer ,  x ,  y ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						}  else  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							/* FIXME: We should call weston_pointer_set_focus(seat,
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
							 *  NULL )  here ,  but  somehow  that  breaks  re - entry . . .  */