|  |  |  | @ -84,10 +84,31 @@ static void subcompositor_get_subsurface(struct wl_client *client, | 
			
		
	
		
			
				
					|  |  |  |  | 	struct wlr_surface *surface = wl_resource_get_user_data(surface_resource); | 
			
		
	
		
			
				
					|  |  |  |  | 	struct wlr_surface *parent = wl_resource_get_user_data(parent_resource); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	// TODO: errors
 | 
			
		
	
		
			
				
					|  |  |  |  | 	// * cannot be its own parent
 | 
			
		
	
		
			
				
					|  |  |  |  | 	// * cannot already a subsurface
 | 
			
		
	
		
			
				
					|  |  |  |  | 	// * cannot be an ancestor of parent
 | 
			
		
	
		
			
				
					|  |  |  |  | 	static const char msg[] = "get_subsurface: wl_subsurface@"; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	if (surface == parent) { | 
			
		
	
		
			
				
					|  |  |  |  | 		wl_resource_post_error(resource, | 
			
		
	
		
			
				
					|  |  |  |  | 			WL_SUBCOMPOSITOR_ERROR_BAD_SURFACE, | 
			
		
	
		
			
				
					|  |  |  |  | 			"%s%d: wl_surface@%d cannot be its own parent", | 
			
		
	
		
			
				
					|  |  |  |  | 			msg, id, wl_resource_get_id(surface_resource)); | 
			
		
	
		
			
				
					|  |  |  |  | 		return; | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	if (surface->subsurface) { | 
			
		
	
		
			
				
					|  |  |  |  | 		wl_resource_post_error(resource, | 
			
		
	
		
			
				
					|  |  |  |  | 			WL_SUBCOMPOSITOR_ERROR_BAD_SURFACE, | 
			
		
	
		
			
				
					|  |  |  |  | 			"%s%d: wl_surface@%d is already a sub-surface", | 
			
		
	
		
			
				
					|  |  |  |  | 			msg, id, wl_resource_get_id(surface_resource)); | 
			
		
	
		
			
				
					|  |  |  |  | 		return; | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	if (wlr_surface_get_main_surface(parent) == surface) { | 
			
		
	
		
			
				
					|  |  |  |  | 		wl_resource_post_error(resource, | 
			
		
	
		
			
				
					|  |  |  |  | 			WL_SUBCOMPOSITOR_ERROR_BAD_SURFACE, | 
			
		
	
		
			
				
					|  |  |  |  | 			"%s%d: wl_surface@%d is an ancestor of parent", | 
			
		
	
		
			
				
					|  |  |  |  | 			msg, id, wl_resource_get_id(surface_resource)); | 
			
		
	
		
			
				
					|  |  |  |  | 		return; | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	if (wlr_surface_set_role(surface, "wl_subsurface", resource, | 
			
		
	
		
			
				
					|  |  |  |  | 				WL_SUBCOMPOSITOR_ERROR_BAD_SURFACE) < 0) { | 
			
		
	
	
		
			
				
					|  |  |  | 
 |