|  |  | @ -122,12 +122,15 @@ void output_surface_for_each_surface(struct roots_output *output, | 
			
		
	
		
		
			
				
					
					|  |  |  | void output_view_for_each_surface(struct roots_output *output, |  |  |  | void output_view_for_each_surface(struct roots_output *output, | 
			
		
	
		
		
			
				
					
					|  |  |  | 		struct roots_view *view, roots_surface_iterator_func_t iterator, |  |  |  | 		struct roots_view *view, roots_surface_iterator_func_t iterator, | 
			
		
	
		
		
			
				
					
					|  |  |  | 		void *user_data) { |  |  |  | 		void *user_data) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	struct wlr_box *output_box = | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		wlr_output_layout_get_box(output->desktop->layout, output->wlr_output); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	struct surface_iterator_data data = { |  |  |  | 	struct surface_iterator_data data = { | 
			
		
	
		
		
			
				
					
					|  |  |  | 		.user_iterator = iterator, |  |  |  | 		.user_iterator = iterator, | 
			
		
	
		
		
			
				
					
					|  |  |  | 		.user_data = user_data, |  |  |  | 		.user_data = user_data, | 
			
		
	
		
		
			
				
					
					|  |  |  | 		.output = output, |  |  |  | 		.output = output, | 
			
		
	
		
		
			
				
					
					|  |  |  | 		.ox = view->box.x - output->wlr_output->lx, |  |  |  | 		.ox = view->box.x - output_box->x, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		.oy = view->box.y - output->wlr_output->ly, |  |  |  | 		.oy = view->box.y - output_box->y, | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		.width = view->box.width, |  |  |  | 		.width = view->box.width, | 
			
		
	
		
		
			
				
					
					|  |  |  | 		.height = view->box.height, |  |  |  | 		.height = view->box.height, | 
			
		
	
		
		
			
				
					
					|  |  |  | 		.rotation = view->rotation, |  |  |  | 		.rotation = view->rotation, | 
			
		
	
	
		
		
			
				
					|  |  | @ -140,11 +143,14 @@ void output_view_for_each_surface(struct roots_output *output, | 
			
		
	
		
		
			
				
					
					|  |  |  | void output_xwayland_children_for_each_surface( |  |  |  | void output_xwayland_children_for_each_surface( | 
			
		
	
		
		
			
				
					
					|  |  |  | 		struct roots_output *output, struct wlr_xwayland_surface *surface, |  |  |  | 		struct roots_output *output, struct wlr_xwayland_surface *surface, | 
			
		
	
		
		
			
				
					
					|  |  |  | 		roots_surface_iterator_func_t iterator, void *user_data) { |  |  |  | 		roots_surface_iterator_func_t iterator, void *user_data) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	struct wlr_box *output_box = | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		wlr_output_layout_get_box(output->desktop->layout, output->wlr_output); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	struct wlr_xwayland_surface *child; |  |  |  | 	struct wlr_xwayland_surface *child; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	wl_list_for_each(child, &surface->children, parent_link) { |  |  |  | 	wl_list_for_each(child, &surface->children, parent_link) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if (child->mapped) { |  |  |  | 		if (child->mapped) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 			double ox = child->x - output->wlr_output->lx; |  |  |  | 			double ox = child->x - output_box->x; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 			double oy = child->y - output->wlr_output->ly; |  |  |  | 			double oy = child->y - output_box->y; | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 			output_surface_for_each_surface(output, child->surface, |  |  |  | 			output_surface_for_each_surface(output, child->surface, | 
			
		
	
		
		
			
				
					
					|  |  |  | 				ox, oy, iterator, user_data); |  |  |  | 				ox, oy, iterator, user_data); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
	
		
		
			
				
					|  |  | @ -187,6 +193,9 @@ void output_layer_for_each_surface(struct roots_output *output, | 
			
		
	
		
		
			
				
					
					|  |  |  | void output_drag_icons_for_each_surface(struct roots_output *output, |  |  |  | void output_drag_icons_for_each_surface(struct roots_output *output, | 
			
		
	
		
		
			
				
					
					|  |  |  | 		struct roots_input *input, roots_surface_iterator_func_t iterator, |  |  |  | 		struct roots_input *input, roots_surface_iterator_func_t iterator, | 
			
		
	
		
		
			
				
					
					|  |  |  | 		void *user_data) { |  |  |  | 		void *user_data) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	struct wlr_box *output_box = | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		wlr_output_layout_get_box(output->desktop->layout, output->wlr_output); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	struct roots_seat *seat; |  |  |  | 	struct roots_seat *seat; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	wl_list_for_each(seat, &input->seats, link) { |  |  |  | 	wl_list_for_each(seat, &input->seats, link) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 		struct roots_drag_icon *drag_icon = seat->drag_icon; |  |  |  | 		struct roots_drag_icon *drag_icon = seat->drag_icon; | 
			
		
	
	
		
		
			
				
					|  |  | @ -194,8 +203,8 @@ void output_drag_icons_for_each_surface(struct roots_output *output, | 
			
		
	
		
		
			
				
					
					|  |  |  | 			continue; |  |  |  | 			continue; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		double ox = drag_icon->x - output->wlr_output->lx; |  |  |  | 		double ox = drag_icon->x - output_box->x; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		double oy = drag_icon->y - output->wlr_output->ly; |  |  |  | 		double oy = drag_icon->y - output_box->y; | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		output_surface_for_each_surface(output, |  |  |  | 		output_surface_for_each_surface(output, | 
			
		
	
		
		
			
				
					
					|  |  |  | 			drag_icon->wlr_drag_icon->surface, ox, oy, iterator, user_data); |  |  |  | 			drag_icon->wlr_drag_icon->surface, ox, oy, iterator, user_data); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
	
		
		
			
				
					|  |  | @ -430,7 +439,12 @@ static void update_output_manager_config(struct roots_desktop *desktop) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	struct roots_output *output; |  |  |  | 	struct roots_output *output; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	wl_list_for_each(output, &desktop->outputs, link) { |  |  |  | 	wl_list_for_each(output, &desktop->outputs, link) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		struct wlr_output_configuration_head_v1 *config_head = | 
			
		
	
		
		
			
				
					
					|  |  |  | 			wlr_output_configuration_head_v1_create(config, output->wlr_output); |  |  |  | 			wlr_output_configuration_head_v1_create(config, output->wlr_output); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		struct wlr_box *output_box = wlr_output_layout_get_box( | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			output->desktop->layout, output->wlr_output); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		config_head->state.x = output_box->x; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		config_head->state.y = output_box->y; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	wlr_output_manager_v1_set_configuration(desktop->output_manager_v1, config); |  |  |  | 	wlr_output_manager_v1_set_configuration(desktop->output_manager_v1, config); | 
			
		
	
	
		
		
			
				
					|  |  | 
 |