|  |  |  | @ -517,13 +517,34 @@ static bool scan_out_fullscreen_view(struct sway_output *output, | 
			
		
	
		
			
				
					|  |  |  |  | 	return wlr_output_commit(wlr_output); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | static void get_frame_damage(struct sway_output *output, | 
			
		
	
		
			
				
					|  |  |  |  | 		pixman_region32_t *frame_damage) { | 
			
		
	
		
			
				
					|  |  |  |  | 	struct wlr_output *wlr_output = output->wlr_output; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	int width, height; | 
			
		
	
		
			
				
					|  |  |  |  | 	wlr_output_transformed_resolution(wlr_output, &width, &height); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	pixman_region32_init(frame_damage); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	enum wl_output_transform transform = | 
			
		
	
		
			
				
					|  |  |  |  | 		wlr_output_transform_invert(wlr_output->transform); | 
			
		
	
		
			
				
					|  |  |  |  | 	wlr_region_transform(frame_damage, &output->damage_ring.current, | 
			
		
	
		
			
				
					|  |  |  |  | 		transform, width, height); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	if (debug.damage != DAMAGE_DEFAULT) { | 
			
		
	
		
			
				
					|  |  |  |  | 		pixman_region32_union_rect(frame_damage, frame_damage, | 
			
		
	
		
			
				
					|  |  |  |  | 			0, 0, wlr_output->width, wlr_output->height); | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | static int output_repaint_timer_handler(void *data) { | 
			
		
	
		
			
				
					|  |  |  |  | 	struct sway_output *output = data; | 
			
		
	
		
			
				
					|  |  |  |  | 	if (output->wlr_output == NULL) { | 
			
		
	
		
			
				
					|  |  |  |  | 	struct wlr_output *wlr_output = output->wlr_output; | 
			
		
	
		
			
				
					|  |  |  |  | 	if (wlr_output == NULL) { | 
			
		
	
		
			
				
					|  |  |  |  | 		return 0; | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	output->wlr_output->frame_pending = false; | 
			
		
	
		
			
				
					|  |  |  |  | 	wlr_output->frame_pending = false; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	struct sway_workspace *workspace = output->current.active_workspace; | 
			
		
	
		
			
				
					|  |  |  |  | 	if (workspace == NULL) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -575,10 +596,22 @@ static int output_repaint_timer_handler(void *data) { | 
			
		
	
		
			
				
					|  |  |  |  | 	struct timespec now; | 
			
		
	
		
			
				
					|  |  |  |  | 	clock_gettime(CLOCK_MONOTONIC, &now); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	output_render(output, &now, &damage); | 
			
		
	
		
			
				
					|  |  |  |  | 	output_render(output, &damage); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	pixman_region32_fini(&damage); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	pixman_region32_t frame_damage; | 
			
		
	
		
			
				
					|  |  |  |  | 	get_frame_damage(output, &frame_damage); | 
			
		
	
		
			
				
					|  |  |  |  | 	wlr_output_set_damage(wlr_output, &frame_damage); | 
			
		
	
		
			
				
					|  |  |  |  | 	pixman_region32_fini(&frame_damage); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	if (!wlr_output_commit(wlr_output)) { | 
			
		
	
		
			
				
					|  |  |  |  | 		return 0; | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	wlr_damage_ring_rotate(&output->damage_ring); | 
			
		
	
		
			
				
					|  |  |  |  | 	output->last_frame = now; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	return 0; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | 
 |