@ -81,6 +81,7 @@ static void weston_mode_switch_finish(struct weston_output *output, 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									      int  scale_changed )   
					 
					 
					 
									      int  scale_changed )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					{  
					 
					 
					 
					{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						struct  weston_seat  * seat ;   
					 
					 
					 
						struct  weston_seat  * seat ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						struct  weston_head  * head ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						struct  wl_resource  * resource ;   
					 
					 
					 
						struct  wl_resource  * resource ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						pixman_region32_t  old_output_region ;   
					 
					 
					 
						pixman_region32_t  old_output_region ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						int  version ;   
					 
					 
					 
						int  version ;   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -129,8 +130,10 @@ static void weston_mode_switch_finish(struct weston_output *output, 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						if  ( ! mode_changed  & &  ! scale_changed )   
					 
					 
					 
						if  ( ! mode_changed  & &  ! scale_changed )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return ;   
					 
					 
					 
							return ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						head  =  & output - > head ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						/* notify clients of the changes */   
					 
					 
					 
						/* notify clients of the changes */   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						wl_resource_for_each ( resource ,  & output - > resource_list )  {   
					 
					 
					 
						wl_resource_for_each ( resource ,  & head - > resource_list )  {   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
							if  ( mode_changed )  {   
					 
					 
					 
							if  ( mode_changed )  {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								wl_output_send_mode ( resource ,   
					 
					 
					 
								wl_output_send_mode ( resource ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
										    output - > current_mode - > flags ,   
					 
					 
					 
										    output - > current_mode - > flags ,   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -340,12 +343,14 @@ weston_presentation_feedback_present( 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							uint32_t  flags )   
					 
					 
					 
							uint32_t  flags )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					{  
					 
					 
					 
					{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						struct  wl_client  * client  =  wl_resource_get_client ( feedback - > resource ) ;   
					 
					 
					 
						struct  wl_client  * client  =  wl_resource_get_client ( feedback - > resource ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						struct  weston_head  * head ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						struct  wl_resource  * o ;   
					 
					 
					 
						struct  wl_resource  * o ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						uint32_t  tv_sec_hi ;   
					 
					 
					 
						uint32_t  tv_sec_hi ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						uint32_t  tv_sec_lo ;   
					 
					 
					 
						uint32_t  tv_sec_lo ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						uint32_t  tv_nsec ;   
					 
					 
					 
						uint32_t  tv_nsec ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						wl_resource_for_each ( o ,  & output - > resource_list )  {   
					 
					 
					 
						head  =  & output - > head ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						wl_resource_for_each ( o ,  & head - > resource_list )  {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							if  ( wl_resource_get_client ( o )  ! =  client )   
					 
					 
					 
							if  ( wl_resource_get_client ( o )  ! =  client )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								continue ;   
					 
					 
					 
								continue ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -922,7 +927,7 @@ weston_view_damage_below(struct weston_view *view) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					/** Send wl_surface.enter/leave events
  
					 
					 
					 
					/** Send wl_surface.enter/leave events
  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 *   
					 
					 
					 
					 *   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 *  \ param  surface  The  surface .   
					 
					 
					 
					 *  \ param  surface  The  surface .   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 *  \ param  output  T he  entered / left  output .   
					 
					 
					 
					 *  \ param  head  A  head  of  t he  entered / left  output .   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 *  \ param  enter  True  if  entered .   
					 
					 
					 
					 *  \ param  enter  True  if  entered .   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 *  \ param  left  True  if  left .   
					 
					 
					 
					 *  \ param  left  True  if  left .   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 *   
					 
					 
					 
					 *   
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -931,7 +936,7 @@ weston_view_damage_below(struct weston_view *view) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 */   
					 
					 
					 
					 */   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  void  
					 
					 
					 
					static  void  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					weston_surface_send_enter_leave ( struct  weston_surface  * surface ,  
					 
					 
					 
					weston_surface_send_enter_leave ( struct  weston_surface  * surface ,  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									struct  weston_output  * output  ,   
					 
					 
					 
									struct  weston_head  * head  ,   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
									bool  enter ,   
					 
					 
					 
									bool  enter ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
									bool  leave )   
					 
					 
					 
									bool  leave )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					{  
					 
					 
					 
					{  
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -941,7 +946,7 @@ weston_surface_send_enter_leave(struct weston_surface *surface, 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						assert ( enter  ! =  leave ) ;   
					 
					 
					 
						assert ( enter  ! =  leave ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						client  =  wl_resource_get_client ( surface - > resource ) ;   
					 
					 
					 
						client  =  wl_resource_get_client ( surface - > resource ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						wl_resource_for_each ( wloutput ,  & output - > resource_list )  {   
					 
					 
					 
						wl_resource_for_each ( wloutput ,  & head - > resource_list )  {   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
							if  ( wl_resource_get_client ( wloutput )  ! =  client )   
					 
					 
					 
							if  ( wl_resource_get_client ( wloutput )  ! =  client )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								continue ;   
					 
					 
					 
								continue ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -981,7 +986,7 @@ weston_surface_update_output_mask(struct weston_surface *es, uint32_t mask) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							if  ( ! ( output_bit  &  different ) )   
					 
					 
					 
							if  ( ! ( output_bit  &  different ) )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								continue ;   
					 
					 
					 
								continue ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							weston_surface_send_enter_leave ( es ,  output ,   
					 
					 
					 
							weston_surface_send_enter_leave ( es ,  & output - > head ,   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
											output_bit  &  entered ,   
					 
					 
					 
											output_bit  &  entered ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
											output_bit  &  left ) ;   
					 
					 
					 
											output_bit  &  left ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						}   
					 
					 
					 
						}   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -4324,7 +4329,7 @@ bind_output(struct wl_client *client, 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							return ;   
					 
					 
					 
							return ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						}   
					 
					 
					 
						}   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						wl_list_insert ( & output - > resource_list ,  wl_resource_get_link ( resource ) ) ;   
					 
					 
					 
						wl_list_insert ( & head - > resource_list ,  wl_resource_get_link ( resource ) ) ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						wl_resource_set_implementation ( resource ,  & output_interface ,  data ,  unbind_resource ) ;   
					 
					 
					 
						wl_resource_set_implementation ( resource ,  & output_interface ,  data ,  unbind_resource ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						wl_output_send_geometry ( resource ,   
					 
					 
					 
						wl_output_send_geometry ( resource ,   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -4578,7 +4583,7 @@ weston_output_move(struct weston_output *output, int x, int y) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						wl_signal_emit ( & output - > compositor - > output_moved_signal ,  output ) ;   
					 
					 
					 
						wl_signal_emit ( & output - > compositor - > output_moved_signal ,  output ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						/* Notify clients of the change for output position. */   
					 
					 
					 
						/* Notify clients of the change for output position. */   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						wl_resource_for_each ( resource ,  & output - > resource_list )  {   
					 
					 
					 
						wl_resource_for_each ( resource ,  & head - > resource_list )  {   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
							wl_output_send_geometry ( resource ,   
					 
					 
					 
							wl_output_send_geometry ( resource ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
										output - > x ,   
					 
					 
					 
										output - > x ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
										output - > y ,   
					 
					 
					 
										output - > y ,   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -4612,6 +4617,7 @@ weston_compositor_add_output(struct weston_compositor *compositor, 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                             struct  weston_output  * output )   
					 
					 
					 
					                             struct  weston_output  * output )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					{  
					 
					 
					 
					{  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						struct  weston_view  * view ,  * next ;   
					 
					 
					 
						struct  weston_view  * view ,  * next ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						struct  weston_head  * head ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						assert ( ! output - > enabled ) ;   
					 
					 
					 
						assert ( ! output - > enabled ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -4629,9 +4635,10 @@ weston_compositor_add_output(struct weston_compositor *compositor, 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						wl_list_insert ( compositor - > output_list . prev ,  & output - > link ) ;   
					 
					 
					 
						wl_list_insert ( compositor - > output_list . prev ,  & output - > link ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						output - > enabled  =  true ;   
					 
					 
					 
						output - > enabled  =  true ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						output - > global  =  wl_global_create ( compositor - > wl_display ,   
					 
					 
					 
						head  =  & output - > head ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
										  & wl_output_interface ,  3 ,   
					 
					 
					 
						head - > global  =  wl_global_create ( compositor - > wl_display ,   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
										  output ,  bind_output ) ;   
					 
					 
					 
										& wl_output_interface ,  3 ,   
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
										output ,  bind_output ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						wl_signal_emit ( & compositor - > output_created_signal ,  output ) ;   
					 
					 
					 
						wl_signal_emit ( & compositor - > output_created_signal ,  output ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -4703,6 +4710,7 @@ weston_compositor_remove_output(struct weston_output *output) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						struct  weston_compositor  * compositor  =  output - > compositor ;   
					 
					 
					 
						struct  weston_compositor  * compositor  =  output - > compositor ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						struct  wl_resource  * resource ;   
					 
					 
					 
						struct  wl_resource  * resource ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						struct  weston_view  * view ;   
					 
					 
					 
						struct  weston_view  * view ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						struct  weston_head  * head ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						assert ( output - > destroying ) ;   
					 
					 
					 
						assert ( output - > destroying ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						assert ( output - > enabled ) ;   
					 
					 
					 
						assert ( output - > enabled ) ;   
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -4723,9 +4731,10 @@ weston_compositor_remove_output(struct weston_output *output) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						wl_signal_emit ( & compositor - > output_destroyed_signal ,  output ) ;   
					 
					 
					 
						wl_signal_emit ( & compositor - > output_destroyed_signal ,  output ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						wl_signal_emit ( & output - > destroy_signal ,  output ) ;   
					 
					 
					 
						wl_signal_emit ( & output - > destroy_signal ,  output ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						wl_global_destroy ( output - > global ) ;   
					 
					 
					 
						head  =  & output - > head ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
						output - > global  =  NULL ;   
					 
					 
					 
						wl_global_destroy ( head - > global ) ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
						wl_resource_for_each ( resource ,  & output - > resource_list )  {   
					 
					 
					 
						head - > global  =  NULL ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						wl_resource_for_each ( resource ,  & head - > resource_list )  {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							wl_resource_set_destructor ( resource ,  NULL ) ;   
					 
					 
					 
							wl_resource_set_destructor ( resource ,  NULL ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						}   
					 
					 
					 
						}   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -4793,7 +4802,7 @@ weston_output_set_transform(struct weston_output *output, 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						output - > dirty  =  1 ;   
					 
					 
					 
						output - > dirty  =  1 ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						/* Notify clients of the change for output transform. */   
					 
					 
					 
						/* Notify clients of the change for output transform. */   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						wl_resource_for_each ( resource ,  & output - > resource_list )  {   
					 
					 
					 
						wl_resource_for_each ( resource ,  & head - > resource_list )  {   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
							wl_output_send_geometry ( resource ,   
					 
					 
					 
							wl_output_send_geometry ( resource ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
										output - > x ,   
					 
					 
					 
										output - > x ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
										output - > y ,   
					 
					 
					 
										output - > y ,   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -4967,7 +4976,7 @@ weston_output_enable(struct weston_output *output) 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						wl_signal_init ( & output - > frame_signal ) ;   
					 
					 
					 
						wl_signal_init ( & output - > frame_signal ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						wl_signal_init ( & output - > destroy_signal ) ;   
					 
					 
					 
						wl_signal_init ( & output - > destroy_signal ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						wl_list_init ( & output - > animation_list ) ;   
					 
					 
					 
						wl_list_init ( & output - > animation_list ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						wl_list_init ( & output - > resource_list ) ;   
					 
					 
					 
						wl_list_init ( & output - > head . resource_list ) ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
						wl_list_init ( & output - > feedback_list ) ;   
					 
					 
					 
						wl_list_init ( & output - > feedback_list ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						/* Enable the output (set up the crtc or create a
   
					 
					 
					 
						/* Enable the output (set up the crtc or create a